numpy的tostring/fromstring ---我需要指定什么来恢复数组

ev-*_*-br 6 python portability numpy

给定numpy数组的原始二进制表示,明确还原数组所需的完整元数据集是什么?

例如,

>>> np.fromstring( np.array([42]).tostring())
array([  2.07507571e-322])
Run Code Online (Sandbox Code Playgroud)

这是可以预料的(事后看来,至少):这里我没有告诉fromstring你期望整数,所以它与默认的浮点数一致.

但在我看来,仅指定dtype=np.float64或类似可能或不足够.例如,

>>> a = np.array([42.])
>>> a.dtype
dtype('float64')
>>> a.dtype.byteorder
'='
Run Code Online (Sandbox Code Playgroud)

的文档告诉我的意思是"原生秩序".意思是,它会在big-endian和little-endian机器上被不同地解释 - 或者我错过了一些简单的东西?

unu*_*tbu 4

sys.byteorder给出机器的字节顺序。


然而,正如 @JFSebastain、@seberg 和 @jorgeca 所建议的,np.savez这是一个更好的方法。帮助文档字符串显示

import io
content = io.BytesIO()
np.savez(content, x=x, y=y)
content.seek(0)
Run Code Online (Sandbox Code Playgroud)

这意味着您可以将字符串保存content到 sqlite 数据库中。

然后,当您从数据库中选择该字符串时,可以使用以下命令将其重新转换为 numpy 数组:

data = np.load(content)
Run Code Online (Sandbox Code Playgroud)