【发布时间】:2015-06-16 06:06:40
【问题描述】:
我的目标是分配现有二维数组的值,或者创建一个新数组,使用两个相同形状的二维数组,一个带有值,一个带有索引以分配相应的值。
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 的值在 Y 中相应行的索引中给出。这个结果可以通过以下方式遍历每一行来实现:
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 不会产生对原始数组的引用,而是一个新数组。
【问题讨论】:
-
这可以通过 scipy 中的稀疏矩阵定义来完成。看看 docs.scipy.org/doc/scipy-0.15.1/reference/generated/… 中的 coo_matrix 定义。
标签: python arrays sorting numpy indexing