[討論] 如何有效率的找出只有一個元素的行

看板MATLAB作者 (小瓜瓜)時間12年前 (2011/11/19 00:26), 編輯推噓5(5011)
留言16則, 7人參與, 最新討論串1/1
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)

11/19 01:06, , 1F
find(sum(x~=0)==1)
11/19 01:06, 1F

11/19 01:11, , 2F
sorry 沒講清楚 如果有 1 -1 1 sum =1 這樣不是我要的
11/19 01:11, 2F

11/19 01:18, , 3F
我沒有直接sum(x) 而是sum(x~=0)
11/19 01:18, 3F

11/19 04:30, , 4F
感謝感謝 這樣就可以了 抱歉因為早上趕著出門所以沒看清楚
11/19 04:30, 4F

11/19 10:10, , 5F
sum(x~=0)沒有解決 1 -1 1 sum=1的問題吧!?
11/19 10:10, 5F

11/19 10:11, , 6F
要找只有一個元素的話 直接find(x~=0)不是比較直接嗎O_O?
11/19 10:11, 6F

11/19 10:12, , 7F
find(x==0)
11/19 10:12, 7F

11/19 12:21, , 8F
find(sum(abs(x),1)==1)
11/19 12:21, 8F

11/19 13:19, , 9F
1 -1 1用x~=0是會變成1 1 1的,sum(x~=0)是等於3
11/19 13:19, 9F

11/19 13:19, , 10F
另外要用find的話直接用find(x)即可,非0傳回1,0傳回0
11/19 13:19, 10F

11/19 14:06, , 11F
對付單行或單列,用我的方法都可以用,abs(x)速度比x~=0
11/19 14:06, 11F

11/19 14:06, , 12F
快多了
11/19 14:06, 12F

11/19 15:39, , 13F
那如果有兩個元素各是 0.5 呢?
11/19 15:39, 13F

11/19 16:15, , 14F
絕對值取ceil => find(sum(ceil(abs(x)),1)~=1~=1)
11/19 16:15, 14F

11/19 16:48, , 15F
我剛測了500萬組數據 樓上的方法比一樓方法的慢了2倍時間
11/19 16:48, 15F

11/19 16:51, , 16F
abs(x)速度跟x~=0差不多 但又多了ceil會比較慢
11/19 16:51, 16F
文章代碼(AID): #1EneTBiH (MATLAB)