我有一个 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 切片?
您不需要组来访问数据集。您只需在 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