如何从MATLAB中的列表中获取最常用的值(但是多个值)?

时间:2014-04-26 11:00:29

标签: arrays matlab matrix

从1维矩阵:

list_A = [1,2,4,6,7,7,7,9,10,11,11,11,13,13,13]

如何获得出现次数最多的数字列表(在本例中为occurrence = 3)

我想要的答案应该是这样的(如果我们使用list_A):

Ans = [7,11,13]

2 个答案:

答案 0 :(得分:4)

使用hist

我假设您的向量A已排序。

A = [1,2,4,6,7,7,7,9,10,11,11,11,13,13,13];
occ = 3;

out = A( hist(A,A) == occ )

给出:

out =

     7    11    13

如果A未排序,您可以对其进行排序,或者:

A = [7,7,7,1,2,4,6,9,10,11,11,11,13,13,13]
occ = 3;

out = find( histc(A,1:max(A)) == occ )

如果还有负数:

A = [7,7,7,-4,6,-9,10,-11,-11,-11,13,13,13,-20]
occ = 3;

out = find( histc(A,min(A):max(A)) == occ ) + min(A)-1 

或简单版本也在运作:

A = sort(A);
out = A( hist(A,A) == occ )

>> out =  -11     7    13

另一种方便的方法是使用统计工具箱的tabulate功能,甚至可用于小数值!

A = [7.5,7.5,7.5,-4,6,-9,10,-11,-11,-11,13,13,13,-20]
occ = 3;

T = tabulate(A);
out = T(T(:,2) == occ  ,1)

>> out =

  -11.0000
    7.5000
   13.0000

答案 1 :(得分:3)

您可以使用mode轻松完成。要获取所有值,您应该使用第三个输出,它将是一个单元格数组:

[~, ~, result] = mode(list_A);
result = result{1}.';

修改

如果你的矢量已经排序并想要利用它(mode显然没有),你可以使用difffind和{{}进行手动操作{1}}:

max