【发布时间】:2018-07-02 22:40:33
【问题描述】:
目前,我通过 h5py 在 python 中加载 HDF5 数据并将数据集读入内存。
f = h5py.File('myfile.h5', 'r')
dset = f['mydataset'][:]
这可行,但如果 'mydataset' 是 myfile.h5 中唯一的数据集,则以下方法更有效:
f = h5py.File('myfile.h5', 'r', driver='core')
dset = f['mydataset'][:]
我相信这是因为“核心”驱动程序内存映射了整个文件,这是一种将数据加载到内存中的优化方式。
我的问题是:是否可以在 selected 数据集上使用“核心”驱动程序?换句话说,在加载文件时,我只希望内存映射选定的数据集和/或组。我有一个包含许多数据集的文件,我想将每个数据集按顺序加载到内存中。我不能一次全部加载它们,因为总体上它们不适合内存。
我了解一种替代方法是将包含多个数据集的单个 HDF5 文件拆分为多个 HDF5 文件,每个文件具有一个数据集。但是,我希望可能有一个更优雅的解决方案,可能使用 h5py 低级 API。
更新:即使我的要求是不可能的,有人可以解释为什么在读取整个数据集时使用driver='core' 具有更好的性能吗?将 HDF5 文件的唯一数据集读入内存与通过core 驱动程序进行内存映射有很大不同吗?
【问题讨论】:
-
请补充一些细节:1)您从哪个设备读取(SSD,HDD,NAS)2)块大小3)压缩算法4)工作系统5)最重要的是:哪种速度你在这两种情况下都获得。这样的性能问题实际上可能取决于很多事情......