如何对这段伪代码进行矢量化:
for i from 1 to n
y[i] := y[i-1] + α * (x[i] - y[i-1])
答案 0 :(得分:4)
你原来的等式可以写成:
y[i] = alpha*x[i] + (1-alpha)*y[i-1]
这是一个无限脉冲响应(IIR)滤波器。你可以采用Z变换得到:
Y(z) = alpha*X(z) + (1-alpha)*Y(z^-1)
可以操作以提供过滤器的传递函数
Y(z)/X(z) = alpha/(1 + (alpha-1)*z^-1)
您可以使用lfilter
(docs)中的scipy.signal
功能加快计算速度:
import scipy.signal as sig
y = sig.lfilter([alpha], [1, alpha-1], x)
严格来说,这不是矢量化。但它具有相同的效果:它通过在C中执行循环来加速计算。
答案 1 :(得分:1)
无法进行矢量化。你的归纳只是y [i] = a * x [i] +(1-a)* y [i-1]
将y [n]视为多项式,a * x [i]和y [0]将是系数,1-a将是变量。并且无法对多项式的求值进行矢量化。