Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 一种相关计算的优化_Matlab_Correlation - Fatal编程技术网

Matlab 一种相关计算的优化

Matlab 一种相关计算的优化,matlab,correlation,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 我试图让它更快(对于更大的数据集,例如pe

我现在有一些代码:

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

我试图让它更快(对于更大的数据集,例如period=2000和N=1600),但我无法将它转换为矩阵运算形式(例如使用conv或xcorr)。

您应该能够完全线性化它。首先,考虑<代码> RangeEx索引< /代码>。其形式如下:

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,句点)

您应该能够完全线性化这一点。首先,考虑<代码> RangeEx索引< /代码>。其形式如下:

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,句点)

bsxfun
非常有趣!当然,谢谢。。我需要在bsxfun调用中使用
sum(..,2)
,和
1:period+1
,然后结果是相同的(而且更快)。
bsxfun
非常有趣!当然,谢谢。。在bsxfun调用中,我需要
sum(..,2)
,和
1:period+1
,然后结果是相同的(而且更快)。