【发布时间】:2018-08-08 12:32:00
【问题描述】:
我想应用这样的功能:
s[i] = a*x[i] + (1 - a)*s[i-1]
其中s 和x 都是长度相同的数组。
我不想使用 for 循环,因为这些数组非常大(>50 百万)。我试过做这样的事情
def f(a,x):
s = [0]*len(x)
s[i] = a*x[i] + (1 - a)*s[i-1]
return s
但当然 i 没有定义,所以这不起作用。
有没有办法使用map 或numpy.apply_along_axis 或其他一些矢量化方法来做到这一点?
我还没有遇到不使用 for 循环将函数应用于数组的当前和先前元素的方法,而这正是我想在这里了解的真正方法。
编辑
为了明确起见,这里是 for 循环实现,它有效,但我想避免
s = [0]*len(x)
a=0.45
for i in range(len(x)):
s[i] = a*x[i] + (1-a)*s[i-1]
s[0] = x[0] # reset value of s[0]
【问题讨论】:
-
50k 并不是很大。顺便说一句,新的
s[0]会是什么?您的公式是否仅适用于i>0? -
是的,它只适用于 i>0
-
s[i-1]应该是原始s的值,还是已经更新的先前条目? -
您能否更改计算以使用
cumsum或其他ufuncaccumulate方法?
标签: python arrays numpy vectorization