我正在尝试对4维numpy数组进行数组索引。

时间:2016-03-03 17:04:22

标签: numpy indexing

我有一个4维数组 - 比如a = numpy.array(40,40,4,1000) 我也有一个索引数组 - 比如b = np.arrange(35) 我正在寻找一个像c = a [b,b,3,999]这样的数组,其结果数组看起来像d = numpy.array(35,35)。对于正确的方法是什么的任何想法将不胜感激。谢谢。尼拉。

1 个答案:

答案 0 :(得分:0)

由于b=np.arange(35)只是前35个索引,所以请改用切片:

c = a[:35,:35,3,999]

如果b中的值不连续,则需要调整其形状

c = a[b[:,None], b[None,:], 3, 999]

e.g。

In [754]: a=np.arange(3*4*5).reshape(3,4,5)
In [755]: b=np.array([2,0,1])
In [756]: a[b[:,None],b[None,:],3]
Out[756]: 
array([[53, 43, 48],
       [13,  3,  8],
       [33, 23, 28]])

b[:,None]是一个(3,1)数组,b[None,:]一个(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]])