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
。
我知道已经有一个类似的问题,还没有回答。
我在 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
。