Matlab 統計陣列中各數字(元素)出現的次數

Lindsay.Lu丶發表於2018-08-06

如何統計一個陣列中各數字(元素)出現的頻數、頻率和累積頻率?這裡以案例形式做一個總結。


第一種方法:呼叫MATLAB自帶的函式tabulate統計一個陣列中各數字(元素)出現的頻數、頻率

【例1】統計數值型陣列中各元素出現的頻數、頻率。

 

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

複製程式碼


【例2】統計字串中各字元出現的頻數、頻率。
 

  1.  
  2. >> x = ['If x is a numeric array, TABLE is a numeric matrix.']';
  3. >> tabulate(x)
  4.   Value    Count   Percent
  5.       I        1      2.44%
  6.       f        1      2.44%
  7.       x        2      4.88%
  8.       i        5     12.20%
  9.       s        2      4.88%
  10.       a        5     12.20%
  11.       n        2      4.88%
  12.       u        2      4.88%
  13.       m        3      7.32%
  14.       e        2      4.88%
  15.       r        5     12.20%
  16.       c        2      4.88%
  17.       y        1      2.44%
  18.       ,        1      2.44%
  19.       T        1      2.44%
  20.       A        1      2.44%
  21.       B        1      2.44%
  22.       L        1      2.44%
  23.       E        1      2.44%
  24.       t        1      2.44%
  25.       .        1      2.44%
  26.  

複製程式碼


【例3】統計字元型陣列中各行元素出現的頻數、頻率。
 

  1.  
  2. >> x = ['崔家峰';'孫乃喆';'安立群';'王洪武';'王玉傑';'高純靜';'崔家峰';
  3.         '';'關澤滿';'謝中華';'王巨集志';'孫乃喆';'崔家峰';'謝中華'];
  4. >> tabulate(x)
  5.   Value    Count   Percent
  6.     崔家峰        3     21.43%
  7.     孫乃喆        2     14.29%
  8.     安立群        1      7.14%
  9.     王洪武        1      7.14%
  10.     王玉傑        1      7.14%
  11.     高純靜        1      7.14%
  12.             1      7.14%
  13.     關澤滿        1      7.14%
  14.     謝中華        2     14.29%
  15.     王巨集志        1      7.14%
  16.  

複製程式碼


【例4】統計字串元胞陣列中各字串出現的頻數、頻率。
 

  1.  
  2. >> x = {'崔家峰';'孫乃喆';'安立群';'王洪武';'王玉傑';'高純靜';'崔家峰';
  3. '葉鵬';'關澤滿';'謝中華';'王巨集志';'孫乃喆';'崔家峰';'謝中華'};
  4. >> tabulate(x)
  5.   Value    Count   Percent
  6.     崔家峰        3     21.43%
  7.     孫乃喆        2     14.29%
  8.     安立群        1      7.14%
  9.     王洪武        1      7.14%
  10.     王玉傑        1      7.14%
  11.     高純靜        1      7.14%
  12.      葉鵬        1      7.14%
  13.     關澤滿        1      7.14%
  14.     謝中華        2     14.29%
  15.     王巨集志        1      7.14%
  16.  

複製程式碼


【例5】統計名義尺度(如性別,職業,產品型號等)陣列中各元素出現的頻數、頻率。
 

  1.  
  2. >> load fisheriris
  3. >> species = nominal(species);
  4. >> tabulate(species)
  5.        Value    Count   Percent
  6.       setosa       50     33.33%
  7.   versicolor       50     33.33%
  8.    virginica       50     33.33%
  9.  

複製程式碼


第二種方法:自編效率更高的函式HistRate(程式碼如下),呼叫HistRate函式統計一個陣列中各數字(元素)出現的頻數、頻率和累積頻率。
函式HistRate的程式碼:

 

MargieSmiley,如果您要檢視本帖隱藏內容請回覆


【例1】統計數值型陣列中各元素出現的頻數、頻率和累積頻率。
 

  1.  
  2. >> x = [2  2  6  5  2  3  2  4  3  4  3  4  4  4  4  2  2
  3.       6  0  4  7  2  5  8  3  1  3  2  5  3  6  2  3  5
  4.       4  3  1  4  2  2  2  3  1  5  2  6  3  4  1  2  5];
  5. >> HistRate(x)
  6.          取值         頻數       頻率      累積頻率
  7.            0            1       1.96%       1.96%
  8.            1            4       7.84%       9.80%
  9.            2           14      27.45%      37.25%
  10.            3           10      19.61%      56.86%
  11.            4           10      19.61%      76.47%
  12.            5            6      11.76%      88.24%
  13.            6            4       7.84%      96.08%
  14.            7            1       1.96%      98.04%
  15.            8            1       1.96%     100.00%
  16.  

複製程式碼


