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