优化一种相关计算

时间:2013-12-03 07:32:55

标签: matlab correlation

我目前有一些代码:

data = repmat(1:10, 1, 2);
N = 6;
period = 10;

result = NaN * zeros(1, period);
for i=1:period
    range_indices = i:i+N;
    temp_data = data(range_indices);
    result(i) = sum( temp_data .* fliplr(temp_data));
end

我正在努力使其更快(对于更大的数据集,例如句号= 2000和N = 1600),但是我无法将其转换为矩阵运算的形式(例如,通过使用conv或xcorr)

1 个答案:

答案 0 :(得分:1)

你应该能够完全线性化。首先,考虑range_indices。它们的形式如下:

1 -> N
2 -> N+1
...
P -> N+P

其中P是期间。我们可以设置这些值的矩阵,如下所示:

range_indices = bsxfun(@plus,1:N,(1:period)'-1);

我们可以使用它们直接获取数据,如下所示:

temp_data = data(range_indices);

然后完成该功能非常简单:

result = sum(temp_data.*fliplr(temp_data));

最后,这与问题没有关系,只是我认为我要指出的事情 - 将来如果你需要生成一个NaN值矩阵,你应该使用nan(1,period)代替。 / p>