比較

2013-02-23 81 views
1

考慮一個2維數組ARR,比較

  col1 col2 col3 
    row1 12  1  6 
    row2 30  21  10 
    row3 91  39  40 
    row4 76  1  70 
    row5 30  21  10 

我想行之間進行比較,以獲取每個行的一次出現如此針鋒相對的col1,2,3值都同爲另一個也..所以在上面的次數值,

for row1 it is 1,for row2 = 2,row3 = 1,row4 = 1,row5 =2 .. 
    in above row2 and row5 occur twice having same col values.. 

我實現了代碼和即時得到輸出也但問題是具有幾乎50000行IM,所以它需要5分鐘到compute..i想要一個方法或代碼計算更快..這是我的代碼

for i=1:n 
    for j=i+1:n 
    if((ar(i,1)==ar(j,1))&& (ar(i,2)== ar(j,2)) && (ar(i,3)==ar(j,3))) 
    //stores occurances in index position 4  
     ar(i,4)=ar(i,4)+1; 
     ar(j,4)=ar(j,4)+1; 
    end 
    end 
end 
+0

你將需要一些HashTable?表格中值的範圍是多少?小詮釋? – qPCR4vir 2013-02-23 12:10:19

+0

HashTable的使用使得它更復雜我猜?..範圍是0到255 .. – user2102112 2013-02-23 14:22:44

回答

0

選項1:每一行映射到單個整數

每個元素是一個字節,所以每一行可以被唯一地映射成3個字節。

ar = 2.^ar; 
ar = ar(:, 1) + 256 * ar(:, 2) + 256^2 * ar(:, 3); 

會將您的表格轉換爲單個列,然後使用hist

選項2:使用containers.Map

這是Matlab的哈希表(只支持最新版本)。您需要先將每一行轉換爲一個字符串。