【发布时间】:2018-06-05 22:47:00
【问题描述】:
我有两个时间序列 A 和 B。长度为 m 的 A 和长度为 n 的 B。 m << n。两者都有维度d。
我通过在 B 上滑动 A 来计算 A 和 B 中所有子序列之间的距离。 在 python 中,代码如下所示。
def sliding_dist(A,B)
n = len(B)
dist = np.zeros(n)
for i in range(n-m):
subrange = B[i:i+m,:]
distance = np.linalg.norm(A-subrange)
dist[i] = distance
return dist
现在这段代码需要很长时间才能执行,而且我有很多计算要做。 我需要加快计算速度。我的猜测是我可以通过使用卷积和频域乘法(FFT)来做到这一点。但是,我一直无法实现。
有什么想法吗? :) 谢谢
【问题讨论】:
-
这个问题是关于优化代码的。这些问题属于这里:codereview.stackexchange.com
-
您确实可以使用 FFT 通过频域加速卷积。但是,这里没有卷积。
-
嗯,不是在当前的实现中。难道不能将问题重写为等效的卷积吗?
-
您是否尝试过创建一个超级A,它只是长度为
n的A 副本的串联,这样您只需执行一次减法和一次调用norm()?不确定到底是什么瓶颈。你能指定n和m的数量级吗? -
m ~ 10, n ~ 500
标签: python algorithm fft sliding-window