爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 18407|回复: 13

[参考资料] matlab中统计数组中各数字(元素)出现的次数【总结】

[复制链接]

新浪微博达人勋

发表于 2013-7-27 11:40:26 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
转自:http://www.ilovematlab.cn/thread-67367-1-1.html
看到这个帖子不错,可用来学习参考,特发过来:

在论坛上经常遇到这样的问题:如何统计一个数组中各数字(元素)出现的频数、频率和累积频率?这里以案例形式做一个总结。


第一种方法:调用MATLAB自带的函数tabulate统计一个数组中各数字(元素)出现的频数、频率

【例1】统计数值型数组中各元素出现的频数、频率。



>> x = [2  2  6  5  2  3  2  4  3  4  3  4  4  4  4  2  2
      6  0  4  7  2  5  8  3  1  3  2  5  3  6  2  3  5
      4  3  1  4  2  2  2  3  1  5  2  6  3  4  1  2  5];
>> tabulate(x(:))
  Value    Count   Percent
      0        1      1.96%
      1        4      7.84%
      2       14     27.45%
      3       10     19.61%
      4       10     19.61%
      5        6     11.76%
      6        4      7.84%
      7        1      1.96%
      8        1      1.96%

【例2】统计字符串中各字符出现的频数、频率。




>> x = ['If x is a numeric array, TABLE is a numeric matrix.']';
>> tabulate(x)
  Value    Count   Percent
      I        1      2.44%
      f        1      2.44%
      x        2      4.88%
      i        5     12.20%
      s        2      4.88%
      a        5     12.20%
      n        2      4.88%
      u        2      4.88%
      m        3      7.32%
      e        2      4.88%
      r        5     12.20%
      c        2      4.88%
      y        1      2.44%
      ,        1      2.44%
      T        1      2.44%
      A        1      2.44%
      B        1      2.44%
      L        1      2.44%
      E        1      2.44%
      t        1      2.44%
      .        1      2.44%

【例3】统计字符型数组中各行元素出现的频数、频率。



>> x = ['崔家峰';'孙乃喆';'安立群';'王洪武';'王玉杰';'高纯静';'崔家峰';
        '叶 鹏';'关泽满';'谢中华';'王宏志';'孙乃喆';'崔家峰';'谢中华'];
>> tabulate(x)
  Value    Count   Percent
    崔家峰        3     21.43%
    孙乃喆        2     14.29%
    安立群        1      7.14%
    王洪武        1      7.14%
    王玉杰        1      7.14%
    高纯静        1      7.14%
    叶 鹏        1      7.14%
    关泽满        1      7.14%
    谢中华        2     14.29%
    王宏志        1      7.14%

【例4】统计字符串元胞数组中各字符串出现的频数、频率。




>> x = {'崔家峰';'孙乃喆';'安立群';'王洪武';'王玉杰';'高纯静';'崔家峰';
'叶鹏';'关泽满';'谢中华';'王宏志';'孙乃喆';'崔家峰';'谢中华'};
>> tabulate(x)
  Value    Count   Percent
    崔家峰        3     21.43%
    孙乃喆        2     14.29%
    安立群        1      7.14%
    王洪武        1      7.14%
    王玉杰        1      7.14%
    高纯静        1      7.14%
     叶鹏        1      7.14%
    关泽满        1      7.14%
    谢中华        2     14.29%
    王宏志        1      7.14%

【例5】统计名义尺度(如性别,职业,产品型号等)数组中各元素出现的频数、频率。




>> load fisheriris
>> species = nominal(species);
>> tabulate(species)
       Value    Count   Percent
      setosa       50     33.33%
  versicolor       50     33.33%
   virginica       50     33.33%

第二种方法:自编效率更高的函数HistRate(代码如下),调用HistRate函数统计一个数组中各数字(元素)出现的频数、频率和累积频率。
函数HistRate的代码:


(由于没有权限回复,所以看不了这段代码,希望有权限的可以帮忙补充一下O(∩_∩)O~)
【例1】统计数值型数组中各元素出现的频数、频率和累积频率。

>> x = [2  2  6  5  2  3  2  4  3  4  3  4  4  4  4  2  2
      6  0  4  7  2  5  8  3  1  3  2  5  3  6  2  3  5
      4  3  1  4  2  2  2  3  1  5  2  6  3  4  1  2  5];
>> HistRate(x)
         取值         频数       频率      累积频率
           0            1       1.96%       1.96%
           1            4       7.84%       9.80%
           2           14      27.45%      37.25%
           3           10      19.61%      56.86%
           4           10      19.61%      76.47%
           5            6      11.76%      88.24%
           6            4       7.84%      96.08%
           7            1       1.96%      98.04%
           8            1       1.96%     100.00%

【例2】统计字符串中各字符出现的频数、频率和累积频率。

>> x = ['If x is a numeric array, TABLE is a numeric matrix.']';
>> HistRate(x)

