Matlab实现统计集合中各元素出现次数的示例代码
更新时间:2022年5月5日 13:05 点击:962 作者:slandarer
前言
统计数组中各个元素数量是一个很常用的功能,但我试着用了MATLAB中自带的统计函数 tabulate:
但是发现了两个问题:
当元素中英文混杂时:
X = {'slandarer';'slandarer';'hikari';'hikari';'公众号';'公众号'; 'CSDN';'CSDN';'CSDN'}; tabulate(X)
我们发现中英文混杂时输出会对不齐:
当元素为纯整数数值时:
X=[6,5,6]; tabulate(X)
即使元素没出现也会从1开始一直显示到最大值:
因而,为了解决这俩问题,我自行写了个元素统计类:statable
工具函数类
classdef statable properties % properties relationship: % obj.Value=obj.Name(obj.Pos); % obj.Percent=obj.Count/length(X); % obj.Table=table(obj.Value,obj.Count,obj.Percent); Value;Count;Percent;Table;Name;Pos end methods % 构造函数 function obj=statable(X) flag=false; if isnumeric(X),flag=true;X=X(:);end % 元素类型转换 SX=sort(X);OrgX=SX; [SX,Xid]=grp2idx(SX); obj.Name=Xid; SX=SX(~isnan(SX)); DSX=diff(SX); % 出现次数统计 DSX=find([DSX;1]); obj.Pos=SX(DSX); obj.Count=diff([0;DSX]); obj.Percent=obj.Count/length(SX); % 存储为table obj.Value=obj.Name(obj.Pos); if flag,obj.Value=unique(OrgX);end obj.Table=table(obj.Value,obj.Count,obj.Percent); end % 输出函数 function show(obj) fprintf(1,'%15s%10s%11s\n','Value','Count','Percent'); for i=1:length(obj.Pos) tValue=obj.Name{obj.Pos(i)}; mspace=length(tValue)-sum(abs(tValue)>31&abs(tValue)<127); fprintf(['%',num2str(round(15-mspace)),'s'],tValue); fprintf('%10d',obj.Count(i)); fprintf('%10.3f%%\n',100*obj.Percent(i)); end end end end
使用方式
统计数字
X=[randi([0,10],[100000,1])]; T=statable(X); T.show()
统计单词、名称
X = {'slandarer';'slandarer';'hikari';'hikari';'公众号';'公众号'; 'CSDN';'CSDN';'CSDN'}; T=statable(X); T.show()
统计字符
X=['Life is full of confusing and disordering Particular time,a particular location,',... 'Do the arranged thing of ten million time in the brain,Step by step ,',... 'the life is hard to avoid delicacy and stiffness No enthusiasm forever,',... 'No unexpected happening of surprising and pleasing So,',... 'only silently ask myself in mind Next happiness,when will come?']'; T=statable(X); T.show()
当然,也可以通过如下方式获取其他数据:
T=statable(X);
T.Table
T.Value
T.Count
T.Percent
完整代码
statable
classdef statable properties % properties relationship: % obj.Value=obj.Name(obj.Pos); % obj.Percent=obj.Count/length(X); % obj.Table=table(obj.Value,obj.Count,obj.Percent); Value;Count;Percent;Table;Name;Pos end methods % 构造函数 function obj=statable(X) flag=false; if isnumeric(X),flag=true;X=X(:);end % 元素类型转换 SX=sort(X);OrgX=SX; [SX,Xid]=grp2idx(SX); obj.Name=Xid; SX=SX(~isnan(SX)); DSX=diff(SX); % 出现次数统计 DSX=find([DSX;1]); obj.Pos=SX(DSX); obj.Count=diff([0;DSX]); obj.Percent=obj.Count/length(SX); % 存储为table obj.Value=obj.Name(obj.Pos); if flag,obj.Value=unique(OrgX);end obj.Table=table(obj.Value,obj.Count,obj.Percent); end % 输出函数 function show(obj) fprintf(1,'%15s%10s%11s\n','Value','Count','Percent'); for i=1:length(obj.Pos) tValue=obj.Name{obj.Pos(i)}; mspace=length(tValue)-sum(abs(tValue)>31&abs(tValue)<127); fprintf(['%',num2str(round(15-mspace)),'s'],tValue); fprintf('%10d',obj.Count(i)); fprintf('%10.3f%%\n',100*obj.Percent(i)); end end end end
demo
% demo to test HistRate X = {'slandarer';'slandarer';'hikari';'hikari';'公众号';'公众号'; 'CSDN';'CSDN';'CSDN'}; T=statable(X); T.show() disp(' ') X=[randi([0,10],[100000,1])]; T=statable(X); T.show() disp(' ') X=['Life is full of confusing and disordering Particular time,a particular location,',... 'Do the arranged thing of ten million time in the brain,Step by step ,',... 'the life is hard to avoid delicacy and stiffness No enthusiasm forever,',... 'No unexpected happening of surprising and pleasing So,',... 'only silently ask myself in mind Next happiness,when will come?']'; T=statable(X); T.show() disp(' ') T.Table %T.Value %T.Count %T.Percent
到此这篇关于Matlab实现统计集合中各元素出现次数的示例代码的文章就介绍到这了,更多相关Matlab统计元素出现次数内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
原文出处:https://mp.weixin.qq.com/s/W8Bbvq4LCusQiShqFIUukw
上一篇: C语言简明清晰讲解结构体
下一篇: C++实现简易的五子棋游戏
相关文章
- 这篇文章主要为大家详细介绍了jQuery实现HTML元素隐藏和显示,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-19
- 这篇文章主要介绍了Java8 使用流抽取List<T>集合中T的某个属性操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-05
- 有时候我们需要屏蔽客户端的F12,以防菜鸟也可以随意修改我们的代码,也处于源码的保护等操作,这里就为大家分享一下常见的代码...2020-10-03
- 这篇文章主要介绍了C#统计字符串中数字个数的方法,涉及C#遍历字符串并判断数字的技巧,需要的朋友可以参考下...2020-06-25
- map容器是C++ STL中的重要一员,删除map容器中value为指定元素的问题是我们经常与遇到的一个问题,下面这篇文章主要给大家介绍了关于利用C++如何删除map容器中指定值的元素的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。...2020-04-25
C#读取数据库返回泛型集合详解(DataSetToList)
本篇文章主要是对C#读取数据库返回泛型集合(DataSetToList)进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助...2020-06-25- 下面小编就为大家带来一篇javascript中去除数组重复元素的实现方法【实例】。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧...2016-04-16
- 这篇文章主要介绍了matlab中 sort 函数用法 的相关资料,需要的朋友可以参考下...2016-03-22
- 本文介绍利用C#中内置的系统函数判断一个集合是否是一个集合的子集的方法,此方法代码量极少,分享给大家。...2020-06-25
- 这篇文章主要介绍了如何用Matlab和Python读取Netcdf文件,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-02-20
- 这篇文章主要介绍了Matlab使用fft画出信号频谱图的方法,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-05-19
- 这篇文章主要给大家介绍了关于Javascript循环删除数组中元素的几种方法,文中给出了详细的示例代码供大家参考学习,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。...2017-05-22
- 这篇文章主要介绍了Linux下统计当前文件夹下的文件个数、目录个数,本文使用ls命令配合管理、grep命令实现统计需求,需要的朋友可以参考下...2020-07-11
将pycharm配置为matlab或者spyder的用法说明
这篇文章主要介绍了将pycharm配置为matlab或者spyder的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-09JS+JSP通过img标签调用实现静态页面访问次数统计的方法
这篇文章主要介绍了JS+JSP通过img标签调用实现静态页面访问次数统计的方法,基于JavaScript动态调用jsp页面通过对TXT文本文件的读写实现统计访问次数的功能,需要的朋友可以参考下...2015-12-16- 这篇文章主要介绍了Postgresql 动态统计某一列的某一值出现的次数实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-26
- 下面小编就为大家分享一篇c#实现获取字符串阵列中元素最长或最短的长度方法,具有很好的参考价值,希望对大家有所帮助...2020-06-25
- 这篇文章主要介绍了Servlet实现统计页面访问次数功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-04-08
- Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作,这篇文章主要给大家介绍了Java8中Stream的一些神操作,需要的朋友可以参考下...2021-11-02
- 这篇文章主要介绍了C#中的不可变数据类型介绍(不可变对象、不可变集合),本文讲解了不可变对象、自定义不可变集合、Net提供的不可变集合、不可变优点、不可变对象缺点等内容,需要的朋友可以参考下...2020-06-25