matlab双重for循环嵌套if向量化
fori=1:xforj=1:yb1=Cb(i,j)-(Mb+Db*sign(Mb));b2=Cr(i,j)-(1.5*Mr+Dr*sign(Mr));if(b1<abs...
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简化时间上有所减少 展开
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简化时间上有所减少 展开
2个回答
展开全部
注意:改写的代码有以下两点假设:
(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);
TableDI
2024-07-18 广告
2024-07-18 广告
VLOOKUP是Excel中用于垂直查找的函数,其基本用法包括四个参数:1. 查找值:即在数据表首列中需要搜索的值。2. 数据表:包含查找值的单元格区域或数组。3. 返回值所在列数:指定返回查询区域中第几列的值。4. 查找方式:选择精确匹配...
点击进入详情页
本回答由TableDI提供
展开全部
由于没有看到你的上文,不知道你程序具体是怎么写的,我只能在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 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循环应该很费时间吧
追答
楼上的回答太精妙了,赞!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询