numpy如何处理mmap的npz文件?

Ref*_*fer 7 gzip mmap numpy

我有一个案例,我想使用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 inmmap_mode`).

很明显,创建的文件np.savez无法作为mmap访问.ZIP存档和压缩与前面提到的gzip压缩不同np.load.

但是单个阵列保存了什么np.save然后gzipped呢?请注意,format.open_memmap调用with file,而不是fid(可能是gzip文件).

关于更多细节open_memmapnp.lib.npyio.format.它的第一个测试是file必须是一个字符串,而不是现有的文件fid.它最终将工作委托给np.memmap.我没有看到该功能的任何规定gzip.