【发布时间】:2018-06-28 02:48:08
【问题描述】:
让 A、C 和 B 是具有相同行数的 numpy 数组。 我想更新 A[0] 的第 0 个元素、A[1] 的第 2 个元素等。也就是说,将 A[i] 的第 B[i] 个元素更新为 C[i]
import numpy as np
A = np.array([[1,2,3],[3,4,5],[5,6,7],[0,8,9],[3,7,5]])
B = np.array([0,2,1,2,0])
C = np.array([8,9,6,5,4])
for i in range(5):
A[i, B[i]] = C[i]
print ("FOR", A)
A = np.array([[1,2,3],[3,4,5],[5,6,7],[0,8,9],[3,7,5]])
A[:,B[:]] = C[:]
print ("Vectorized, A", A)
输出:
FOR [[8 2 3]
[3 4 9]
[5 6 7]
[0 8 5]
[4 7 5]]
Vectorized, A [[4 6 5]
[4 6 5]
[4 6 5]
[4 6 5]
[4 6 5]]
for 循环和向量化给出了不同的结果。 我不确定如何使用 Numpy 对这个 for 循环进行矢量化。
【问题讨论】:
-
A[np.arange(A.shape[0]), B] = C -
@WarrenWeckesser 这也会改变最后一行。
-
文本中的描述听起来像最后一行应该更新。我认为
range(4)是一个印刷错误。 -
@WarrenWeckesser 是的,这就是我一开始的假设并犹豫是否发布答案,但正如我在回答中解释的那样,这样做是完全可能的。
-
Surabhi,
C的最后一行不应该是[4, 7, 5]吗?
标签: python numpy vectorization