手动酸洗numpy阵列跨平台?

时间:2017-07-29 18:27:43

标签: python python-3.x numpy scipy pickle

我使用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

1 个答案:

答案 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_arraynpyio.save

https://github.com/numpy/numpy/blob/v1.13.0/numpy/lib/format.pyhttps://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。