【发布时间】:2017-07-29 18:27:43
【问题描述】:
我使用 python3 来腌制一个字典,其中包含文本的文本键或带有整数 dtype 的 scipy.sparse.lil_matrix(链表)。
该文件是否跨平台(在安装了 python3、scipy 和 numpy 的机器上)?
pickled 字典是否只包含文本和 numpy 数组跨平台?
pickle 是跨平台的:Is pickle file of python cross-platform?
numpy 的.npy 文件格式是跨平台的:Is numpy.save cross platform? ...
不确定如果我手动腌制一个 numpy 数组会发生什么。我用 intel cpu 在两台不同的机器上检查了一个整数 numpy 数组,值保持不变。
手动酸洗一个 numpy 数组:
import numpy as np
import pickle
x = np.random.randint(0, 2**63 - 1, dtype=np.int32)
d = {
'x': x,
'blah': "blah blah blah"
}
with open('bomb.pickle', 'wb+') as f:
pickle.dump(d, f)
【问题讨论】:
-
它应该是跨平台的,但要解压你需要安装 scipy 的内容。
-
我的意思是,在其他具有不同操作系统的计算机上,如果安装了 scipy,则取消选择应该可以工作。
-
这取决于 pickle 在 numpy 数组对象上的工作方式......如果它从内存中复制二进制字节,那么即使是整数,字节序的变化也会搞砸。如果它是内存转储,请忘记不同 cpu 的浮点格式兼容性。我不知道 numpy 数组的 C 部分是如何被 pickle 保存的。字典的 Python 部分和 numpy 数组在腌制时将是跨平台的。如果手动腌制的numpy数组是跨平台的,那么使用numpy数组构建的手动腌制的scipy稀疏矩阵也将是跨平台的。
-
你试过 hdf5 吗?例如。使用 pytables 或 h5py。这应该考虑到所有 Python 和平台差异。
-
这些是代码的旧部分。代码的新部分已经使用 hdf5。
标签: python python-3.x numpy scipy pickle