Numpy 内存映射问题

sdgaw erzswer

我最近一直在处理大型矩阵。我的输入以 15GB.npz文件的形式存储,我试图以小批量增量读取。

我对内存映射很熟悉,并且看过numpy也支持这些类型的操作似乎是一个完美的解决方案。但是,我面临的问题如下:

我首先加载矩阵:

foo = np.load('matrix.npz',mmap_mode="r+")

foo有一个键:data

例如,当我尝试这样做时:

foo['data'][1][1]

numpy似乎无休止地消耗可用的 RAM,几乎就像没有内存映射一样。我做错了什么吗?

例如,我的目标是一次阅读 30 行:

for x in np.arange(0,matrix.shape[1],30):
    batch = matrix[x:(x+30),:]
    do_something_with(batch)

谢谢!

用户2699

我的猜测是,mmap_mode="r+"当有问题的文件是一个压缩的 numpy 文件时会被忽略。我没有以这种方式使用 numpy,所以下面的一些内容是我最好的猜测。负载状态的文档

如果文件是 .npz 文件,则返回一个类似字典的对象,其中包含 {filename: array} 键值对,存档中的每个文件一个。

没有提到它对mmap_mode. 但是在加载文件代码.npz没有使用mmap_mode关键字:

    if magic.startswith(_ZIP_PREFIX):
        # zip-file (assume .npz)
        # Transfer file ownership to NpzFile
        tmp = own_fid
        own_fid = False
        return NpzFile(fid, own_fid=tmp, allow_pickle=allow_pickle, pickle_kwargs=pickle_kwargs)

所以,你最初的猜测确实是正确的。Numpy 使用所有内存,因为没有发生内存映射。这是实现的限制load由于npz格式是未压缩的 zip 存档,因此应该可以对变量进行内存映射(当然,除非您的文件是使用savez_compressed.

实现 memmaps 的加载函数npz将是相当多的工作,因此您可能需要查看结构化数组它们提供类似的用法(通过键访问字段)并且已经与 memmapping 兼容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Numpy:从很大的内存中删除映射Numpy数组的列

来自分类Dev

写入NumPy内存映射仍会加载到RAM内存中

来自分类Dev

使用NumPy数组映射系列-维数问题?

来自分类Dev

将numpy内存映射保存到新文件并从该文件加载新内存映射会导致值更改

来自分类Dev

CA65段内存映射问题

来自分类Dev

如何在 PyFilesystem 中使用内存映射文件 (numpy.memmap)?

来自分类Dev

Python Numpy内存错误

来自分类Dev

numpy 的内存错误。大批

来自分类Dev

将numpy数组转换为QImage时的内存顺序行为问题

来自分类Dev

256 GB的RAM,64位python和64位numpy的内存不足错误。ulimit问题?

来自分类Dev

Numpy.dot挂我的程序,我认为那是内存问题

来自分类Dev

256GB RAM,64位python和64位numpy的Numy内存错误。ulimit问题?

来自分类Dev

numpy除法问题

来自分类Dev

numpy meshgrid操作问题

来自分类Dev

numpy数组维度问题

来自分类Dev

numpy ndarray分配问题

来自分类Dev

numpy除法问题

来自分类Dev

numpy布尔索引问题

来自分类Dev

Python - 管道的 Numpy 问题

来自分类Dev

numpy中的广播问题

来自分类Dev

numpy:每个操作的内存分配?

来自分类Dev

调试Python / NumPy内存泄漏

来自分类Dev

numpy元素的内存地址

来自分类Dev

numpy随机内存错误

来自分类Dev

numpy中的数组之间的映射

来自分类Dev

使用dict映射numpy数组?

来自分类Dev

如何映射 numpy 数据集?

来自分类Dev

numpy数组列出转换问题

来自分类Dev

numpy数组:基本问题