在Matlab中获得矩阵中的唯一元素及其指数,其计数超过给定值
我有一个向量,我想得到该向量中唯一元素的计数,并找到其计数大于给定值的元素的索引 例如,让在Matlab中获得矩阵中的唯一元素及其指数,其计数超过给定值,matlab,count,unique,Matlab,Count,Unique,我有一个向量,我想得到该向量中唯一元素的计数,并找到其计数大于给定值的元素的索引 例如,让 A = [1,2,2,1,1,1,5,5,5,1,1,5] [c,ia,ic] = unique(A) c_counts = accumarray(ic,1); 现在,我想找到给定值(例如t=4)中c==t的值的索引 t=4时的预期输出将为 7,8,9,12(5的指数正好出现4次),当t=6时,输出将为1,4,5,6,10,11(1的指数正好出现6次) =========================
A = [1,2,2,1,1,1,5,5,5,1,1,5]
[c,ia,ic] = unique(A)
c_counts = accumarray(ic,1);
现在,我想找到给定值(例如t=4)中c==t的值的索引
t=4时的预期输出将为
7,8,9,12(5的指数正好出现4次),当t=6时,输出将为1,4,5,6,10,11(1的指数正好出现6次)
==================================更新=======================
我只想迭代前5个计数(5个最高计数值)。我得到cb_计数中唯一元素的计数,然后迭代5个最高的计数值以得到结果
如何在matlab中实现这一点?用于获取每个元素的计数,并使用它获得c
。现在,以获得计数,以其独特的元素。并用于获取A
的相关指数,以了解其top-t
计数的独特元素
t = 2; %Number of top counts
tmp = sortrows([c.' accumarray(ic,1)], -2);
out = arrayfun(@(x) find(A==tmp(x,1)), 1:t, 'un', 0);
%or with a conventional loop instead of arrayfun:
%out = cell(1,t)
%for k=1:t
% out{k} = find(A==tmp(k,1));
%end
如果你想要一个包含所有索引的向量,那么
[out{:}]
会给你这个值。没有a
。你是说A
?你的预期产出是多少?声明explicitly@SardarUsama编辑了我的问题。如果多个值的出现次数相同,会发生什么情况?例如,如果第一个元素是5
,而不是1
,并且t
是5,您自己会输入t=4、6等吗?如果没有,您希望在输出时得到什么?@Adiel在这种情况下,我需要与多个值对应的所有索引。例如,如果第一个元素是5而不是1,并且t=5,那么我希望索引中出现1和5。对于sortrows
,我使用过多的输入得到错误,因为down
仅为表inpot定义。对于矩阵输入,您可以使用sortrows(…,-2)@Adiel R2017a没有此类问题atleast@Adiel我按照您的建议修复了它,使其与旧版本兼容。谢谢您的尝试。@SardarUsama,如果我需要指定一个值而不是top-t计数,我应该编辑什么。例如,iif而不是前2个计数,我需要得到所有元素的索引,对应的计数大于[25,50100200]?@SardarUsama,对不起。仍然不确定输出的确切含义。与前一种情况一样,我可以使用向量作为输出。我正在尝试不同的组合以获得$t$的价值。一种可能是使用顶部计数,我正在考虑另一种可能的自定义计数,而不是顶部计数。
>> out{:}
ans =
1 4 5 6 10 11
ans =
7 8 9 12