我有一个m x m
矩阵M
,我正在为k
矩阵n x n x k
生成N
子阵列的不同部分进行抽样。我想知道的是:如果没有for循环,这可以有效地完成吗?
以下是一个简单示例:
M = [1:10]'*[1:10]; %//' Large Matrix
indxs = [1 2;2 1;2 2];
N = zeros(4,4,3); %// Matrix to contain subarrays
for i=1:3,
N(:,:,i) = M(3-indxs(i,1):6-indxs(i,1),3-indxs(i,2):6-indxs(i,2));
end
在我的实际代码中,矩阵M
和N
相当大,这个操作循环了数千次,因此这种低效率会对运行时造成重大影响。
答案 0 :(得分:1)
可以使用bsxfun
两次对其进行矢量化。但这并不意味着它必然更有效率:
M = [1:10].'*[1:10]; %'// Large Matrix
indxs = [1 2;2 1;2 2];
r = size(M,1);
ind = bsxfun(@plus, (3:6).', ((3:6)-1)*r); %'// "3" and "6" as per your example
N = M(bsxfun(@minus, ind, reshape(indxs(:,1)+indxs(:,2)*r, 1,1,[])));