【例2】統計字串中各字元出現的頻數、頻率和累積頻率。
 

  1.  
  2. >> x = ['If x is a numeric array, TABLE is a numeric matrix.']';
  3. >> HistRate(x)
  4.  
  5. ans = 
  6.  
  7.     '取值'    '頻數'    '頻率(%)'    '累積頻率(%)'
  8.     'I'       [   1]    [ 2.4390]    [     2.4390]
  9.     'f'       [   1]    [ 2.4390]    [     4.8780]
  10.     'x'       [   2]    [ 4.8780]    [     9.7561]
  11.     'i'       [   5]    [12.1951]    [    21.9512]
  12.     's'       [   2]    [ 4.8780]    [    26.8293]
  13.     'a'       [   5]    [12.1951]    [    39.0244]
  14.     'n'       [   2]    [ 4.8780]    [    43.9024]
  15.     'u'       [   2]    [ 4.8780]    [    48.7805]
  16.     'm'       [   3]    [ 7.3171]    [    56.0976]
  17.     'e'       [   2]    [ 4.8780]    [    60.9756]
  18.     'r'       [   5]    [12.1951]    [    73.1707]
  19.     'c'       [   2]    [ 4.8780]    [    78.0488]
  20.     'y'       [   1]    [ 2.4390]    [    80.4878]
  21.     ','       [   1]    [ 2.4390]    [    82.9268]
  22.     'T'       [   1]    [ 2.4390]    [    85.3659]
  23.     'A'       [   1]    [ 2.4390]    [    87.8049]
  24.     'B'       [   1]    [ 2.4390]    [    90.2439]
  25.     'L'       [   1]    [ 2.4390]    [    92.6829]
  26.     'E'       [   1]    [ 2.4390]    [    95.1220]
  27.     't'       [   1]    [ 2.4390]    [    97.5610]
  28.     '.'       [   1]    [ 2.4390]    [        100]
  29.  

複製程式碼


【例3】統計字元型陣列中各行元素出現的頻數、頻率和累積頻率。
 

  1.  
  2. >> x = ['崔家峰';'孫乃喆';'安立群';'王洪武';'王玉傑';'高純靜';'崔家峰';
  3.         '';'關澤滿';'謝中華';'王巨集志';'孫乃喆';'崔家峰';'謝中華'];
  4. >> HistRate(x)
  5.  
  6. ans = 
  7.  
  8.     '取值'      '頻數'    '頻率(%)'    '累積頻率(%)'
  9.     '崔家峰'    [   3]    [21.4286]    [    21.4286]
  10.     '孫乃喆'    [   2]    [14.2857]    [    35.7143]
  11.     '安立群'    [   1]    [ 7.1429]    [    42.8571]
  12.     '王洪武'    [   1]    [ 7.1429]    [         50]
  13.     '王玉傑'    [   1]    [ 7.1429]    [    57.1429]
  14.     '高純靜'    [   1]    [ 7.1429]    [    64.2857]
  15.     ''     [   1]    [ 7.1429]    [    71.4286]
  16.     '關澤滿'    [   1]    [ 7.1429]    [    78.5714]
  17.     '謝中華'    [   2]    [14.2857]    [    92.8571]
  18.     '王巨集志'    [   1]    [ 7.1429]    [        100]
  19.  

複製程式碼


【例4】統計字串元胞陣列中各字串出現的頻數、頻率和累積頻率。
 

  1.  
  2. >> x = {'崔家峰';'孫乃喆';'安立群';'王洪武';'王玉傑';'高純靜';'崔家峰';
  3. '葉鵬';'關澤滿';'謝中華';'王巨集志';'孫乃喆';'崔家峰';'謝中華'};
  4. >> HistRate(x)
  5.  
  6. ans = 
  7.  
  8.     '取值'      '頻數'    '頻率(%)'    '累積頻率(%)'
  9.     '崔家峰'    [   3]    [21.4286]    [    21.4286]
  10.     '孫乃喆'    [   2]    [14.2857]    [    35.7143]
  11.     '安立群'    [   1]    [ 7.1429]    [    42.8571]
  12.     '王洪武'    [   1]    [ 7.1429]    [         50]
  13.     '王玉傑'    [   1]    [ 7.1429]    [    57.1429]
  14.     '高純靜'    [   1]    [ 7.1429]    [    64.2857]
  15.     '葉鵬'      [   1]    [ 7.1429]    [    71.4286]
  16.     '關澤滿'    [   1]    [ 7.1429]    [    78.5714]
  17.     '謝中華'    [   2]    [14.2857]    [    92.8571]
  18.     '王巨集志'    [   1]    [ 7.1429]    [        100]
  19.  

複製程式碼


【例5】統計名義尺度(如性別,職業,產品型號等)陣列中各元素出現的頻數、頻率和累積頻率。
 

  1.  
  2. >> load fisheriris
  3. >> species = nominal(species);
  4. >> HistRate(species)
  5.  
  6. ans = 
  7.  
  8.     '取值'          '頻數'    '頻率(%)'    '累積頻率(%)'
  9.     'setosa'        [  50]    [33.3333]    [    33.3333]
  10.     'versicolor'    [  50]    [33.3333]    [    66.6667]
  11.     'virginica'     [  50]    [33.3333]    [        100]
  12.  

複製程式碼

 

相關文章