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简化时间上有所减少
展开
 我来答
tianxiawulang
2013-07-22 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2562万
展开全部

注意:改写的代码有以下两点假设:
(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 广告
VLOOKUP是Excel中用于垂直查找的函数,其基本用法包括四个参数:1. 查找值:即在数据表首列中需要搜索的值。2. 数据表:包含查找值的单元格区域或数组。3. 返回值所在列数:指定返回查询区域中第几列的值。4. 查找方式:选择精确匹配... 点击进入详情页
本回答由TableDI提供
XiaoXiongHUST
2013-07-21
知道答主
回答量:37
采纳率:0%
帮助的人:13.3万
展开全部
由于没有看到你的上文,不知道你程序具体是怎么写的,我只能在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循环应该很费时间吧
追答
楼上的回答太精妙了,赞!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式