matlab双重for循环嵌套if向量化

for i=1:x
for j=1:y
b1=Cb(i,j)-(Mb+Db*sign(Mb));
b2=Cr(i,j)-(1.5*Mr+Dr*sign(Mr));
if (b1<abs(1.5*Db) & b2<abs(1.5*Dr))
Ciny(cnt)=Lu(i,j);
tst(i,j)=Lu(i,j);
cnt=cnt+1;
end
end
end
其中上文中有交代cb等值得数值,但是由于太多无法粘贴,新手求专家把双for简化时间上有所减少

注意:改写的代码有以下两点假设:
(1)cnt的初值为1;
(2)tst的size和Lu相同,若不满足if的条件,元素默认值为0。

如果上述条件不满足,则代码还需要作一些调整。有问题请追问。

 

b1 = Cb(1:x,1:y)-(Mb+Db*sign(Mb));
b2 = Cr(1:x,1:y)-(1.5*Mr+Dr*sign(Mr));
idx = b1<abs(1.5*Db) & b2<abs(1.5*Dr);
Ciny = Lu(idx);
tst = zeros(size(Lu));
tst(idx) = Lu(idx);

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-21
由于没有看到你的上文,不知道你程序具体是怎么写的,我只能在if上修改来减少运行的时间。
for i=1:x
for j=1:y
b1=Cb(i,j)-(Mb+Db*sign(Mb));
b2=Cr(i,j)-(1.5*Mr+Dr*sign(Mr));
if b1<abs(1.5*Db) && b2<abs(1.5*Dr)
Ciny(cnt)=Lu(i,j);
tst(i,j)=Lu(i,j);
cnt=cnt+1;
end
end
end

将if 变量的括号去掉,另外将 & 换为 &&以提高速度。具体你可以百度: Matlab & && 区别追问

谢谢,麻烦问一下双for用什么能代替么?matlabfor循环应该很费时间吧

追答

楼上的回答太精妙了,赞!

相似回答