ans =

    '取值'    '频数'    '频率(%)'    '累积频率(%)'
    'I'       [   1]    [ 2.4390]    [     2.4390]
    'f'       [   1]    [ 2.4390]    [     4.8780]
    'x'       [   2]    [ 4.8780]    [     9.7561]
    'i'       [   5]    [12.1951]    [    21.9512]
    's'       [   2]    [ 4.8780]    [    26.8293]
    'a'       [   5]    [12.1951]    [    39.0244]
    'n'       [   2]    [ 4.8780]    [    43.9024]
    'u'       [   2]    [ 4.8780]    [    48.7805]
    'm'       [   3]    [ 7.3171]    [    56.0976]
    'e'       [   2]    [ 4.8780]    [    60.9756]
    'r'       [   5]    [12.1951]    [    73.1707]
    'c'       [   2]    [ 4.8780]    [    78.0488]
    'y'       [   1]    [ 2.4390]    [    80.4878]
    ','       [   1]    [ 2.4390]    [    82.9268]
    'T'       [   1]    [ 2.4390]    [    85.3659]
    'A'       [   1]    [ 2.4390]    [    87.8049]
    'B'       [   1]    [ 2.4390]    [    90.2439]
    'L'       [   1]    [ 2.4390]    [    92.6829]
    'E'       [   1]    [ 2.4390]    [    95.1220]
    't'       [   1]    [ 2.4390]    [    97.5610]
    '.'       [   1]    [ 2.4390]    [        100]

【例3】统计字符型数组中各行元素出现的频数、频率和累积频率。


>> x = ['崔家峰';'孙乃喆';'安立群';'王洪武';'王玉杰';'高纯静';'崔家峰';
        '叶 鹏';'关泽满';'谢中华';'王宏志';'孙乃喆';'崔家峰';'谢中华'];
>> HistRate(x)

ans =

    '取值'      '频数'    '频率(%)'    '累积频率(%)'
    '崔家峰'    [   3]    [21.4286]    [    21.4286]
    '孙乃喆'    [   2]    [14.2857]    [    35.7143]
    '安立群'    [   1]    [ 7.1429]    [    42.8571]
    '王洪武'    [   1]    [ 7.1429]    [         50]
    '王玉杰'    [   1]    [ 7.1429]    [    57.1429]
    '高纯静'    [   1]    [ 7.1429]    [    64.2857]
    '叶 鹏'     [   1]    [ 7.1429]    [    71.4286]
    '关泽满'    [   1]    [ 7.1429]    [    78.5714]
    '谢中华'    [   2]    [14.2857]    [    92.8571]
    '王宏志'    [   1]    [ 7.1429]    [        100]

【例4】统计字符串元胞数组中各字符串出现的频数、频率和累积频率。

>> x = {'崔家峰';'孙乃喆';'安立群';'王洪武';'王玉杰';'高纯静';'崔家峰';
'叶鹏';'关泽满';'谢中华';'王宏志';'孙乃喆';'崔家峰';'谢中华'};
>> HistRate(x)

ans =

    '取值'      '频数'    '频率(%)'    '累积频率(%)'
    '崔家峰'    [   3]    [21.4286]    [    21.4286]
    '孙乃喆'    [   2]    [14.2857]    [    35.7143]
    '安立群'    [   1]    [ 7.1429]    [    42.8571]
    '王洪武'    [   1]    [ 7.1429]    [         50]
    '王玉杰'    [   1]    [ 7.1429]    [    57.1429]
    '高纯静'    [   1]    [ 7.1429]    [    64.2857]
    '叶鹏'      [   1]    [ 7.1429]    [    71.4286]
    '关泽满'    [   1]    [ 7.1429]    [    78.5714]
    '谢中华'    [   2]    [14.2857]    [    92.8571]
    '王宏志'    [   1]    [ 7.1429]    [        100]

【例5】统计名义尺度(如性别,职业,产品型号等)数组中各元素出现的频数、频率和累积频率。

>> load fisheriris
>> species = nominal(species);
>> HistRate(species)

ans =

    '取值'          '频数'    '频率(%)'    '累积频率(%)'
    'setosa'        [  50]    [33.3333]    [    33.3333]
    'versicolor'    [  50]    [33.3333]    [    66.6667]
    'virginica'     [  50]    [33.3333]    [        100]












密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-7-27 12:20:51 | 显示全部楼层
新人啊 没有权限看到code啊
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-7-27 12:23:26 | 显示全部楼层
你的“效率更高”体现在哪儿呢  首先是不知道一共有多少种元素 你是先扫描 在预分配吗 减少多次扩展数组的代价?还是其他方法呢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2013-7-27 13:25:27 | 显示全部楼层

类似于需要多少分配多少的动态数组。由于没有权限看到那段代码?所以暂时还不太清楚。不过这个函数和内置的那个函数两者结合,可以吧累计频率和各自占据的频率求出来。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-4-3 21:06:47 | 显示全部楼层
好,顶起!!!!!!!!!!!!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2014-7-3 09:08:56 | 显示全部楼层
好东西,学习了。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-7-3 14:38:28 | 显示全部楼层
不错!!!!!!!!!!!!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2014-9-16 17:08:20 | 显示全部楼层
这东西不错,感谢楼主
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-9-25 16:57:42 | 显示全部楼层
学习学习!!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2015-9-25 22:04:40 | 显示全部楼层
楼主可以在加深一点知识的拓展。感谢楼主分享
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表