将numpy数组序列化为npz字符串?

2g32fytz  于 9个月前  发布在  其他
关注(0)|答案(2)|浏览(101)

我正在寻找一种方法来从多个不同类型的numpy数组中生成一个压缩的二进制字符串。:D这个问题中推荐的方法:
Storing and loading numpy arrays as files
就是使用以下方法:

np.savez_compressed('file_name_here.npz', arr_a = a, arr_b = b)

字符串
但需要注意的是,我需要直接得到实际的字符串,并且没有一个路径来保存它。有没有简单的方法可以直接生成二进制字符串而不保存到磁盘?有没有什么方法可以做到这一点?

ruarlubt

ruarlubt1#

您可以简单地将压缩数组保存保存到StringIO对象中并读回它,

from cStringIO import StringIO
import numpy as np

x = np.ones(10)

f = StringIO()
np.savez_compressed(f, x=x)
f.seek(0)
out = f.read()

print(out)

字符串

vcirk6k6

vcirk6k62#

要将numpy数组保存为压缩字符串,可以将压缩数组保存到内存中的io.BytesIO(),并将这些字节转换为base64字符串。
然后,为了加载,你做相反的事情。这里有两个我写的方便的函数来做这件事:

import base64
import io
import numpy as np

def numpy_arr_to_zip_str(arr):
    f = io.BytesIO()
    np.savez_compressed(f, arr=arr)
    return base64.b64encode(f.getvalue())

def numpy_zip_str_to_arr(zip_str):
    f = io.BytesIO(base64.b64decode(zip_str))
    return np.load(f)['arr']

字符串
base64编码的字符串可以在不同的程序之间移植,这些程序可能接受也可能不接受字节通信。

相关问题