我有一个案例,我想使用mmap模式打开一个压缩的numpy文件,但似乎无法找到任何有关它如何在幕后工作的文档.例如,它会解压缩内存中的存档然后mmap吗?它会在飞行中解压缩吗?
该配置缺少该文档.
hpa*_*ulj 11
基于查看代码的简短回答是归档和压缩,无论是使用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)
Run Code Online (Sandbox Code Playgroud)
看看np.lib.npyio.NpzFile
.一个npz
文件的ZIP档案.npy
文件.它加载一个字典(如)对象,只在你访问它们时加载各个变量(数组)(例如obj[key]). There's no provision in its code for opening those individual files in
mmap_mode`).
很明显,创建的文件np.savez
无法作为mmap访问.ZIP存档和压缩与前面提到的gzip压缩不同np.load
.
但是单个阵列保存了什么np.save
然后gzipped
呢?请注意,format.open_memmap
调用with file
,而不是fid
(可能是gzip文件).
关于更多细节open_memmap
在np.lib.npyio.format
.它的第一个测试是file
必须是一个字符串,而不是现有的文件fid.它最终将工作委托给np.memmap
.我没有看到该功能的任何规定gzip
.