gpt4 book ai didi

python - 使用另一个 numpy 数组元素作为索引向量化更新 numpy 数组

转载 作者:行者123 更新时间:2023-12-01 09:17:52 24 4
gpt4 key购买 nike

设 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 循环。

最佳答案

您的方法不起作用的原因是您将整个 B 作为列索引传递并将其替换为 C 而不是您需要指定两者行索引和列索引。由于您只想更改前 4 行,因此只需使用 np.arange(4) 来选择行 B[:4] 列和 C [:4]替换元素。

In [26]: A[np.arange(4),B[:4]] = C[:4]

In [27]: A
Out[27]:
array([[8, 2, 3],
[3, 4, 9],
[5, 6, 7],
[0, 8, 5],
[3, 7, 5]])

请注意,如果您想更新整个数组,正如 @Warren 的评论中提到的,您可以使用以下方法:

A[np.arange(A.shape[0]), B] = C

关于python - 使用另一个 numpy 数组元素作为索引向量化更新 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51068981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com