第一次在这里发帖提问!我很乐意接受||
批评我可以得到的任何建议。
我们有两个向量:v1
和v2
。假设length(v1)
>> length(v2)
。我沿着向量length(v2)
移动了一个大小为v1
的窗口。在每个滞后索引处,从v1
的窗口部分中减去v2
。然后,我对得到的向量的项求和,并沿着向量v1
的长度返回每个滞后索引的总和。为简单起见,让我们忽略边缘情况。
我用for
循环完成了这个,但是我的向量的长度大约为10 ^ 9 [和更大],即使计算很简单,它似乎需要很长时间时间只是遍历整个事情。
有什么想法吗?我怀疑有一个功能可以做这样的事情,但我没有找到它的运气。
答案 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);
这假定v1
和v2
是行向量。它在右边用{0}填充v1
,取累积和,然后用填充到左边的零减去累加和。这会生成一个向量,windowSum(i)
是length(v2)
元素之和v1
之前的索引i
。根据你想要的边缘处理方式,你想要的矢量长度等等,这可以解决你的问题。