[討論] 如何簡化程式...

看板MATLAB作者 (claudia)時間10年前 (2015/04/05 23:32), 10年前編輯推噓2(205)
留言7則, 2人參與, 最新討論串1/1
各位好~~~ 想請問各位有方法能夠簡化.使程式跑快一點嗎~… 主要是 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

04/06 00:07, , 1F
%%把邏輯值換成數值 ?
04/06 00:07, 1F

04/06 00:09, , 2F
isempty也不該這樣用,但最大問題應該是變數越來越長
04/06 00:09, 2F
因為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

04/06 09:50, , 3F
help profile
04/06 09:50, 3F

04/07 21:26, , 4F
isempty(aac)==1&&isempty(aad)==1 可改寫成
04/07 21:26, 4F

04/07 21:26, , 5F
isempty(aac)&&isempty(aad)
04/07 21:26, 5F

04/07 21:26, , 6F
isempty(aac)~=1 可改寫成 ~isempty(aac)
04/07 21:26, 6F

04/07 21:27, , 7F
另,邏輯值也是可以sum的,不用轉成double
04/07 21:27, 7F
文章代碼(AID): #1L8LMFzX (MATLAB)
文章代碼(AID): #1L8LMFzX (MATLAB)