【发布时间】:2015-04-21 22:20:35
【问题描述】:
我正在尝试导出一个函数来计算两个向量的移动/滚动相关性,并且速度是一个高优先级,因为我需要在数组函数中应用这个函数。我所拥有的(太慢了)是这样的:
Data1 = rand(3000,1);
Data2 = rand(3000,1);
function y = MovCorr(Data1,Data2)
[N,~] = size(Data1);
correlationTS = nan(N, 1);
for t = 20+1:N
correlationTS(t, :) = corr(Data1(t-20:t, 1),Data2(t-20:t,1),'rows','complete');
end
y = correlationTS;
end
如果我知道如何生成滚动窗口索引然后应用accumarray,我认为for 循环可以更有效地完成。有什么建议吗?
【问题讨论】:
-
这不是类似于将元素乘积与
ones(1,21)进行卷积吗?因为我不是很熟悉:你有移动相关性的公式吗? -
不确定您所说的“元素乘积与 (1,21)”是什么意思?
MovCorr上面的函数会产生正确的值。它太慢了。它在两个向量 Data1 和 Data2 之间产生 21 个观察值移动相关性。 -
顺便说一句:你上面的代码甚至没有运行(因为
Data1(.,2)) -
啊,对不起....它现在应该可以工作了
-
另外:这是 22 次观察。
标签: matlab correlation accumarray