我使用python3来挑选包含文本文本键的字典或使用整数scipy.sparse.lil_matrix
的{{1}}(链表)。
该文件是否跨平台(在安装了python3,scipy和numpy的机器上)?
腌制字典是否仅包含文本和numpy数组跨平台?
pickle是跨平台的:Is pickle file of python cross-platform?
numpy的dtype
文件格式是跨平台的:Is numpy.save cross platform? ...
如果我手动挑选一个numpy数组,不确定会发生什么。我检查了两台带有intel cpu的不同机器的整数numpy数组,值保持不变。
手动腌制一个numpy数组:
.npy
答案 0 :(得分:0)
如果我们不必修复导入,则使用整数dtype手动腌制numpy数组。
这是因为如果一个对象有一个reduce方法,那么pickle会使用它。
numpy.ndarray.__reduce__
' doc https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.reduce.html
" numpy ndarray如何被腌制"没有引用源代码:How does Python 3 know how to pickle extension types, especially Numpy arrays?
在启动时,对于浮点数,NaN,Inf,使用协议0的Pickling 不可移植: https://mail.python.org/pipermail/tutor/2010-May/075980.html
关于使用文本协议在python 3.1上进行酸洗浮动的官方文档: https://docs.python.org/3/whatsnew/3.1.html
新算法取决于底层的某些功能 浮点实现。如果找不到所需的功能, 将继续使用旧算法。此外,文字泡菜 协议通过使用旧协议确保跨平台可移植性 算法
用于写入文件的numpy源代码位于format.write_array
和npyio.save
(https://github.com/numpy/numpy/blob/v1.13.0/numpy/lib/format.py, https://github.com/numpy/numpy/blob/v1.13.0/numpy/lib/npyio.py#L435-L512)
标题可以保存为文本。
如果pickling参数为true,则数据只是pickle.dump
,这是numpy.save
的默认值。
在format.write_array
中,我发现:
pickle.dump(array,fp,protocol = 2,** pickle_kwargs)
format.py
也说:
.npy
格式是NumPy for中的标准二进制文件格式 在磁盘上保留单个任意NumPy阵列。格式存储 重构所需的所有形状和dtype信息 即使在具有不同架构的另一台机器上也能正确排列数组。
因此,numpy数组的手动腌制是跨平台的(如果我们不必修复导入),因为np.save
也使用pickle并且是跨平台的。
np.save
使用协议2.对于两台机器上的两个python 3,pickle.DEFAULT_PROTOCOL
为3。