快速访问 numpy npz 数据

Fast access to numpy npz data

我已将许多数据文件保存为 .npz 以节省 space 存储空间 (savez_compressed)。每个文件都保存为一个数组,因此在使用 numpy 加载函数时,它 returns 包含该数组的字典的键。

如何快速将此数组存储为数组而不是字典。

例如:

data = []
datum = np.load('file.npz')
key = datum.keys()[0]
data.append([datum[key]])

在对此进行分析时,我的代码大部分时间都在使用字典的 get 方法。

如果保存为 .npz 文件,则不需要 get 方法并且速度更快。

data = []
data.append([np.load('file.npz')])

我认为通过加载文件,两种情况下数据都已经在内存中了。 savez_compressed 似乎没有仅保存为数组的选项。这是可能的还是有办法加快加载速度?

np.load 使用 np.lib.npyio.NpzFile class 加载 npz 文件。它的文档是:

NpzFile(fid)

A dictionary-like object with lazy-loading of files in the zipped
archive provided on construction.

`NpzFile` is used to load files in the NumPy ``.npz`` data archive
format. It assumes that files in the archive have a ".npy" extension,
other files are ignored.

The arrays and file strings are lazily loaded on either
getitem access using ``obj['key']`` or attribute lookup using
``obj.f.key``. A list of all files (without ".npy" extensions) can
be obtained with ``obj.files`` and the ZipFile object itself using
``obj.zip``.

我认为最后一段回答了您的时间问题。在您执行字典 get 之前,不会加载数据。所以它不仅仅是一个内存中的字典查找 - 它是一个文件加载(解压缩)。

Python 字典查找很快 - 解释器在访问对象属性时一直在做。而当简单地管理命名空间时。