我有一个如下矩阵:
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}}
第四列包含出现次数。我知道独一无二
三个可能的论点,我认为这可能是这样做的方式,
但无法从文档中弄明白。
答案 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]).' ];