h5py 打开包含未知数据集的文件

h5py open file with unknown datasets

我尝试使用 h5py 打开由另一个程序创建的文件。不幸的是我不知道文件的内部结构。我所知道的是它应该包含一个 20x20 矩阵,我想用 numpy 处理它。 这是我到目前为止所做的:

import numpy
import h5py
f = h5py.File('example.hdf5')
print(f.keys())

结果如下: KeysViewWithLock(<HDF5 file "example.hdf5" (mode r+)>)

我该如何离开这里?我想作为单个 numpy.ndarray 访问矩阵。 h5py 文档总是谈论创建 hdf5 文件,而不是读取未知文件。 非常感谢。

解决方案(感谢 akash karothiya) 使用 print(list(f.keys())) 代替。这给出了 groups/datasets 的名称,然后可以作为 a=f['dataset'].

访问

好的,如前所述,akash karothiya 帮助我找到了解决方案。 使用 print(list(f.keys())) 而不是 print(f.keys())。这个returns['dataset']。 使用此信息,我可以获得一个 h5py 数据集对象,然后将其转换为一个 numpy 数组,如下所示:

a = f['dataset']
b = numpy.zeros(np.shape(a), dtype=complex)
for i in range(numpy.size(a,0)):
    b[i,:] = np.asarray(a[i]['real'] + 1j*a[i]['imag'], dtype=complex)

更新:
没有 for 循环的新版本,可能更快且用途广泛(适用于复杂和真实数据以及尺寸为 NxMxO 的立方体):

a = f['dataset']
if len(a.dtype) == 0:       
    b = np.squeeze(a[()])          
elif len(a.dtype) == 2:       
    b = np.squeeze(a[()]['real'] + 1.0j*a[()]['imag'])