Performance 如何在MATLAB中求两个向量之间的差作为时滞的函数

Performance 如何在MATLAB中求两个向量之间的差作为时滞的函数,performance,matlab,signal-processing,time-series,vectorization,Performance,Matlab,Signal Processing,Time Series,Vectorization,第一次在这里发帖!我很乐意接受任何我能得到的建议 我们有两个向量:v1和v2。假设长度(v1)>长度(v2)。我沿着向量v1移动一个大小为length(v2)的窗口。在每个滞后指数处,从v1I的窗口部分减去v2。然后,我对结果向量的项求和,并返回向量v1长度上每个滞后指数的和。为了简单起见,让我们忽略边缘情况 我已经用for循环完成了这项工作,但是向量的长度大约为10^9[或更大],尽管计算很简单,但似乎要花很长时间才能遍历整个过程 有什么想法吗?我怀疑有这样一个函数,但我没有找到它。如果你允许

第一次在这里发帖!我很乐意接受任何我能得到的建议

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

我已经用
for
循环完成了这项工作,但是向量的长度大约为10^9[或更大],尽管计算很简单,但似乎要花很长时间才能遍历整个过程


有什么想法吗?我怀疑有这样一个函数,但我没有找到它。

如果你允许我重新解释这个问题,你基本上想要一个向量的加窗和。然后从中减去其他向量的和

我的解决方案是在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
是行向量。它用右边的零填充
v1
,取累积和,然后用左边填充的零减去累积和。这导致向量
windowSum(i)
v1
之前索引
i
长度(v2)
元素之和。根据您希望如何处理边、希望向量的长度等,这应该可以解决您的问题。

我有点困惑您到底在做什么。你能举个简短的例子吗?如果你只是对所有元素求和,那么向量的对齐方式无关紧要;您只是在每一端省略了不同数量的元素。谢谢您指出这一点。我完全明白为什么我的解释不好。我对问题进行了编辑,以更好地反映我的实际意思(我希望它现在更有意义)。你真的在求向量之间的差,而不是差的某个范数?这正是我下一步要尝试的事情。我想最好先考虑一个更简单的操作,但看起来相同的技巧可能不起作用。。。在这种情况下,我是否一直在使用
for
循环?我不知道在这种情况下有任何内置函数可以工作。您可以研究mex函数,它是matlab的c扩展。对于像这样的简单操作,它们非常容易编写,并且比for-loop有更好的性能。如果不清楚,第一步是交换操作顺序:求和与减法。这是因为求和是线性的。这绝对是一个聪明的方法。艾萨克,你是一位绅士和学者。