matlab:矩阵中有多少个唯一的行?

时间:2014-04-24 21:09:53

标签: matlab unique

我有一个如下矩阵:

A =    
     250         700         950
      81        1630        1711
     250         700         950
      81        1630        1711
     250         700         950
      81        1630        1711
     250         700         950
      81        1630        1711
     250         700         950
      81        1630        1711
     250         700         950
      81        1630        1711
     250         700         950
      81        1630        1711
     250         700         950

我想生成一个像这样的新矩阵:

B = 

      81        1630        1711           7
     250         700         950           8

包含原始矩阵中每个唯一行的行, 和第四列包含该行的次数 出现在原始矩阵中。

我可以使用unique(A,'rows'),但我不知道如何创建。{1}} 第四列包含出现次数。我知道独一无二 三个可能的论点,我认为这可能是这样做的方式, 但无法从文档中弄明白。

2 个答案:

答案 0 :(得分:4)

您可以通过操纵unique的第二和第三个输出来获得第四列:

[C,IA,IC] = unique(A,'rows');
counts = sum(bsxfun(@eq,IC,IA.')).';
C = [C counts(IA)]

或者,如果您还使用'stable'的{​​{1}}选项,则无需重新排序计数(unique)。

或者您可以使用我最喜欢的功能C = [C counts]

accumarray

答案 1 :(得分:3)

您还可以使用sortrows

As = sortrows(A);
ind = [ find(any(diff(As).')) size(As,1) ];
B = [ As(ind,:) diff([0 ind]).' ];