看板 MATLAB 關於我們 聯絡資訊
ex: x = [1 0 1 1 1 ; ... 0 1 -1 -1 -1 ; ... 0 0 0 0 0 ; ... 0 0 0 0 1 ; ... 0 0 0 0 -1 ]; for i=1:size(x,2) tmp = x(:,i); if( length( find(tmp) ) ==1 ) selected(i) = 1; else selected(i) = 0; end end 答案是 第1, 2 行 (只有一個element不為 0) 有辦法不要用for loop作嗎 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 24.18.250.9 ※ 編輯: shch 來自: 24.18.250.9 (11/19 00:27) ※ 編輯: shch 來自: 24.18.250.9 (11/19 00:27)
Raymond0710:find(sum(x~=0)==1) 11/19 01:06
shch:sorry 沒講清楚 如果有 1 -1 1 sum =1 這樣不是我要的 11/19 01:11
Raymond0710:我沒有直接sum(x) 而是sum(x~=0) 11/19 01:18
shch:感謝感謝 這樣就可以了 抱歉因為早上趕著出門所以沒看清楚 11/19 04:30
DKer:sum(x~=0)沒有解決 1 -1 1 sum=1的問題吧!? 11/19 10:10
DKer:要找只有一個元素的話 直接find(x~=0)不是比較直接嗎O_O? 11/19 10:11
DKer: find(x==0) 11/19 10:12
okgogogo:find(sum(abs(x),1)==1) 11/19 12:21
Gwaewluin:1 -1 1用x~=0是會變成1 1 1的,sum(x~=0)是等於3 11/19 13:19
Gwaewluin:另外要用find的話直接用find(x)即可,非0傳回1,0傳回0 11/19 13:19
okgogogo:對付單行或單列,用我的方法都可以用,abs(x)速度比x~=0 11/19 14:06
okgogogo:快多了 11/19 14:06
DigiPrince:那如果有兩個元素各是 0.5 呢? 11/19 15:39
okgogogo:絕對值取ceil => find(sum(ceil(abs(x)),1)~=1~=1) 11/19 16:15
tpchai:我剛測了500萬組數據 樓上的方法比一樓方法的慢了2倍時間 11/19 16:48
tpchai:abs(x)速度跟x~=0差不多 但又多了ceil會比較慢 11/19 16:51