在Matlab中避免循环

时间:2017-10-04 10:10:20

标签: matlab for-loop optimization

有没有办法避免在Matlab中使用下面的for循环? ' M'和' B'是100乘100对称矩阵,它的元素是已知的。

 p1=rand(100,100).*25;
 M=p1+p1';
 p2=rand(100,100).*25;
 B=p2+p2';
 dr=0.2;
 R=2 *dr;
 for o=1:50 
 center= R*o; 
 MX= abs(M-center)<dr; 
 mm=MX.*B; 
 countB = [countm,sum(mm(:))/sum(mm(:)~=0)];
 count = [count,sum(MX(:))]; 
 end

*这个for循环在另一个循环中重复,避免使用它的目的是使代码更快。

1 个答案:

答案 0 :(得分:0)

o = permute(1:50, [1,3,2]); % [  1 x   1 x 50]
center = R*o;               % [  1 x   1 x 50]
MX = abs(M-center)<dr;      % [100 x 100 x 50]
mm = MX.*B;                 % [100 x 100 x 50]

MX = reshape(MX, numel(M), numel(center)); % [100000 x 50]
mm = reshape(mm, numel(M), numel(center)); % [100000 x 50]

countB = sum(mm,1)./sum(mm==1); % [1 x 50]
count = sum(MX,1);              % [1 x 50]