在MATLAB中的向量中找到10个最重复的元素

时间:2014-11-19 21:01:15

标签: arrays matlab matrix

我想在10元素的向量中找到n个重复元素,

(元素来自1-100

有谁知道怎么做?

我知道如何在向量中找到最重复的元素,但我不知道如何找到10个最重复的元素n未知。

3 个答案:

答案 0 :(得分:5)

a = randi(10,1,100);
y = hist(a,1:max(a));
[~,ind] = sort(y,'descend');
out = ind(1:10);

出现次数使用y(ind(1:10))

我有些疑惑,所以我多次测试,似乎有效。

答案 1 :(得分:2)

您可以针对该案例使用unique。在我的例子中,我有4个数字,我想要以最多的出现次数获得2。

A = [1 1 3 3 1 1 2 2 1 1 1 2 3 3 3 4 4 4 4];
B = sort(A); % Required for the usage of unique below

[~,i1] = unique(B,'first');
[val,i2] = unique(B,'last');
[~,pos] = sort(i2-i1,'descend');
val(pos(1:2))

    1 3

在您的情况下将val(pos(1:2))替换为val(pos(1:10))以获得最多10个值。获取可以使用i1i2的元素数量。

num = i2-i1+1;
num(1:2)

ans =

     7     3

答案 2 :(得分:0)

由于您已经知道如何找到最重复的元素,因此可以使用以下算法:

  1. 找到向量中重复次数最多的元素
  2. 从矢量中删除重复次数最多的元素
  3. 对新向量重复此过程以找到第二个重复元素
  4. 继续,直到您拥有10个最重复的元素
  5. 代码看起来像:

    count = 0;
    values = [];
    while count < 10
       r = Mode(Vector);
       values = [values r]; % store most repeated values
       Vector = Vector(find(Vector~=r));
       count = count + 1;
    end
    

    效率不高,但它可以完成工作