有没有办法避免在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循环在另一个循环中重复,避免使用它的目的是使代码更快。
答案 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]