使用
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]]
当然,优选地,以有效和优雅的方式。
答案 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]])