作者banco (Acoustic)
看板MATLAB
標題Re: [討論] 想請教如何有效率地找出特定元素位置
時間Tue Oct 8 20:26:26 2013
※ 引述《smarter1004 (請拒絕看各新聞台)》之銘言:
: 各位高手大家好
: 假設 size(a) = [1 5]
: 那如果我要找出a中等於0的元素位置我只要輸入
: a == 0
: 那麼如果 size(a) = [10 5]
: 我要找出a中等於[1 2 3 4 5]的row似乎只能用for迴圈解決
: 但它實在有夠慢
: 有沒有類似第一個有效率方法的寫法呢?
: 謝謝各位
把它視為矩陣運算會比較快
我亂造一個 pp x 5 的矩陣M
每個row的數值為介於0~10的整數
從裡面找有哪些row的內容為 [1 2 3 4 5]
基本想法是先來個矩陣減法
再來找哪些row的平方和為0
pp=1000000;
a = [1 2 3 4 5];
M = floor(rand(pp,5)*10);
tic;
tmp=(M-ones(pp,1)*a)';
find(sum( tmp.^2 )==0)
toc
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.96.92.125
1F:→ jatj:用ismember跟find不是兩行就搞定了嗎 10/08 20:30
2F:→ banco:速度問題,ismember比較慢 10/08 20:50
3F:推 sunev:那如果是這樣呢? 10/09 00:26
4F:→ sunev:M(:,1)==1&M(:,2)==2&M(:,3)==3&M(:,4)==4&M(:,5)==5 10/09 00:26
5F:→ banco:樓上的方式最快~ 10/09 08:05
6F:推 sunev:從命中first column裡的再找剩下的理論上會更快,不過我懶了 10/09 10:07
7F:推 smarter1004:如果有一海票column的話 sun大的方法要怎麼寫啊? 10/09 10:39
8F:推 sunev:生出指令字串再用eval做, 10/09 15:04
9F:推 kurt28:推s大的方法 不過也可以參考dsearchn這個指令 10/09 15:34
10F:→ kurt28:但是有一定的風險就是了XD 10/09 15:35
11F:推 smarter1004:感謝大家的幫忙 目前正使用banco大的方法 10/09 16:53
12F:→ smarter1004:sun大的方法不知道為啥我測起來比較慢耶 10/09 16:53
13F:推 sunev:你有幾個row? 10/09 18:14
14F:推 smarter1004:75萬左右 10/10 03:05