Matlab实现统计集合中各元素出现次数的示例代码

目录
  • 前言
  • 工具函数类
  • 使用方式
    • 统计数字
    • 统计单词、名称
    • 统计字符
  • 完整代码

前言

统计数组中各个元素数量是一个很常用的功能,但我试着用了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统计元素出现次数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解基于Matlab的空心散点检测

    目录 问题描述 过程展示 图像导入 依据RGB值图像二值化 图像腐蚀 图像边缘清理 联通区域查找与坐标均值计算 圈查找 完整代码 其它形状空心散点检测 问题描述 有一张这样的图片,如何提取里面的红色圈圈坐标,并且连接这些坐标形成两个封闭的环路? 过程展示 图像导入 oriPic=imread('test1.png'); subplot(2,2,1) imshow(oriPic) 依据RGB值图像二值化 原理就是图中颜色种类比较少,只有红黑白,而红色和白色都是R通道数值较大,因此我们可以利用这一点

  • Matlab实现生成箭头坐标轴详解

    目录 demo1基础使用 demo2轴方向 demo3轴的其他属性 后言 属实是写工具函数写上瘾了,又写了一个一行代码将坐标轴变为箭头坐标轴的函数,而且可以对其进行随意拖动和缩放(拖动需要先点击那个像手掌的符号): 功能函数的引用非常简单,就只是在最后面加上一行: arrowAxes()或者arrowAxes(ax) 即可,以下给出几个例子: demo1 基础使用 就像上面说的一样,编写好代码后在最后面引用一下工具函数即可: % arrow axes demo1 % @author:slanda

  • Matlab利用垂距法实现提取离散坐标数据特征点

    目录 1.工具函数 2.基础使用(二维) 3.使用并修饰绘图(二维) 4.三维数据 垂距法是指根据中间顶点到其前.后两相邻顶点连线的距离的大小,来确定是否保留该顶点的一种 线要素顶点压缩 算法.当求得的距离大于给定的限差(阈值)时,保留该顶点,否则删除该顶点(如下图所示). 一般使用所有点到直线距离的 中位数 作为阈值.同时,本人所编写的工具函数不仅可以处理二维数据点,三维甚至更高维度的数据点依旧可以处理. 1.工具函数 怕大家找不到工具函数,这里放在最前面啦: function [newPnt

  • Matlab实现统计集合中各元素出现次数的示例代码

    目录 前言 工具函数类 使用方式 统计数字 统计单词.名称 统计字符 完整代码 前言 统计数组中各个元素数量是一个很常用的功能,但我试着用了MATLAB中自带的统计函数 tabulate: 但是发现了两个问题: 当元素中英文混杂时: X = {'slandarer';'slandarer';'hikari';'hikari';'公众号';'公众号'; 'CSDN';'CSDN';'CSDN'}; tabulate(X) 我们发现中英文混杂时输出会对不齐: 当元素为纯整数数值时: X=[6,5,6

  • Java编程实现统计数组中各元素出现次数的方法

    本文实例讲述了Java编程实现统计数组中各元素出现次数的方法.分享给大家供大家参考,具体如下: package javatest; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class NumOfEle { public static void main(String[] ar

  • java统计字符串中指定元素出现次数方法

    本文实例讲解了统计文本中某个字符串出现的次数或字符串中指定元素出现的次数方法,分享给大家供大家参考,具体内容如下 运行效果图: 程序查找的上此文件带"a"的字符在多少次 具体代码如下 package com.zuidaima.util.string; import java.io.*; public class CountString { public static int count(String filename, String target) throws FileNotFoun

  • python 统计列表中不同元素的数量方法

    刚刚上网搜了一下如何用python统计列表中不同元素的数量,发现很少,找了半天.我自己来写一种方法. 代码如下 list=[1,1,2,2,3] print(list) set1=set(list) print(set1) print(len(set1)) #len(set1)即为列表中不同元素的数量 得到结果: [1, 1, 2, 2, 3] {1, 2, 3} 3 原理就是set集合中不允许重复元素出现. 以上这篇python 统计列表中不同元素的数量方法就是小编分享给大家的全部内容了,希望

  • Python通过递归遍历出集合中所有元素的方法

    本文实例讲述了Python通过递归遍历出集合中所有元素的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: '''''通过递归遍历出集合中的所有元素 Created on 2013-9-29 @author: L.Eric '''  def print_List(list_nums):      for each_item in list_nums :           if isinstance(each_item,list):              print_Lis

  • Java使用entrySet方法获取Map集合中的元素

    本文为大家分享了使用entrySet方法获取Map集合中元素的具体代码,供大家参考,具体内容如下 /*--------------------------------- 使用entrySet方法取出Map集合中的元素: ....该方法是将Map集合中key与value的关系存入到了Set集合中,这个关系的数据类型是Map.Entry ....entrySet方法返回值类型的具体写法为:Set< Map.Entry<KeyType , ValueType> > -----------

  • java 如何实现正确的删除集合中的元素

    在java中如果我们需要遍历集合并删除其中的某些元素时,例如对于List来说,我们有三种办法. 1. 普通的for循环遍历并删除 public void forRemove(List<T> list, T obj){ for(int i = 0;i < list.size(); i++){ if (obj == list.get(i)) { list.remove(obj); } } } main中调用 <pre name="code" class="

  • python 统计list中各个元素出现的次数的几种方法

    利用字典dict来完成统计 举例: a = [1, 2, 3, 1, 1, 2] dict = {} for key in a: dict[key] = dict.get(key, 0) + 1 print dict 输出结果: >>>{1: 3, 2: 2, 3: 1} 利用Python的collection包下Counter的类 举例: from collections import Counter a = [1, 2, 3, 1, 1, 2] result = Counter(a)

  • Python 统计列表中重复元素的个数并返回其索引值的实现方法

    需求:统计列表list1中元素3的个数,并返回每个元素的索引 list1 = [3, 3, 8, 9, 2, 10, 6, 2, 8, 3, 4, 5, 5, 4, 1, 5, 9, 7, 10, 2] 在实际工程中,可能会遇到以上需求,统计元素个数使用list.count()方法即可,不做多余说明 返回每个元素的索引需要做一些转换,简单整理了几个实现方法 1 list.index()方法 list.index()方法返回列表中首个元素的索引,当有重复元素时,可以通过更改index()方法__s

  • JavaScript统计字符串中每个字符出现次数完整实例

    本文实例讲述了JavaScript统计字符串中每个字符出现次数的方法.分享给大家供大家参考,具体如下: 这是一个面试题,要求随便给你一个字符串,让你求出字符串中每个字符出现的次数. 先来看看运行效果截图: 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&

随机推荐