Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在MATLAB中查找向量中重复次数最多的10个元素_Arrays_Matlab_Matrix - Fatal编程技术网

Arrays 在MATLAB中查找向量中重复次数最多的10个元素

Arrays 在MATLAB中查找向量中重复次数最多的10个元素,arrays,matlab,matrix,Arrays,Matlab,Matrix,假设我在一个包含n个元素的向量中找到10个重复次数最多的元素 (元素来自1-100) 有人知道怎么做吗 我知道如何找到向量中重复次数最多的元素,但我不知道如何找到10个重复次数最多且n未知的元素。既然您已经知道如何找到重复次数最多的元素,您可以使用以下算法: 找到向量中重复次数最多的元素 从向量中删除重复次数最多的元素 对新向量重复此过程,以查找重复次数第二的元素 继续,直到有10个重复次数最多的元素 代码将类似于: count = 0; values = []; while count <

假设我在一个包含
n个
元素的向量中找到
10个
重复次数最多的元素

(元素来自
1-100

有人知道怎么做吗


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

既然您已经知道如何找到重复次数最多的元素,您可以使用以下算法:

  • 找到向量中重复次数最多的元素
  • 从向量中删除重复次数最多的元素
  • 对新向量重复此过程,以查找重复次数第二的元素
  • 继续,直到有10个重复次数最多的元素
  • 代码将类似于:

    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
    
    count=0;
    值=[];
    当计数小于10时
    r=模式(矢量);
    值=[值r];%存储最重复的值
    向量=向量(find(Vector~=r));
    计数=计数+1;
    结束
    

    效率不高,但它会完成工作

    在这种情况下,您可以使用
    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个最大值。获取可以使用的元素数
    i1
    i2

    num = i2-i1+1;
    num(1:2)
    
    ans =
    
         7     3
    
    对于出现次数,使用
    y(ind(1:10))


    我有一些疑问,所以我测试了很多次,它似乎是有效的。

    数字是排序的,即
    [1 1 1 2 3 3…]
    还是数组中的随机数?非常好。但是,您可以使用
    hist(a,unique(a)),减少内存需求。@Nemesis,我认为
    hist(a,unique(a))不起作用。我甚至将
    length(a)
    更改为
    max(a)
    max(a)>length(a)
    使用
    unqiue
    对我有效时,它会出现问题,但我没有尝试使用您的数组。也许你是对的。谢谢你的帮助,但是你知道我怎样才能找到前10名中的每一个出现在向量中的次数吗?请参阅编辑或@Karmtal的答案(hist会给你数字)。
    a = randi(10,1,100);
    y = hist(a,1:max(a));
    [~,ind] = sort(y,'descend');
    out = ind(1:10);