h5py:如何抽象索引
h5py: How to abstract indices
我有一个 HDF5 文件,其中包含我目前索引的子组:
file = h5py.File(filename, 'r')
data = np.array(file[index1][index2][index3])
我宁愿将这些索引抽象化并传递一个列表 (indices = [index1, index2, index3]
),但我想不出比以下更有效的实现方法:
indices = [index1, index2, index3]
file = h5py.File(filename, 'r')
data = file
for i in indices:
data = data[i]
data = np.array(data)
这行得通,但我希望有一个解决这个问题的方法。
我不完全明白你想做什么。
index1, index2, and index3
所有数据集都在根级别(又名
文件组,所以你有 /index1
、/index2
和 /index3
).
- 或者
index1
是一个组,index2
是一个子组,index3
是一个
数据集? (所以路径是/index1/index2/index3
?)
如果它们都是数据集,这将循环遍历索引和每次 return 一个数组。
indices = [index1, index2, index3]
file = h5py.File(filename, 'r')
for i in indices:
arr = file[i][:] # returns a np.array, one per loop
如果索引定义了数据集的路径,则此 returns 1 数组。
indices = [index1, index2, index3]
file = h5py.File(filename, 'r')
path = '/'+'/'.join(indices)
arr = file[path][:] # returns 1 np.array
h5py
没有很好地解释如何索引组和数据集吗?
file
和组是仿照 Python dict
,您 select 的下一个级别带有关键字。 file['group1']['group2']['dataset1']
。数据集可以像数组一样进行索引,也可以使用 [:]
.
作为一个整体加载
名称可以串在一起,例如
file['group1/group2/dataset1'][:]
虽然我没有对此进行测试,但我认为没有任何“效率”差异。与 dicts
一样,在加载数据集之前不会加载任何(很多)内容。
顺便说一句,“一个班轮”在任何方面都不是“有效的”(除非你在计算行数:))。
我有一个 HDF5 文件,其中包含我目前索引的子组:
file = h5py.File(filename, 'r')
data = np.array(file[index1][index2][index3])
我宁愿将这些索引抽象化并传递一个列表 (indices = [index1, index2, index3]
),但我想不出比以下更有效的实现方法:
indices = [index1, index2, index3]
file = h5py.File(filename, 'r')
data = file
for i in indices:
data = data[i]
data = np.array(data)
这行得通,但我希望有一个解决这个问题的方法。
我不完全明白你想做什么。
index1, index2, and index3
所有数据集都在根级别(又名 文件组,所以你有/index1
、/index2
和/index3
).- 或者
index1
是一个组,index2
是一个子组,index3
是一个 数据集? (所以路径是/index1/index2/index3
?)
如果它们都是数据集,这将循环遍历索引和每次 return 一个数组。
indices = [index1, index2, index3]
file = h5py.File(filename, 'r')
for i in indices:
arr = file[i][:] # returns a np.array, one per loop
如果索引定义了数据集的路径,则此 returns 1 数组。
indices = [index1, index2, index3]
file = h5py.File(filename, 'r')
path = '/'+'/'.join(indices)
arr = file[path][:] # returns 1 np.array
h5py
没有很好地解释如何索引组和数据集吗?
file
和组是仿照 Python dict
,您 select 的下一个级别带有关键字。 file['group1']['group2']['dataset1']
。数据集可以像数组一样进行索引,也可以使用 [:]
.
名称可以串在一起,例如
file['group1/group2/dataset1'][:]
虽然我没有对此进行测试,但我认为没有任何“效率”差异。与 dicts
一样,在加载数据集之前不会加载任何(很多)内容。
顺便说一句,“一个班轮”在任何方面都不是“有效的”(除非你在计算行数:))。