1

考虑一个二维数组 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
4

1 回答 1

0

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

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

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

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

选项 2:使用containers.Map

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

于 2013-02-23T15:46:21.460 回答