我正在尝试数组索引一个4维numpy数组。

我正在尝试数组索引一个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[

我有一个四维数组——假设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[:,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]])