如何在numpy中将此计算向量化

时间:2017-07-06 06:07:14

标签: numpy vectorization

如果a和b是适当大小的numpy数组,如何对以下计算进行矢量化?

total = a[0]
for ix in range(1, len(a)):
   total = total*b[ix-1] + a[ix]

1 个答案:

答案 0 :(得分:4)

没关系,如果你做一些代数,有一个ufunc技巧可行。在这种情况下,ufuncmultiply,技巧为accumulate

c = np.r_[np.multiply.accumulate(b[0:-1][::-1])[::-1], 1]
total2 = np.sum(a * c)

这样做:代数地,您将a[i]乘以b[i:]乘以for i in range(a.size)。要执行此操作,请翻转b并获取除最后一个数字之外的所有数字的运行产品(假设ab长度相同),然后将其翻转。最后一个值应为1,因为刚刚添加了最终的a值。

<强>测试

a = np.random.randint(1, 10, 40)
b = 1 + np.random.rand(40)

total = a[0]
for ix in range(1, len(a)):
   total = total*b[ix-1] + a[ix]

total
278443993.10494208

total2
278443993.10494208