计算矩阵内唯一值组合的数量

时间:2015-04-10 17:35:31

标签: matlab matrix indexing

我有72x7双重称为 P ,如下所示:

1 45 2  61 7 1 11  
1 32 6  23 64 1 32  
2 55 32 25 90 3 24  
2 45 6  6 16 3 1  
2 45 4  17 20 3 1  
...
3 87 24 43 71 3 41  
5 64 8  66 75 98 1  

我感兴趣的两个栏目是 1 6 。让我们在第1列 m 中调用一个值,在第6列中调用值 n m 范围从1-6, n 范围从1到3或4.我想计算具有 m <的特定组合的行数/ strong>和 n 。我们将此值称为 x 。例如,在此示例中,如果 m = 1 n = 1 x 将为2,因为有两行 m = 1 AND n = 1 (第1行和第2行)。如果 m = 2 AND n = 3 x 将为3(第3,4和5行)。 我打算做一个循环,像这样:

for m=1:6
   for n=1:a % a could be either 3 or 4
   x = (operation done here)
   end
end

我尝试了数字和独特的功能,但都没有给我正确的答案。有人能帮助我吗?

谢谢,

亚历

2 个答案:

答案 0 :(得分:5)

假设正整数值,则使用sparse来产生所需的结果。输出格式与Divakar's answer中的一样:

[ii, jj, kk] = find(sparse(P(:,1), P(:,6), 1));
result = [ii jj kk];

答案 1 :(得分:4)

一种方法 -

%// Get columns 1 and 6 from input matrix, P
P16 = P(:,[1 6])

%// Get unique row combinations and their IDs
[unqrows,~,idx] = unique(P16,'rows')

%// Get the counts for each combination
counts = accumarray(idx(:),1) %// Or histc(idx,1:max(idx))

%// Present the output
out = [unqrows counts]

因此,P为 -

P = [1 45 2  61 7 1 11
    1 32 6  23 64 1 32
    2 55 32 25 90 3 24
    2 45 6  6 16 3 1
    2 45 4  17 20 3 1 ]

我们将输出为 -

out =
     1     1     2
     2     3     3

因此,在输出中,第一列代表m,第二列代表n,最后一列代表预期的数量。