【发布时间】:2011-05-19 03:06:22
【问题描述】:
是否可以在不先在内存中分配对应数组的情况下创建.npy文件?
我需要创建和使用一个大的 numpy 数组,该数组太大而无法在内存中创建。 Numpy 支持内存映射,但据我所知,我的选择是:
-
使用 numpy.memmap 创建一个 memmap 文件。这会直接在磁盘上创建文件而不分配内存,但不存储元数据,所以当我稍后重新映射文件时,我需要知道它的 dtype、形状等。在下面,请注意不指定形状结果在被解释为平面数组的 memmap 中:
In [77]: x=memmap('/tmp/x', int, 'w+', shape=(3,3)) In [78]: x Out[78]: memmap([[0, 0, 0], [0, 0, 0], [0, 0, 0]]) In [79]: y=memmap('/tmp/x', int, 'r') In [80]: y Out[80]: memmap([0, 0, 0, 0, 0, 0, 0, 0, 0]) 在内存中创建一个数组,使用 numpy.save 保存它,之后可以在 memmapped 模式下加载它。这会将元数据与数组数据一起记录在磁盘上,但需要为整个数组至少分配一次内存。
【问题讨论】:
-
为什么不把元数据也写入文件呢?