在MATLAB矩阵中找到重复最多的行

时间:2011-01-24 15:11:07

标签: matlab matrix row mode

我正在寻找一种函数来在MATLAB中找到矩阵的最重复(即模态)行。类似的东西:

>> A = [0, 1; 2, 3; 0, 1; 3, 4]

A =

 0     1
 2     3
 0     1
 3     4

然后跑步:

>> mode(A, 'rows')

将返回[0, 1],理想情况下会返回第二个输出,指定此行发生的索引(即[1, 3]'。)

有谁知道这样的功能?

2 个答案:

答案 0 :(得分:13)

您可以使用UNIQUE获取唯一的行索引,然后在其上调用MODE

[uA,~,uIdx] = unique(A,'rows');
modeIdx = mode(uIdx);
modeRow = uA(modeIdx,:) %# the first output argument
whereIdx = find(uIdx==modeIdx) %# the second output argument

答案 1 :(得分:2)

答案可能不对。试试A = [2,3; 0,1; 3,4; 0,1]。 它应该如下:

[a, b, uIdx] = unique(A,'rows');
modeIdx = mode(uIdx);
modeRow = a(modeIdx,:) %# the first output argument
whereIdx = find(ismember(A, modeRow, 'rows'))  %# the second output argument