作者iamclaudiaa (claudia)
看板MATLAB
标题[讨论] 如何简化程式...
时间Sun Apr 5 23:32:29 2015
各位好~~~
想请问各位有方法能够简化.使程式跑快一点吗~…
主要是 if elseif…那一段会花比较久的时间QQ
已经想了好久了 还是不知道如何简化
现在跑一次大概需要5分钟…而我有十几万次orz
拜托各了…谢谢
for yy=1:2:47
in = inpolygon(line_all(:,yy),line_all(:,yy+1),q(:,2),q(:,3));
in2=double(in); %%把逻辑值换成数值
if exist('final_length')~=1
final_length=[];
end
aab=[];aac=[];aad=[];
if sum(in2(1:100,1))==0
aac=[aac;nan,nan,200];
elseif in2(1,1)==1
aad=[aad;line_all(1,yy:yy+1),2];
else
qqqq2=double(diff(in2)==1);
[row,col] = find(qqqq2(:,1)==1);
qqqq3=(row(1,1)+1)
aab=[aab;line_all(qqqq3,yy:yy+1),qqqq3*2];
end
if isempty(aac)==1&&isempty(aad)==1
final_length=[final_length;aab(1,:)];
end
if isempty(aac)~=1
final_length=[final_length;aac(1,:)];
end
if isempty(aad)~=1
final_length=[final_length;aad(1,:)];
end
end
大概就是我要判断一个100*1的矩阵(称为a,都是由0,1组成),
如果(1)这一百个值总和为零就给代码200,(2)如果a(1,1)=1则给代码2,
(3)若後格减前格=1则给後格的row*2......。
若(1)符合则不做(2)( 3)..
.实在想不出比较快的写法,所以才用isempty, 请问您有比较快的写法吗?谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 182.155.44.172
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1428247951.A.F61.html
1F:推 sunev: %%把逻辑值换成数值 ? 04/06 00:07
2F:→ sunev: isempty也不该这样用,但最大问题应该是变数越来越长 04/06 00:09
因为in=inpolyhon..出来的会是逻辑值,转成数值才能计算
大概就是我要判断一个100*1的矩阵(称为a,都是由0,1组成),如果(1)这一百个值总
和为零就给代码200,(2)如果a(1,1)=1则给代码2,
(3)若後格减前格=1则给後格的row*2......。
若(1)符合则不做(2)( 3)...
实在想不出比较快的写法,所以才用isempty,
s大请问您有比较快的写法吗?谢谢
※ 编辑: iamclaudiaa (182.155.44.172), 04/06/2015 00:45:22
3F:→ mp19990920: help profile 04/06 09:50
4F:推 sunev: isempty(aac)==1&&isempty(aad)==1 可改写成 04/07 21:26
5F:→ sunev: isempty(aac)&&isempty(aad) 04/07 21:26
6F:→ sunev: isempty(aac)~=1 可改写成 ~isempty(aac) 04/07 21:26
7F:→ sunev: 另,逻辑值也是可以sum的,不用转成double 04/07 21:27