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);