在下面的代码中,我有一个简单的 for 循环,我希望将其替换为更快的矢量化 numpy 操作。
import numpy as np
b = np.array([9,8100,-60,7], dtype=np.float64)
a = np.array([584,-11,23,79,1001,0,-19], dtype=np.float64)
m = 3
n = b.shape[0]
l = n-m+1
k = a.shape[0]-m+1
QT = np.array([-85224., 181461., 580047., 8108811., 10149.])
QT_first = QT.copy()
out = [None] * l
for i in range(1, l):
QT[1:] = QT[:k-1] - b[i-1]*a[:k-1] + b[i-1+m]*a[-(k-1):]
QT[0] = QT_first[i]
# Update: Use this QT to do something with the ith element of array x
# As i updates in each iteration, QT changes
out[i] = np.argmin((QT + b_mean[i] * m) / (b_stddev[i] * m * a_stddev))
return out
我需要一个足够通用的解决方案来处理更长的数组。注意QT
取决于m
和长度b
并将始终提供。
如何用 numpy 向量化运算替换 for 循环以使其更快?
Update
我修改了原始代码,以更清楚地演示为什么卷积不能解决我的问题。卷积仅提供最终的 QT,但实际上我需要使用中间 QT 值进行另一次计算,然后再更新它以进行 for 循环的迭代。