1

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

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

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

有任何想法吗?我怀疑有一个函数可以做这样的事情,但我没有找到它。

4

1 回答 1

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是行向量。它v1在右侧填充零,获取累积和,然后减去在左侧填充零的累积和。这会产生一个向量,它是前面 index元素windowSum(i)的总和。根据您希望处理边缘的方式,您希望矢量的长度等,这应该可以解决您的问题。length(v2)v1i

于 2012-11-05T20:30:24.107 回答