【发布时间】:2014-12-12 14:08:16
【问题描述】:
在 Matlab 中,我需要累积一个大矩阵的重叠对角块。示例代码如下。
由于这段代码需要多次运行,所以会消耗大量资源。该过程用于阵列信号处理,用于所谓的子阵列平滑或空间平滑。有什么方法可以更快地做到这一点?
% some values for parameters
M = 1000; % size of array
m = 400; % size of subarray
n = M-m+1; % number of subarrays
R = randn(M)+1i*rand(M);
% main code
S = R(1:m,1:m);
for i = 2:n
S = S + R(i:m+i-1,i:m+i-1);
end
尝试:
1) 我尝试了以下替代矢量化版本,但不幸的是它变得慢了很多!
[X,Y] = meshgrid(1:m);
inds1 = sub2ind([M,M],Y(:),X(:));
steps = (0:n-1)*(M+1);
inds = repmat(inds1,1,n) + repmat(steps,m^2,1);
RR = sum(R(inds),2);
S = reshape(RR,m,m);
2) 我使用 Matlab 编码器创建了一个 MEX 文件,它变得慢了很多!
【问题讨论】:
标签: matlab signal-processing arrays