如何以非懒惰的方式加载npz文件?

时间:2015-12-07 06:20:10

标签: python-2.7 numpy

加载npz文件时,NumPy的load()函数returns a lazy file loader,而不是实际数据。如何加载npz文件以便将数据加载到内存中?

2 个答案:

答案 0 :(得分:3)

如果要强制读取和解压缩数组的内容,只需将其内容分配给变量,例如:

data = np.load('/path/to/data.npz', 'r')
a = data['a']
b = data['b']
# etc

如果你想保持与延迟加载器完全相同的语法,可以简单地将所有数组加载到dict中,例如:

data_dict = dict(data)

所以现在你可以使用

data_dict['a']

在脚本的后续部分引用a。但是,我个人不会保留dict,因为它保存了对所有数组的引用,这样可以防止任何单独的未使用的数据在以后的脚本中被垃圾收集。

答案 1 :(得分:2)

我认为您在上一篇关于速度的问题中回答了您的问题:

data = np.load(dataset_text_filepath)['texts']

文件内容现在在内存中。

.npz文件是一个zip存档,包含多个数组。使load进行两步操作的原因是您可能总是希望一次加载所有数组。它可让您加载x而无需加载y

您可以使用系统zip存档工具提取一个或多个文件,然后直接加载。为了更好地理解文件结构,这可能是一个有用的步骤。

要更直接,您需要学习np.lib.npyio.NpzFile,也许是gzip模块。