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

发布于 2021-01-29 18:28:49

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

幸运的是,在程序的每次运行中,我只需要庞大张量的一部分即可。切片的尺寸固定,其尺寸由外部模块提供。

最好的方法是什么?我能弄清楚的唯一方法就是以某种方式将此numpy矩阵存储到MySQL数据库中。但我敢肯定有 很多
更好/更简单的方法。如果有帮助,我也很乐意以其他方式构建我的3D张量文件。


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

关注者
0
被浏览
465
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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

    mmap_mode: {None,’r +’,’r’,’w
    +’,’c’},可选如果不是None,则使用给定模式对文件进行内存映射(有关这些模式的详细说明,请参见numpy.memmap
    )。内存映射的阵列保留在磁盘上。但是,可以像访问任何ndarray一样对其进行访问和切片。内存映射对于访问大文件的小片段而不将整个文件读入内存特别有用。

    模式描述于numpy.memmap

    模式: {‘r +’,’r’,’w +’,’c’},可选以这种模式打开文件:’r’打开现有文件,仅供读取。’r +’打开现有文件进行读写。’w
    +’创建或覆盖现有文件以进行读取和写入。’c’写时复制:分配会影响内存中的数据,但更改不会保存到磁盘。磁盘上的文件是只读的。

    *请确保不要使用“ w +”模式,因为它会删除文件的内容。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看