我有一个很大的 numpy 文件保存到磁盘,我想在不读取整个文件的情况下确定形状。
我可以使用 获取形状np.load(filename),但是当我尝试使用相同的方法时,np.memmap似乎需要我提前知道形状,否则默认为以平面uint8值数组读取文件。
这是可能的吗?
是的,您将在文件的第一行中以纯文本形式找到该形状:
>>> a = np.random.rand(4,7)
>>> np.save('/tmp/a', a)
>>>
$ head -1 /tmp/a.npy
?NUMPYv{'descr': '<f8', 'fortran_order': False, 'shape': (4, 7), }
Run Code Online (Sandbox Code Playgroud)
这是解析此标头的代码:
>>> with open('/tmp/a.npy', 'rb') as f:
... major, minor = np.lib.format.read_magic(f)
... shape, fortran, dtype = np.lib.format.read_array_header_1_0(f)
...
>>> shape
(4, 7)
Run Code Online (Sandbox Code Playgroud)
np.memmap 一般用于二进制文件,但是 np.load 能够以 memmap 模式加载 .npy 文件。无需形状或数据类型!尝试:
mmapped_array = np.load(filename, mmap_mode='r')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1021 次 |
| 最近记录: |