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机器上被不同地解释 - 或者我错过了一些简单的东西?
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)