h5py 如何在没有组的情况下获取切片(仅数据集)

问题描述 投票:0回答:1

我有一个 50GB h5 文件,其中仅包含数据集,并具有大约 7m x 256d numpy 数组 a 值。

我想生成它的一部分,因为整个文件无法加载到内存中,但我正在努力做到这一点。

所以,我有:

    f=h5py.File("./somefile.h5","r",libver='latest')
    keys_=list(f.keys()) # works - I get all the keys and check the length and it ads up.
    print(f[:5]) # fails saying it need a string for dataset name
    print(f[()][:5]) # fails same as above
    print(f['.'][:5]) #fails

这让我发疯!

重申一下,没有组,只有数据集 - 如何获取切片,例如 1m 切片?

hdf5 h5py
1个回答
0
投票

您不需要组来访问数据集。您只需在 H5 对象路径中指定数据集名称即可。数据集切片语法与 NumPy 语法相同。因此,如果您有多个轴(维度),您将需要为每个维度指定切片大小。

下面的代码将访问您的文件,循环所有根级别对象(键),打印数据集信息,并尝试读取切片。这假设切片语法适合您的数据集。我添加了逻辑来测试每个对象都是一个数据集。

另外,你也不会打电话给

f.close()
。如果您在文件打开的情况下意外退出程序,这可能会导致问题。最好使用 Python 的文件上下文管理器 (
with/as:
)。这样,文件退出
with/as:
块时就会关闭。

with h5py.File("./somefile.h5","r") as f:
    for ds in f:
        if isinstance(f[ds], h5py.Dataset):
            print(f'For dataset {ds}; Type: {f[ds].dtype}, Shape: {f[ds].shape}')
            print(f[ds][:5]) # gets a small slice assuming slice syntax is correct
© www.soinside.com 2019 - 2024. All rights reserved.