我有两个数组。
“ a”,一个二维numpy数组。
import numpy.random as npr
a = array([[5,6,7,8,9],[10,11,12,14,15]])
array([[ 5, 6, 7, 8, 9],
[10, 11, 12, 14, 15]])
“ idx”,一个3d numpy数组,它构成三个索引变体,我想用它们来索引“ a”。
idx = npr.randint(5, size=(nsamp,shape(a)[0], shape(a)[1]))
array([[[1, 2, 1, 3, 4],
[2, 0, 2, 0, 1]],
[[0, 0, 3, 2, 0],
[1, 3, 2, 0, 3]],
[[2, 1, 0, 1, 4],
[1, 1, 0, 1, 0]]])
现在,我想使用“ idx”中的索引对“ a”进行索引三遍,以获取一个对象,如下所示:
array([[[6, 7, 6, 8, 9],
[12, 10, 12, 10, 11]],
[[5, 5, 8, 7, 5],
[11, 14, 12, 10, 14]],
[[7, 6, 5, 6, 9],
[11, 11, 10, 11, 10]]])
天真的“ a [idx]”不起作用。关于如何执行此操作的任何想法?(我使用Python 3.4和numpy 1.9)
您可以用来choose
从中进行选择a
:
>>> np.choose(idx, a.T[:,:,np.newaxis])
array([[[ 6, 7, 6, 8, 9],
[12, 10, 12, 10, 11]],
[[ 5, 5, 8, 7, 5],
[11, 14, 12, 10, 14]],
[[ 7, 6, 5, 6, 9],
[11, 11, 10, 11, 10]]])
如您所见,a
必须先从具有形状(2, 5)
的数组重塑为具有形状的数组(5, 2, 1)
。从本质上讲,这是可以广播的idx
,具有形状(3, 2, 5)
。
(我从这里的@immerrr的答案中学到了这种方法:https ://stackoverflow.com/a/26225395/3923281 )
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句