首页 > 解决方案 > 如果我们已经有 numpy.load,为什么还需要 numpy.fromfile?

问题描述

numpy.fromfile

根据SciPy文档

从文本或二进制文件中的数据构造一个数组。[...] 使用该方法写入的数据tofile可以使用此功能读取。

所以我只是按照说明使用并创建一个文件tofile

import numpy as np
A = np.random.rand(1000)
A.tofile('binary_file') # saving a dummy binary_file

x1 = np.fromfile('binary_file') # loading the dummy file

print(np.array_equal(A, x1)) # checking if the arrays are the same
>>> True

numpy.load

同时,我们也有np.saveandnp.loadtofilefromfile

np.save('file.npy',A)
x2 = np.load('file.npy')
print(np.array_equal(A, x1))
>>> True

fromfile== np.load

两种加载方法产生相同的结果,如下所示

print(np.array_equal(x1, x2))
>>> True

那为什么需要这两个功能呢?有什么可以做np.load但不能做的fromfile吗?或相反亦然?

标签: python-3.xnumpy

解决方案


fromfile == np.load?

No. numpy.load读取NPY 格式的文件。这是包含定义 numpy 数组的形状和数据类型的元数据的特定格式。

numpy.fromfile从文件中读取原始字节。文件中没有存储元数据。您的示例A碰巧有效,因为默认数据类型fromfilefloat64. 这是一个不起作用的示例:

In [25]: A = np.array([10, 20, 30, 40])                                                                                                              

In [26]: A.tofile('binary_file')                                                                                                                     

In [27]: B = np.fromfile('binary_file')                                                                                                              

In [28]: B                                                                                                                                           
Out[28]: array([4.9e-323, 9.9e-323, 1.5e-322, 2.0e-322])

推荐阅读