mmap_mode 中的 *.npz 文件的 Numpy 加载部分

Numpy load part of *.npz file in mmap_mode

我知道已经有一个类似的问题,还没有回答。

我在 npz 文件中保存了一个非常大的 numpy 数组。我不希望它完全加载(我的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首先加载整个数组(我知道是因为我的内存已经满了)然后显示这一小部分。如果我直接写

也会发生同样的情况
xxx = np.load('file_name.npz,mmap_mode="r")['arr_0'][0][0][0]

我做错了什么?

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

我有点惊讶你的 load 调用没有引发错误,但查看代码我发现它甚至没有查看 mmap_mode参数。

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