如何在MATLAB中计算向量中每个元素的出现次数?

2,436次(过去30天)
我希望能够返回向量中每个元素的出现次数。
例如,如果我有一个向量:
X =[10 25 4 10 9 4 4]
我希望结果是
Y =[2 1 3 2 1 3 3]。

接受的答案

MathWorks支万博1manbetx持团队
编辑:MathWorks支万博1manbetx持团队 2020年2月27日
从MATLAB R2019a开始,您可以使用“groupcounts”函数来计算元素作为摘要出现在向量中的次数。换句话说,下面输出的“GC”中的元素是“GR”中对应元素值的计数(来自原始输入向量“x”):
X = [10 25 4 10 9 4 4]';
[GC, GR] = groupcounts (x)
GC =
3.
1
2
1
GR =
4
9
10
25
有关“groupcounts”的更多信息,请参阅下面的文档链接:
---
从MATLAB R2018b开始,如果您想计算一个元素在向量中出现的次数,并计算输入向量中每个对应元素的输出,您可以使用“grouptransform”函数。例如:
X = [10 25 4 10 9 4 4]';
y = grouptransform (x, x, @numel)
y =
2
1
3.
2
1
3.
3.
有关“grouptransform”的更多信息,请参阅下面的文档链接:
---
在MATLAB R2018b之前,虽然没有单个函数来计数每个元素的出现次数,但有几种方法来计数向量中的元素:
1.逻辑索引:
下面的代码片段将给出所需的输出:
y = 0(大小(x));
i = 1:长度(x)
y (i) =总和(x = = x (i));
结束
对于MATLAB R2016b及后续版本,可以使用隐式展开进一步简化代码:
y =总和(x = = ')
2.装箱:
你可以使用“历史”和“独特”功能,如这里所示:
X = [10 25 4 10 9 4 4]
[a, b] =嘘(x,独特的(x))
3.第三方工具:
另一个解决方案,请参见下面的文件'CountMember '。m',这是由MATLAB用户贡献的,用于从单个函数执行相同的操作:
注意,MathWorks不保证或保证使用或内容提交到MATLAB中央文件交换。任何问题、问题或抱怨都应直接向投稿作者提出。
8的评论
沃尔特·罗伯森
沃尔特·罗伯森 2020年5月19日
S =“aaabb”
nnz (triu ((S = =“一个”) & S = =“b”))

登录评论。

更多的答案(8)

安德烈Bobrov
安德烈Bobrov 2014年8月14日
[a, b] = histc (x,独特的(x));
y = (b);
5个评论

登录评论。


Razvan Carbunescu
Razvan Carbunescu 2019年5月9日
现在有一个更简单的方法来回答这个问题 groupcounts (R2019a)或 grouptransform (R2018b):
>> x=[10 25 4 10 9 4 4]';
> > grouptransform (x, x, @numel)
ans =
2
1
3.
2
1
3.
3.
> > [GC, GR) = groupcounts (x)
GC =
3.
1
2
1
GR =
4
9
10
25
7评论
Razvan Carbunescu
Razvan Carbunescu 2019年6月7日
这似乎是一个非常不同类型的问题,因此本主题中的函数不太可能直接帮助您。我将这个问题作为一个单独的线程发布,并给出示例输入/输出

登录评论。


朱利安Hapke
朱利安Hapke 2017年6月1日
编辑:朱利安Hapke 2017年6月1日
这是另一个例子:
总和(bsxfun (@eq x, x '), 1)
或者如果你想让输出方向和输入方向相同
总和(bsxfun (@eq x, x '),(大小(x, 2) = = 1) + 1)

杰克
杰克 2014年8月14日
这有点尴尬,因为它需要在匿名函数中使用输入数组,但是:
Y = arrayfun(@(t)nnz(x==t), x);
应该也能做到。

Truong表象
Truong表象 2017年8月16日
我需要帮助来计算矩阵中每个元素的出现次数。谢谢
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2017年8月16日
[uval, ~, uidx] =唯一的(你的数组);
输出= [uvals, accumarray(uidx, 1)];
这将产生一个nx2数组,其中第一列是唯一的数组值,第二列是相关的计数。

登录评论。


mittal54
mittal54 2015年5月16日
编辑:沃尔特·罗伯森 2017年8月16日
数量=独特(v);%的列表元素
数=嘘(v、数字);%提供每个元素出现次数的计数
这将给出计数。如果你想要一个漂亮的图形表示,可以试试这个
栏(accumarray (v ', 1))
1评论
沃尔特·罗伯森
沃尔特·罗伯森 2015年5月16日
当使用hist()时,注意Dan的 评论 以上指出了该方法的一个缺陷。这个缺陷不是 安德烈histc的方法 以上。

登录评论。


lamghari
lamghari 2015年11月30日
嗨,我想计算向量中每个元素的跟随次数。
如果我的输入是
X = [1 1 1 2 2 1 1 2 5 5]
我需要一个输出
y =[1 2 1 2 5;3 2 2 1 2]我怎么做?

雷蒙Villamangca
雷蒙Villamangca 2018年10月25日
编辑:雷蒙Villamangca 2018年10月25日
我是这样做的:
arrayfun(@(x) x == elem,vec)) = arrayfun(@(x) x == elem,vec))
其中'elem'是要在给定向量'vec'中搜索的元素。

MathWorks支万博1manbetx持

s manbetx 845


释放

R14SP1

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!