在numpy中每行选择多个元素

时间:2017-12-19 17:35:34

标签: python numpy

使用

ad = np.array([ 0.5,  0.8,  0.9,  0.1])
cp = np.array([[2,3,1,1,2,0],[1,0,1,3,1,2],[1,1,1,1,1,1],[0,1,2,3,2,2]])

我怎样才能让Numpy给我ad的元素,索引为cp[0,:]作为第一行(索引为[2,3,1,1,2,0]所以第一行应为[0.9, 0.1, 0.8, 0.8, 0.9, 0.5] }),索引为cp[1,:]的元素作为第二行等。?

所以结果应该是:

[[0.9, 0.1, 0.8, 0.8, 0.9, 0.5],
 [0.8, 0.5, 0.8, 0.1, 0.8, 0.9],
 [0.8, 0.8, 0.8, 0.8, 0.8, 0.8],
 [0.5, 0.8, 0.9, 0.1, 0.9, 0.9]]

当然,优选地,以有效和优雅的方式。

1 个答案:

答案 0 :(得分:1)

NumPy阵列支持广播。它会将ad广播到所需的形状。所以这个

>>> ad[cp]
array([[ 0.9,  0.1,  0.8,  0.8,  0.9,  0.5],
       [ 0.8,  0.5,  0.8,  0.1,  0.8,  0.9],
       [ 0.8,  0.8,  0.8,  0.8,  0.8,  0.8],
       [ 0.5,  0.8,  0.9,  0.1,  0.9,  0.9]])

会奏效。

或者,您可以使用np.take()

>>> np.take(ad, cp)
array([[ 0.9,  0.1,  0.8,  0.8,  0.9,  0.5],
       [ 0.8,  0.5,  0.8,  0.1,  0.8,  0.9],
       [ 0.8,  0.8,  0.8,  0.8,  0.8,  0.8],
       [ 0.5,  0.8,  0.9,  0.1,  0.9,  0.9]])