考虑二维数组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
答案 0 :(得分:0)
选项1:将每一行映射为一个整数
每个元素都是一个字节,因此每行可以唯一地映射到3个字节。
ar = 2.^ar;
ar = ar(:, 1) + 256 * ar(:, 2) + 256^2 * ar(:, 3);
会将您的表格转换为单个列,然后使用hist
。
选项2:使用containers.Map
这是Matlab的哈希表(仅支持最新版本)。您需要先将每行转换为字符串。