numpy 如何处理 mmap 上的 npz 文件?
How does numpy handle mmap's over npz files?
我有一个案例,我想使用 mmap 模式打开一个压缩的 numpy 文件,但似乎找不到任何关于它在幕后如何工作的文档。例如,它会在内存中解压存档然后 mmap 吗?它会即时解压吗?
缺少该配置的文档。
根据查看代码,简短的回答是归档和压缩,无论是使用 np.savez
还是 gzip
,都与访问 mmap_mode
中的文件不兼容。不仅仅是怎么做的问题,而是能不能做到的问题。
np.load
函数中的相关位
elif isinstance(file, gzip.GzipFile):
fid = seek_gzip_factory(file)
...
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)
...
if mmap_mode:
return format.open_memmap(file, mode=mmap_mode)
看看np.lib.npyio.NpzFile
。 npz
文件是 .npy
文件的 ZIP 存档。它加载一个字典(类似)对象,并且只在您访问它们时加载单个变量(数组)(例如 obj[key]). There's no provision in its code for opening those individual files in
mmap_mode`.
很明显,使用 np.savez
创建的文件不能作为 mmap 访问。 ZIP 归档和压缩与前面 np.load
.
中提到的 gzip 压缩不同
但是用 np.save
然后 gzipped
保存的单个数组呢?请注意 format.open_memmap
是用 file
调用的,而不是 fid
(可能是 gzip 文件)。
np.lib.npyio.format
中有关 open_memmap
的更多详细信息。它的第一个测试是 file
必须是一个字符串,而不是一个现有的文件 fid。它最终将工作委托给 np.memmap
。我在该函数中没有看到 gzip
.
的任何规定
我有一个案例,我想使用 mmap 模式打开一个压缩的 numpy 文件,但似乎找不到任何关于它在幕后如何工作的文档。例如,它会在内存中解压存档然后 mmap 吗?它会即时解压吗?
缺少该配置的文档。
根据查看代码,简短的回答是归档和压缩,无论是使用 np.savez
还是 gzip
,都与访问 mmap_mode
中的文件不兼容。不仅仅是怎么做的问题,而是能不能做到的问题。
np.load
函数中的相关位
elif isinstance(file, gzip.GzipFile):
fid = seek_gzip_factory(file)
...
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)
...
if mmap_mode:
return format.open_memmap(file, mode=mmap_mode)
看看np.lib.npyio.NpzFile
。 npz
文件是 .npy
文件的 ZIP 存档。它加载一个字典(类似)对象,并且只在您访问它们时加载单个变量(数组)(例如 obj[key]). There's no provision in its code for opening those individual files in
mmap_mode`.
很明显,使用 np.savez
创建的文件不能作为 mmap 访问。 ZIP 归档和压缩与前面 np.load
.
但是用 np.save
然后 gzipped
保存的单个数组呢?请注意 format.open_memmap
是用 file
调用的,而不是 fid
(可能是 gzip 文件)。
np.lib.npyio.format
中有关 open_memmap
的更多详细信息。它的第一个测试是 file
必须是一个字符串,而不是一个现有的文件 fid。它最终将工作委托给 np.memmap
。我在该函数中没有看到 gzip
.