我正在尝试数组索引一个4维numpy数组。
我有一个四维数组——假设a=numpy.array(40,40,41000) 我还有一个索引数组——比如b=np.arrange(35) 我希望创建一个数组,它可以执行类似于c=a[b,b,3999]的操作,其中生成的数组类似于d=numpy.array(35,35)。如果您能想到正确的方法,我将不胜感激。非常感谢。Neela.因为我正在尝试数组索引一个4维numpy数组。,numpy,indexing,Numpy,Indexing,我有一个四维数组——假设a=numpy.array(40,40,41000) 我还有一个索引数组——比如b=np.arrange(35) 我希望创建一个数组,它可以执行类似于c=a[b,b,3999]的操作,其中生成的数组类似于d=numpy.array(35,35)。如果您能想到正确的方法,我将不胜感激。非常感谢。Neela.因为b=np.arange(35)只是前35个索引,所以使用切片代替: c = a[:35,:35,3,999] 如果b中的值不连续,则需要调整其形状 c = a[b[
b=np.arange(35)
只是前35个索引,所以使用切片代替:
c = a[:35,:35,3,999]
如果b
中的值不连续,则需要调整其形状
c = a[b[:,None], b[None,:], 3, 999]
e、 g
b[:,无]
是一个(3,1)
数组,b[无]
a(1,3)
,它们一起向(3,3)
数组广播
您可能需要阅读广播和高级索引
更明确地说,这种索引是:
a[[[2],[0],[1]], [[2,0,1]], 3]
np.ix
是一个方便的工具,用于生成如下索引:
In [795]: I,J = np.ix_(b,b)
In [796]: I
Out[796]:
array([[2],
[0],
[1]])
In [797]: J
Out[797]: array([[2, 0, 1]])
In [798]: a[I,J,3]
Out[798]:
array([[53, 43, 48],
[13, 3, 8],
[33, 23, 28]])
我给了b作为安排,只是为了表明它是35号的。它可以使用更复杂的规则来构造——比如其他数组上的非零条件。那么在上面的例子中,None做了什么呢?我不太明白,谢谢。我真的很感激。
In [795]: I,J = np.ix_(b,b)
In [796]: I
Out[796]:
array([[2],
[0],
[1]])
In [797]: J
Out[797]: array([[2, 0, 1]])
In [798]: a[I,J,3]
Out[798]:
array([[53, 43, 48],
[13, 3, 8],
[33, 23, 28]])