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'])
我尝试使用 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'])