[讨论] 如何简化程式...

楼主: iamclaudiaa (claudia)   2015-04-05 23:32:29
各位好~~~
想请问各位有方法能够简化.使程式跑快一点吗~…
主要是 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, 请问您有比较快的写法吗?谢谢
作者: sunev (Veritas)   2015-04-06 00:07:00
%%把逻辑值换成数值 ?isempty也不该这样用,但最大问题应该是变量越来越长
作者: mp19990920 (郝渴连)   2015-04-06 09:50:00
help profile
作者: sunev (Veritas)   2015-04-07 21:26:00
isempty(aac)==1&&isempty(aad)==1 可改写成isempty(aac)&&isempty(aad)isempty(aac)~=1 可改写成 ~isempty(aac)另,逻辑值也是可以sum的,不用转成double

Links booklink

Contact Us: admin [ a t ] ucptt.com