首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >numpy阵列的手动酸洗是否跨平台?

numpy阵列的手动酸洗是否跨平台?
EN

Stack Overflow用户
提问于 2017-07-30 02:27:43
回答 1查看 358关注 0票数 1

我使用python3来筛选包含文本关键字的字典,或使用整数dtypescipy.sparse.lil_matrix (链表)。

该文件是跨平台(在安装了python3、scipy和numpy的机器上)吗?

只包含文本和numpy数组的酸洗字典是否跨平台?

酸菜是跨平台的:Is pickle file of python cross-platform?

Is numpy.save cross platform?.npy文件格式是跨平台的:numpy ...

不确定如果我手动酸洗一个numpy数组会发生什么。我在两台安装了英特尔cpu的不同机器上检查了一个整数数组,它们的值保持不变。

手动酸洗numpy数组:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2017-07-30 02:52:15

如果我们不需要修复导入,则手动酸洗整数dtype的numpy数组。

这是因为如果一个对象有一个reduce方法,pickle就会使用它。

numpy.ndarray.__reduce__的文档https://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray..html

“numpy ndarray是如何被腌制的”没有引用源代码:How does Python 3 know how to pickle extension types, especially Numpy arrays?

在祖先时代,使用协议0的酸洗是不可移植的浮点数的,NaN,Inf:https://mail.python.org/pipermail/tutor/2010-May/075980.html

使用文本协议的Python3.1上关于酸洗浮标的官方文档:https://docs.python.org/3/whatsnew/3.1.html

新算法依赖于底层浮点实现中的某些功能。如果找不到所需的功能,则将继续使用旧算法。此外,text pickle协议通过使用旧算法来确保跨平台可移植性。

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)

页眉可以另存为文本。如果酸洗参数为真,那么数据就是一个pickle.dump,这是numpy.save的默认值。在format.write_array中,我发现:

数组pickle.dump(

,fp,protocol=2,**pickle_kwargs)

format.py还说:

.npy格式是NumPy中用于在磁盘上持久存储单个任意NumPy数组的标准二进制文件格式。该格式存储了正确重建数组所需的所有形状和数据类型信息,即使在具有不同体系结构的另一台机器上也是如此。

所以手动酸洗numpy数组是跨平台的(如果我们不需要修复导入的话),因为np.save也使用酸洗并且是跨平台的。

np.save使用协议2,两台机器上的两个python 3的pickle.DEFAULT_PROTOCOL为3。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45392667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档