根据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
同时,我们还有np.save
和np.load
,它们分别以tofile
和fromfile
的形式保存工作
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
不能执行的任何操作吗?反之亦然?
答案 0 :(得分:3)
不。 numpy.load
读取NPY format中的文件。这是一种包含元数据的特定格式,该元数据定义了numpy数组的形状和数据类型。
numpy.fromfile
从文件中读取原始字节。没有元数据存储在文件中。您使用A
的示例确实起作用了,因为fromfile
假定的默认数据类型是float64
。这是一个不起作用的示例:
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])
答案 1 :(得分:1)
fromfile
是低级函数,是load
中的numpy调用:
np.load
(aka np.lib.npio.load
)在第452行调用format.read_array
。查看加载源,您会发现它试图猜测加载一堆不同二进制文件类型的正确方法。np.lib.format.read_array
在第738行调用fromfile
。这是从the npy
file format加载的,它是一个小的标头加上原始二进制数据fromfile
是PyArray_FromFile
周围的python包装器,这是一个奇怪的函数,它要么加载原始二进制数据(有用的版本),要么以另一种不同的方式加载文本数据。