Matlab使用mode函数获取数组中频次最高的值

4.3
(3)

Matlab中,有一个mode函数,它可以获取数组中出现次数最多的值。即,数组中出现频率最高的值。本文将从mode函数的基本用法,用法说明开始讲解,并提供几个实例参考。这里需要注意的是,mode函数获取到的值,对应着中文中的众数。也可以理解为众数就是数组中出现频率最高的值。

Matlab使用mode函数获取数组中频次最高的值

返回在某一数组或数据区域中出现频率最多的数值。MODE是一个位置测量函数。

mode函数帮助文档如下:

>> help mode
 mode   Mode, or most frequent value in a sample.
    M=mode(X) for vector X computes M as the sample mode, or most frequently
    occurring value in X.  For a matrix X, M is a row vector containing
    the mode of each column.  For N-D arrays, mode(X) is the mode of the
    elements along the first non-singleton dimension of X.
 
    When there are multiple values occurring equally frequently, mode
    returns the smallest of those values.  For complex inputs, this is taken
    to be the first value in a sorted list of values.
 
    [M,F]=mode(X) also returns an array F, of the same size as M.
    Each element of F is the number of occurrences of the corresponding
    element of M.
 
    [M,F,C]=mode(X) also returns a cell array C, of the same size
    as M.  Each element of C is a sorted vector of all the values having
    the same frequency as the corresponding element of M.
 
    [...]=mode(X,DIM) takes the mode along the dimension DIM of X.
 
    This function is most useful with discrete or coarsely rounded data.
    The mode for a continuous probability distribution is defined as
    the peak of its density function.  Applying the mode function to a
    sample from that distribution is unlikely to provide a good estimate
    of the peak; it would be better to compute a histogram or density
    estimate and calculate the peak of that estimate.  Also, the mode
    function is not suitable for finding peaks in distributions having
    multiple modes.
 
    Example: If X = [3 3 1 4
                     0 0 1 1
                     0 1 2 4]
 
    then mode(X) is [0 0 1 4] and mode(X,2) is [3
                                                0
                                                0]
 
    To find the mode of a continuous variable grouped into bins:
       y = randn(1000,1);
       edges = -6:.25:6;
       bin = discretize(y,edges);
       m = mode(bin);
       edges([m, m+1])
       histogram(y,edges)

mode函数基本用法

M = mode(A)
M = mode(A,dim)
[M,F] = mode(___)
[M,F,C] = mode(___)

mode函数用法介绍

M=mode(A)返回A的众数,这是A中出现频率最高的值。当有多个值出现频率相同时,mode返回这些值中的最小值。对于复杂输入,最小值是排序列表中的第一个值。

  • 如果A是向量,则mode(A)返回A的最频繁值。
  • 如果A是非空矩阵,则mode(A)返回包含A的每列mode的行向量。
  • 如果A是空的0乘0矩阵,则mode(A)返回NaN。
  • 如果A是多维数组,则mode(A)将大小不等于1的第一个数组维度上的值视为向量,并返回最频繁值的数组。此维度的大小变为1,而所有其他维度的大小保持不变。

M=mode(A,dim)返回沿尺寸dim的元素mode。例如,如果A是矩阵,则mode(A,2)是包含每行最频繁值的列向量

[M,F]=mode(_)还使用前面语法中的任何输入参数返回频率数组F。F与M的大小相同,F的每个元素表示M的对应元素的出现次数。

[M,F,C]=mode(_)还返回与M和F大小相同的单元数组C。C的每个元素是所有值的排序向量,这些值与M的对应元素具有相同的频率。

mode函数实例

矩阵列的众数

定义3乘4矩阵,查找每列最频繁的值。

>> A = [3 3 1 4; 0 0 1 1; 0 1 2 4]

A =

     3     3     1     4
     0     0     1     1
     0     1     2     4

>> M = mode(A)

M =

     0     0     1     4

矩阵行的众数

定义3乘4矩阵,查找每行的最频繁值。

>> A = [3 3 1 4; 0 0 1 1; 0 1 2 4]

A =

     3     3     1     4
     0     0     1     1
     0     1     2     4

>> M = mode(A,2)

M =

     3
     0
     0
Matlab使用mode函数获取数组中频次最高的值

三维阵列的众数

创建1到10之间的1乘3乘4整数数组:

>> A = gallery('integerdata',10,[1,3,4],1)

A(:,:,1) =

    10     8    10


A(:,:,2) =

     6     9     5


A(:,:,3) =

     9     6     1


A(:,:,4) =

     4     9     5

沿第二维度查找此三维数组的最频繁值:

>> M = mode(A)

M(:,:,1) =

    10


M(:,:,2) =

     5


M(:,:,3) =

     1


M(:,:,4) =

     4

此操作通过沿第二维度查找最频繁的值来生成1乘1乘4的阵列。第二维度的大小减小到1。

沿A的第一维度计算众数:

>> M = mode(A,1);
>> isequal(A,M)

ans =

     1

这将返回与A相同的数组,因为第一个维度的大小为1。

具有频率信息的矩阵列众数

定义3乘4矩阵,查找每列最频繁的值,以及出现的频率。

>> A = [3 3 1 4; 0 0 1 1; 0 1 2 4]

A =

     3     3     1     4
     0     0     1     1
     0     1     2     4

>> [M,F] = mode(A)

M =

     0     0     1     4


F =

     2     1     2     2

F(1)是2,因为M(1)在第一列出现两次。

Matlab使用mode函数获取数组中频次最高的值

具有频率和多重性信息的矩阵行众数

定义3乘4矩阵,查找每行中最频繁的值、出现的频率以及该行中的哪些值出现的频率相同。

>> A = [3 3 1 4; 0 0 1 1; 0 1 2 4]

A =

     3     3     1     4
     0     0     1     1
     0     1     2     4

>> [M,F,C] = mode(A,2)

M =

     3
     0
     0


F =

     2
     2
     1


C = 

    [         3]
    [2x1 double]
    [4x1 double]

C{2}是2乘1向量[0;1],因为第二行中的值0和1以频率F(1)出现。

C{3}是4乘1向量[0;1;2;4],因为第三行中的所有值都以频率F(3)出现。

16位无符号整数阵列众数

定义16位无符号整数的1乘4矢量,查找最频繁的值以及出现的次数。

>> A = gallery('integerdata',10,[1,4],3,'uint16')

A =

      6      3      2      3

>> [M,F] = mode(A)
>> class(M)

M =

      3


F =

     2


ans =

uint16

M是与输入A相同的类。

共计3人评分,平均4.3

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

文章目录

原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/3775.html

(1)
微信公众号
古哥的头像古哥管理团队
上一篇 2022年12月15日 23:36
下一篇 2022年12月16日 21:15

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号