Python h5py:如何抽象索引

Python h5py:如何抽象索引,python,numpy,indexing,h5py,Python,Numpy,Indexing,H5py,我有一个HDF5文件,其中包含我当前索引的子组,如: file = h5py.File(filename, 'r') data = np.array(file[index1][index2][index3]) 我宁愿抽象这些索引并传递一个列表(index=[index1,index2,index3]),但我想不出比以下更有效的实现方法: indices = [index1, index2, index3] file = h5py.File(filename, 'r') data = file

我有一个HDF5文件,其中包含我当前索引的子组,如:

file = h5py.File(filename, 'r')
data = np.array(file[index1][index2][index3])
我宁愿抽象这些索引并传递一个列表(
index=[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和index3是根级别的所有数据集(aka
    文件组,因此您有
    /index1
    /index2
    /index3
  • 或者
    index1
    是一个组,
    index2
    是一个子组,
    index3
    是一个组 数据集?(因此路径是
    /index1/index2/index3
    ?)
如果它们都是数据集,那么每次都会循环遍历索引并返回一个数组

indices = [index1, index2, index3]
file = h5py.File(filename, 'r')
for i in indices:
    arr = file[i][:] # returns a np.array, one per loop
如果索引定义数据集的路径,则返回1个数组

indices = [index1, index2, index3]
file = h5py.File(filename, 'r')
path = '/'+'/'.join(indices)
arr = file[path][:] # returns 1 np.array

我不完全明白你想做什么

  • index1、index2和index3是根级别的所有数据集(aka
    文件组,因此您有
    /index1
    /index2
    /index3
  • 或者
    index1
    是一个组,
    index2
    是一个子组,
    index3
    是一个组 数据集?(因此路径是
    /index1/index2/index3
    ?)
如果它们都是数据集,那么每次都会循环遍历索引并返回一个数组

indices = [index1, index2, index3]
file = h5py.File(filename, 'r')
for i in indices:
    arr = file[i][:] # returns a np.array, one per loop
如果索引定义数据集的路径,则返回1个数组

indices = [index1, index2, index3]
file = h5py.File(filename, 'r')
path = '/'+'/'.join(indices)
arr = file[path][:] # returns 1 np.array

难道
h5py
没有充分解释如何索引组和数据集吗

文件
和组由Python
dict
建模,您可以在其中使用关键字选择下一个级别<代码>文件['group1']['group2']['dataset1']
。数据集可以像数组一样编制索引,也可以使用
[:]
作为一个整体加载

名字可以串在一起,例如

file['group1/group2/dataset1'][:]
虽然我还没有测试过这个,但我不认为有任何“效率”差异。与
dicts
一样,在加载数据集之前,不会加载任何内容(很多)


顺便说一句,“一行”从任何角度来看都不是“有效的”(除非你正在计算行:)。难道
h5py
没有充分解释如何索引组和数据集吗

文件
和组由Python
dict
建模,您可以在其中使用关键字选择下一个级别<代码>文件['group1']['group2']['dataset1']
。数据集可以像数组一样编制索引,也可以使用
[:]
作为一个整体加载

名字可以串在一起,例如

file['group1/group2/dataset1'][:]
虽然我还没有测试过这个,但我不认为有任何“效率”差异。与
dicts
一样,在加载数据集之前,不会加载任何内容(很多)


顺便说一句,“一行”从任何角度来看都不是“有效的”(除非您正在计算行:)。

文件是什么类型的对象?如果它是一个numpy数组,我想它应该和做一样简单:
data=file[tuple(index)]
file
是一个HDF5文件对象:什么类型的对象是
file
?如果它是一个numpy数组,我想它应该和做一样简单:
data=file[tuple(index)]
file
是一个HDF5文件对象:在这种情况下,我在数行。也许我应该更迂腐地使用高效的语言。非常感谢。我不知道名字可以串在一起,这很有帮助。在这种情况下,我在数行。也许我应该更迂腐地使用高效的语言。非常感谢。我没有意识到名字可以串在一起,这很有帮助。是的,我的索引形成了数据集的路径,所以后者是完美的,谢谢!是的,我的索引形成了数据集的路径,因此后者非常完美,谢谢!