简单但困难的numpy内存引用问题

ny6fqffe  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(92)
import numpy as np

a = np.array([0,0,0,0,0,0,0,0])
b = np.array([4,2,3])
c = np.array([5,5,2])

for i, e in enumerate(c):
    a[e] += b[i]
print(a)
# [0 0 3 0 0 6 0 0]

a = np.array([0,0,0,0,0,0,0,0])
b = np.array([4,2,3])
c = np.array([5,5,2])

a[c] += b[np.arange(len(b))]
print(a)
# [0 0 3 0 0 2 0 0]

c的实际长度长得令人难以置信,问题就出在这里。
Python for循环太慢了。
所以我想用numpy来代替它,但是没有python for循环,但是我找不到方法。
我想这是因为内存引用的原因。有没有办法把this的结果值改为相同的?

2hh7jdfx

2hh7jdfx1#

你可以试试np.add.at

cnt = np.arange(0, len(c))
np.add.at(a, c, b[cnt])

print(a)

图纸:

[0 0 3 0 0 6 0 0]

相关问题