1

我知道已经存在类似的问题,但尚未得到回答。

我有一个非常大的 numpy 数组保存在 npz 文件中。我不希望它被完全加载(我的 RAM 无法完全处理它),而只想加载它的一部分。

文件是这样生成的:

np.savez_compressed('file_name.npz', xxx)

这就是我想加载它的方式:

xxx = np.load('file_name.npz,mmap_mode="r")

现在,要实际访问我感兴趣的数组部分,我应该输入

a = xxx['arr_0'][0][0][0]

但是虽然这块很小,python 首先加载整个数组(我知道是因为我的 RAM 被填满了),然后显示这个小部分。如果我直接写也会发生同样的情况

xxx = np.load('file_name.npz,mmap_mode="r")['arr_0'][0][0][0]

我究竟做错了什么?

4

1 回答 1

2

mmap_mode不适用于npz文件。Annpz是一个zip存档。也就是说,它包含npy文件,每个key. npz您可以通过使用 OS 归档管理器工具查看文件来看到这一点。

我有点惊讶您的load调用没有引发错误,但是查看代码我发现它NpzFile甚至没有查看mmap_mode参数就调度到加载程序。

要使用mmap,您必须提取arr_0.npy(再次使用 OS 工具)并load在其上使用。

于 2020-05-24T16:05:12.650 回答