【发布时间】:2016-05-13 01:39:38
【问题描述】:
我有一个包含 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 的数据集之一的屏幕截图:
【问题讨论】:
-
你试过
var1 = set1[:,0]吗?如果set1是dataset,您可以使用与numpy 数组几乎相同的方式对其进行索引。 docs.h5py.org/en/latest/high/dataset.html -
是的,我收到错误“TypeError: Argument sequence too long”。此外,如果我尝试
set1 = f["foo/bar"][...],然后尝试var1 = set1[:,0],我会收到“IndexError:数组索引过多” -
什么是
set1.shape?第一个set1是group而不是dataset?我不知道您文件中的数据结构。你必须自己去探索。 -
set1.shape返回 (200,) -
那么
set1是 1d,所有行没有列。但它可能有一个复杂的dtype,h5py相当于一个 numpy 结构化数组。我将不得不检查文档。set1.dtype?