matlab中相同数组内的比较

时间:2013-02-23 11:47:58

标签: arrays matlab compare

考虑二维数组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行,所以需要5分钟来计算..我想要一个方法或代码计算得更快.. 这是我的代码

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

1 个答案:

答案 0 :(得分:0)

选项1:将每一行映射为一个整数

每个元素都是一个字节,因此每行可以唯一地映射到3个字节。

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

会将您的表格转换为单个列,然后使用hist

选项2:使用containers.Map

这是Matlab的哈希表(仅支持最新版本)。您需要先将每行转换为字符串。