如何在MATLAB中找到两个向量之间的差异作为时滞的函数

时间:2012-11-05 19:25:12

标签: performance matlab signal-processing time-series vectorization

第一次在这里发帖提问!我很乐意接受||批评我可以得到的任何建议。

我们有两个向量:v1v2。假设length(v1)>> length(v2)。我沿着向量length(v2)移动了一个大小为v1的窗口。在每个滞后索引处,从v1的窗口部分中减去v2。然后,我对得到的向量的项求和,并沿着向量v1的长度返回每个滞后索引的总和。为简单起见,让我们忽略边缘情况。

我用for循环完成了这个,但是我的向量的长度大约为10 ^ 9 [和更大],即使计算很简单,它似乎需要很长时间时间只是遍历整个事情。

有什么想法吗?我怀疑有一个功能可以做这样的事情,但我没有找到它的运气。

1 个答案:

答案 0 :(得分:3)

如果您允许我重新构建问题,您基本上需要一个向量的窗口和。然后你从中减去其他一些矢量的总和。

我的解决方案是在matlab(cumsum)中使用累积和函数,如下所示:

l1 = length(v1);
l2 = length(v2);
windowSum = cumsum( [v1 zeros(1,l2)] ) - cumsum( [zeros(1,l2) v1] );
returnVal = windowSum - sum(v2);

这假定v1v2是行向量。它在右边用{0}填充v1,取累积和,然后用填充到左边的零减去累加和。这会生成一个向量,windowSum(i)length(v2)元素之和v1之前的索引i。根据你想要的边缘处理方式,你想要的矢量长度等等,这可以解决你的问题。