将包含 Numpy 数组的整个 HDF5 读入内存的最快方法

Posted

技术标签:

【中文标题】将包含 Numpy 数组的整个 HDF5 读入内存的最快方法【英文标题】:Fastest way to read a whole HDF5 containing Numpy arrays into memory 【发布时间】:2014-04-17 20:57:13 【问题描述】:

我用:

import h5py

f = h5py.File('myfile.h5', 'r')
d = 
for k in f.iterkeys():
    d[k] = f[k][:]

将整个 HDF5 文件读入内存(2 GB,1000 个 numpy 数组,每个 2 MB)

有没有更快的方法将 HDF5 的所有内容加载到内存中?

(也许这里的循环在文件中做了很多“移动”(寻找?),因为每个f[k] 没有按照给出for k in f.iterkeys() 的顺序放置?)

【问题讨论】:

【参考方案1】:

PyTables(另一个 Python HDF5 库)支持使用 H5FD_CORE driver 将整个文件加载到内存中。 h5py 似乎也支持内存映射文件(参见File Drivers)。所以就做吧

import h5py
f = h5py.File('myfile.h5', 'r', driver='core')

你就完成了,因为文件已经驻留在内存中。

【讨论】:

内存映射文件是否意味着它已加载到内存中? @spurra 一般来说,没有。但是根据 h5py 的文档,所有的操作都是在内存中完成的。

以上是关于将包含 Numpy 数组的整个 HDF5 读入内存的最快方法的主要内容,如果未能解决你的问题,请参考以下文章

将 HDF5 文件中的大型数据集读入 x_train 并在 keras 模型中使用

大型 numpy (HDF5) 数组的统计信息

我可以通过索引访问 Parquet 文件而不将整个文件读入内存吗?

有没有办法让一个 numpy 样式的视图查看存储在 hdf5 文件中的数组切片?

将嵌套的 .h5 组读入 numpy 数组

将单色 png 读入 numpy 数组