部分阅读大型numpy文件的有效方法?

时间:2017-03-10 20:44:43

标签: python numpy

我有一个巨大的numpy 3D张量存储在我的磁盘上的文件中(我通常使用np.load读取)。这是一个二进制.npy文件。在使用np.load时,我很快就会占用大部分内存。

幸运的是,在程序的每次运行中,我只需要一个巨大张量的某一片。切片具有固定的尺寸,其尺寸由外部模块提供。

最好的方法是什么?我能想出的唯一方法是将这个numpy矩阵存储到MySQL数据库中。但我确信更好/更容易。如果有帮助,我也会很乐意以不同的方式构建我的3D张量文件。

如果我的张量本质上很稀疏,答案是否会改变?

1 个答案:

答案 0 :(得分:18)

正常使用numpy.load,但请务必指定mmap_mode关键字,以便将数组保存在磁盘上,并且在访问时只将必要的位加载到内存中。

  

mmap_mode: {无,'r +','r','w +','c'},可选如果不是无,则   内存映射文件,使用给定的模式(参见numpy.memmap for a   模式的详细描述)。内存映射数组保持打开状态   磁盘。但是,它可以像任何ndarray一样访问和切片。记忆   映射对于访问大型的小片段特别有用   文件没有将整个文件读入内存。

模式在numpy.memmap中被描述:

  

模式: {'r +','r','w +','c'},可选文件在此打开   mode:'r'打开现有文件以供阅读。 'r +'打开现有文件   用于阅读和写作。 'w +'创建或覆盖现有文件   读写。 'c'Copy-on-write:赋值影响数据   内存,但更改不会保存到磁盘。磁盘上的文件是   只读的。

*请务必不要使用' w +'模式,因为它会删除文件的内容。