我是否可以在不阅读整个内容的情况下获得numpy保存文件的形状(例如memmap)

时间:2018-02-02 21:59:11

标签: python numpy

我有一个大的numpy文件保存到磁盘,我想确定形状而不读取整个文件。

我可以使用np.load(filename)获取形状,但是当我尝试使用np.memmap时,似乎要求我提前知道形状,否则它默认以平面数组的形式读取文件uint8值。

这可能吗?

2 个答案:

答案 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')