我的目标是使用两个相同形状的二维数组,一个带有值,另一个带有索引来分配对应的值,以便将现有的二维数组赋值或创建一个新数组。
X = np.array([range(5),range(5)])
X
array([[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]])
Y= np.array([range(5), [2,3,4,1,0]])
Y
array([[0, 1, 2, 3, 4],
[2, 3, 4, 1, 0]])
我希望的结果是一个和X和Y形状相同的数组,其中X的值在相应行中给出的索引中。可以通过以下方式循环遍历每一行来获得此结果:
output = np.zeros(X.shape)
for i in range(X.shape[0]):
output[i][Y[i]] = X[i]
output
array([[ 0., 1., 2., 3., 4.],
[ 4., 3., 0., 1., 2.]])
有没有更有效的方法来应用这种类型的分配?
np.take(output, Y)
我希望将输出数组中的项目分配给X的值,但我认为np.take不会产生对原始数组的引用,而是产生一个新数组。