numpy.array.tostring似乎并没有保留有关矩阵尺寸的信息,要求用户向发出呼叫numpy.array.reshape。
numpy.array.tostring
numpy.array.reshape
有一种方法可以在保留此信息的同时将numpy数组序列化为JSON格式?
注意: 数组可能包含整数,浮点数或布尔值。期望转置数组是合理的。
注2: 这样做是为了使numpy数组使用streamparse通过Storm拓扑,以防此类信息最终变得有意义。
pickle.dumps或numpy.save对重构任意NumPy数组所需的所有信息进行编码,即使存在字节序问题,不连续的数组或奇怪的元组dtype。字节序问题可能是最重要的;您不希望array([1])突然array([16777216])因为在大型字节序的计算机上加载阵列而变得无所作为。pickle尽管save有其自身的优势(npy格式合理性给出),它可能是更方便的选择。
pickle.dumps
numpy.save
array([1])
array([16777216])
pickle
save
npy
该pickle选项:
import pickle a = # some NumPy array serialized = pickle.dumps(a, protocol=0) # protocol 0 is printable ASCII deserialized_a = pickle.loads(serialized)
numpy.save使用二进制格式,它需要写入文件,但是您可以使用以下方法解决io.BytesIO:
io.BytesIO
a = # any NumPy array memfile = io.BytesIO() numpy.save(memfile, a) memfile.seek(0) serialized = json.dumps(memfile.read().decode('latin-1')) # latin-1 maps byte n to unicode code point n
并反序列化:
memfile = io.BytesIO() memfile.write(json.loads(serialized).encode('latin-1')) memfile.seek(0) a = numpy.load(memfile)