我有一个数组:
a = np.array([1, 2, 3, 1, 3, 4, 2, 4])
我想做以下计算:
out = 0
for e in a:
out *= 3
out += e
将 out
作为输出(给定示例为 4582
),是否有一种很好的矢量化方法?我觉得可以用einsum
,但是我不知道怎么写。
最佳答案
一种方法:
import numpy as np
a = np.array([1, 2, 3, 1, 3, 4, 2, 4])
powers = np.multiply.accumulate(np.repeat(3, len(a) - 1))
res = np.sum(powers[::-1] * a[:-1]) + a[-1]
print(res)
输出
4582
如果展开循环,您会注意到您将 a
的每个值乘以 3 的幂,然后对结果求和。
关于python - 加法和乘法的联合累加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70303569/