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

问题描述 投票:0回答:2

我正在寻找一种从多个不同类型的 numpy 数组中生成压缩二进制字符串的方法。 :D 本题推荐的方法:

将 numpy 数组存储和加载为文件

就是使用以下内容:

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

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

python numpy io
2个回答
8
投票

您可以简单地将压缩数组保存到

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)

0
投票

要将 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 编码的字符串可以跨不同的程序移植,这些程序可能接受也可能不接受字节通信。

© www.soinside.com 2019 - 2024. All rights reserved.