我有一个大的numpy文件保存到磁盘,我想确定形状而不读取整个文件。
我可以使用np.load(filename)
获取形状,但是当我尝试使用np.memmap
时,似乎要求我提前知道形状,否则它默认以平面数组的形式读取文件uint8
值。
这可能吗?
答案 0 :(得分:2)
Yes,您将在文件的第一行以纯文本形式找到该形状:
>>> 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), }
以下是解析此标题的代码:
>>> 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)
答案 1 :(得分:2)
np.memmap通常用于二进制文件,但是np.load能够以memmap模式加载.npy文件。不需要任何形状或类型!尝试:
mmapped_array = np.load(filename, mmap_mode='r')