gpt4 book ai didi

python - 如何在保留矩阵维度的同时序列化 numpy 数组?

转载 作者:IT老高 更新时间:2023-10-28 12:48:32 31 4
gpt4 key购买 nike

numpy.array.tostring 似乎没有保留关于矩阵维度的信息(参见 this question ),需要用户调用 numpy.array.reshape

有没有办法在保留此信息的同时将 numpy 数组序列化为 JSON 格式?

注意:数组可能包含整数、 float 或 bool 值。期望转置数组是合理的。

注意 2: 这样做的目的是使用 streamparse 通过 Storm 拓扑传递 numpy 数组,以防此类信息最终相关。

最佳答案

pickle.dumpsnumpy.save编码重建任意 NumPy 数组所需的所有信息,即使存在字节顺序问题、非连续数组或奇怪的结构化 dtypes。字节顺序问题可能是最重要的。您不希望 array([1]) 突然变成 array([16777216]) 因为您将数组加载到大端机器上。 pickle 可能是更方便的选择,虽然 save 有它自己的好处,在 npy format rationale 中给出.

我提供了序列化为 JSON 或字节串的选项,因为最初的提问者需要 JSON 可序列化的输出,但大多数来到这里的人可能不需要。

pickle方式:

import pickle
a = # some NumPy array

# Bytestring option
serialized = pickle.dumps(a)
deserialized_a = pickle.loads(serialized)

# JSON option
# latin-1 maps byte n to unicode code point n
serialized_as_json = json.dumps(pickle.dumps(a).decode('latin-1'))
deserialized_from_json = pickle.loads(json.loads(serialized_as_json).encode('latin-1'))

numpy.save 使用二进制格式,它需要写入文件,但您可以通过 io.BytesIO 解决这个问题:

a = # any NumPy array
memfile = io.BytesIO()
numpy.save(memfile, a)

serialized = memfile.getvalue()
serialized_as_json = json.dumps(serialized.decode('latin-1'))
# latin-1 maps byte n to unicode code point n

反序列化:

memfile = io.BytesIO()

# If you're deserializing from a bytestring:
memfile.write(serialized)
# Or if you're deserializing from JSON:
# memfile.write(json.loads(serialized_as_json).encode('latin-1'))
memfile.seek(0)
a = numpy.load(memfile)

关于python - 如何在保留矩阵维度的同时序列化 numpy 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30698004/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com