看板 MATLAB 關於我們 聯絡資訊
各位好~~~ 想請問各位有方法能夠簡化.使程式跑快一點嗎~… 主要是 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