Python中读取HDF5复合dtype数组的快速方法是什么?

时间:2016-02-03 17:50:16

标签: python arrays numpy h5py

我有一个包含20个数据集的HDF5文件,每个数据集有200行复合dtype ('<r4', '<r4', '<i4'),其中dtype的每个组件代表一维变量。我发现打开每个文件大约需要2秒钟,并将列的组件分配给它自己的变量,这对我来说似乎非常慢。我正在使用h5py和numpy打开并从文件中读取到numpy数组:

import numpy as np
import h5py
...
f = h5py.File("foo.hdf5", "r")
set1 = f["foo/bar"]
var1 = np.asarray([row[0] for row in set1])
var2 = np.asarray([row[1] for row in set1])
var3 = np.asarray([row[2] for row in set1])

有没有更快的方法从这些数据集中提取变量?

以下是使用hdfview的其中一个数据集的屏幕截图: hdfview

1 个答案:

答案 0 :(得分:3)

更快的方法(~0.05秒)是将数据集转换为数组,然后按名称引用字段:

import numpy as np
import h5py
...
f = h5py.File("foo.hdf5", "r")
set1 = np.asarray(f["foo/bar"])
var1 = set1["var1"]
var2 = set1["var2"]
var3 = set1["var3"]