我目前有一些代码:
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)
答案 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>