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.NpzFilenpz 文件是 .npy 文件的 ZIP 存档。它加载一个字典(类似)对象,并且只在您访问它们时加载单个变量(数组)(例如 obj[key]). There's no provision in its code for opening those individual files inmmap_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.

的任何规定