作者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://www.ptt.cc/bbs/MATLAB/M.1428247951.A.F61.html
推 sunev: %%把邏輯值換成數值 ? 04/06 00:07
→ 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
→ mp19990920: help profile 04/06 09:50
推 sunev: isempty(aac)==1&&isempty(aad)==1 可改寫成 04/07 21:26
→ sunev: isempty(aac)&&isempty(aad) 04/07 21:26
→ sunev: isempty(aac)~=1 可改寫成 ~isempty(aac) 04/07 21:26
→ sunev: 另,邏輯值也是可以sum的,不用轉成double 04/07 21:27