Numpy fromfile 的两个实现?
Two implementations of Numpy fromfile?
我正在尝试更新一些在方法中使用 np.fromfile
的遗留代码。当我尝试搜索此方法的 numpy 源代码时,我只找到 np.core.records.fromfile, but when you search the docs you can find np.fromfile。看看这两种方法,你会发现它们有不同的 kwargs,这让我觉得它们是完全不同的方法。
我的问题是:
1) np.fromfile
的来源在哪里?
2) 为什么同一个名字下有两个不同的函数?如果您不注意两者的区别,这显然会让人感到困惑,因为两者的行为不同。具体来说,如果您尝试读取的字节数超过文件包含的字节数,np.core.records.fromfile
将引发错误,而 np.fromfile
则不会。您可以在下面找到一个最小的示例。
In [1]: import numpy as np
In [2]: my_bytes = b'\x04\x00\x00\x00\xac\x92\x01\x00\xb2\x91\x01'
In [3]: with open('test_file.itf', 'wb') as f:
f.write(my_bytes)
In [4]: with open('test_file.itf', 'rb') as f:
result = np.fromfile(f, 'int32', 5)
In [5]: result
Out [5]:
In [6]: with open('test_file.itf', 'rb') as f:
result = np.core.records.fromfile(f, 'int32', 5)
ValueError: Not enough bytes left in file for specified shape and type
如果您在 np.fromfile
上使用 help
,您会发现一些非常...有用的东西:
Help on built-in function fromfile in module numpy.core.multiarray:
fromfile(...)
fromfile(file, dtype=float, count=-1, sep='')
Construct an array from data in a text or binary file.
A highly efficient way of reading binary data with a known data-type,
as well as parsing simply formatted text files. Data written using the
`tofile` method can be read using this function.
据我所知,这是用 C 实现的,可以找到 here。
如果您正在尝试保存和加载二进制数据,则不应再使用 np.fromfile
。您应该使用 np.save
和 np.load
,它们将使用平台无关的二进制格式。
我正在尝试更新一些在方法中使用 np.fromfile
的遗留代码。当我尝试搜索此方法的 numpy 源代码时,我只找到 np.core.records.fromfile, but when you search the docs you can find np.fromfile。看看这两种方法,你会发现它们有不同的 kwargs,这让我觉得它们是完全不同的方法。
我的问题是:
1) np.fromfile
的来源在哪里?
2) 为什么同一个名字下有两个不同的函数?如果您不注意两者的区别,这显然会让人感到困惑,因为两者的行为不同。具体来说,如果您尝试读取的字节数超过文件包含的字节数,np.core.records.fromfile
将引发错误,而 np.fromfile
则不会。您可以在下面找到一个最小的示例。
In [1]: import numpy as np
In [2]: my_bytes = b'\x04\x00\x00\x00\xac\x92\x01\x00\xb2\x91\x01'
In [3]: with open('test_file.itf', 'wb') as f:
f.write(my_bytes)
In [4]: with open('test_file.itf', 'rb') as f:
result = np.fromfile(f, 'int32', 5)
In [5]: result
Out [5]:
In [6]: with open('test_file.itf', 'rb') as f:
result = np.core.records.fromfile(f, 'int32', 5)
ValueError: Not enough bytes left in file for specified shape and type
如果您在 np.fromfile
上使用 help
,您会发现一些非常...有用的东西:
Help on built-in function fromfile in module numpy.core.multiarray:
fromfile(...)
fromfile(file, dtype=float, count=-1, sep='')
Construct an array from data in a text or binary file.
A highly efficient way of reading binary data with a known data-type,
as well as parsing simply formatted text files. Data written using the
`tofile` method can be read using this function.
据我所知,这是用 C 实现的,可以找到 here。
如果您正在尝试保存和加载二进制数据,则不应再使用 np.fromfile
。您应该使用 np.save
和 np.load
,它们将使用平台无关的二进制格式。