作者shch (小瓜瓜)
看板MATLAB
標題[討論] 如何有效率的找出只有一個元素的行
時間Sat Nov 19 00:26:48 2011
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)
1F:推 Raymond0710:find(sum(x~=0)==1) 11/19 01:06
2F:→ shch:sorry 沒講清楚 如果有 1 -1 1 sum =1 這樣不是我要的 11/19 01:11
3F:推 Raymond0710:我沒有直接sum(x) 而是sum(x~=0) 11/19 01:18
4F:→ shch:感謝感謝 這樣就可以了 抱歉因為早上趕著出門所以沒看清楚 11/19 04:30
5F:→ DKer:sum(x~=0)沒有解決 1 -1 1 sum=1的問題吧!? 11/19 10:10
6F:→ DKer:要找只有一個元素的話 直接find(x~=0)不是比較直接嗎O_O? 11/19 10:11
7F:→ DKer: find(x==0) 11/19 10:12
8F:推 okgogogo:find(sum(abs(x),1)==1) 11/19 12:21
9F:推 Gwaewluin:1 -1 1用x~=0是會變成1 1 1的,sum(x~=0)是等於3 11/19 13:19
10F:→ Gwaewluin:另外要用find的話直接用find(x)即可,非0傳回1,0傳回0 11/19 13:19
11F:→ okgogogo:對付單行或單列,用我的方法都可以用,abs(x)速度比x~=0 11/19 14:06
12F:→ okgogogo:快多了 11/19 14:06
13F:→ DigiPrince:那如果有兩個元素各是 0.5 呢? 11/19 15:39
14F:→ okgogogo:絕對值取ceil => find(sum(ceil(abs(x)),1)~=1~=1) 11/19 16:15
15F:推 tpchai:我剛測了500萬組數據 樓上的方法比一樓方法的慢了2倍時間 11/19 16:48
16F:→ tpchai:abs(x)速度跟x~=0差不多 但又多了ceil會比較慢 11/19 16:51