本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

histcounts

直方图 bin 计数

说明

示例

[N,edges] = histcounts(X)X 的值划分为多个 bin,并返回每个 bin 中的计数以及 bin 边界。histcounts 函数使用自动 bin 划分算法,返回均匀宽度的 bin,这些 bin 可涵盖 X 中的元素范围并显示基本分布的形状。

示例

[N,edges] = histcounts(X,nbins) 使用标量 nbins 指定的 bin 数量。

示例

[N,edges] = histcounts(X,edges)X 划分到由向量 edges 来指定 bin 边界的 bin 内。如果 edges(k)X(i) < edges(k+1),值 X(i) 位于第 k 个 bin 中。最后一个 bin 也包含 bin 的右边界,这样如果 edges(end-1)X(i)edges(end),它包含 X(i)

示例

[N,edges,bin] = histcounts(___) 还使用以前的任何语法返回索引数组 binbin 是大小与 X 相同的数组,其元素是 X 中的对应元素的 bin 索引。第 k 个 bin 中的元素数量是 nnz(bin==k),与 N(k) 相同。

示例

N = histcounts(C)(其中 C 是分类数组)返回向量 N,该向量指示 C 中其值等于 C 的各类别的元素的数量。C 中的每个类别在 N 中都有一个对应元素。

N = histcounts(C,Categories) 仅对 C 中其值等于由 Categories 指定的类别子集的元素进行计数。

示例

[N,Categories] = histcounts(___) 还使用分类数组的任一上述语法,返回对应于 N 中每个计数的类别。

示例

[___] = histcounts(___,Name,Value) 使用一个或多个 Name,Value 对组指定的其他选项,这些选项使用上述语法中的任意输入或输出参数组合。例如,您可以指定 'BinWidth' 和一个标量来调整数值数据的 bin 的宽度。对于分类数据,您可以指定 'Normalization' 和下列项之一:'count''countdensity''probability''pdf''cumcount''cdf'

示例

全部折叠

将 100 个随机值分布到多个 bin 内。histcounts 自动选择合适的 bin 宽度以显示数据的基本分布。

X = randn(100,1);
[N,edges] = histcounts(X)
N = 1×7

     2    17    28    32    16     3     2

edges = 1×8

    -3    -2    -1     0     1     2     3     4

将 10 个随机数分布到 6 个等间距 bin 内。

X = [2 3 5 7 11 13 17 19 23 29];
[N,edges] = histcounts(X,6)
N = 1×6

     2     2     2     2     1     1

edges = 1×7

         0    4.9000    9.8000   14.7000   19.6000   24.5000   29.4000

将 1,000 个随机数分布到多个 bin 内。通过向量定义 bin 边界,其中第一个元素是第一个 bin 的左边界,而最后一个元素是最后一个 bin 的右边界。

X = randn(1000,1);
edges = [-5 -4 -2 -1 -0.5 0 0.5 1 2 4 5];
N = histcounts(X,edges)
N = 1×10

     0    24   149   142   195   200   154   111    25     0

将小于 100 的所有质数分布到多个 bin 内。将 'Normalization' 指定为 'probability' 以对 bin 计数进行归一化,从而 sum(N)1。即,每个 bin 计数代表观测值属于该 bin 的可能性。

X = primes(100);
[N,edges] = histcounts(X, 'Normalization', 'probability')
N = 1×4

    0.4000    0.2800    0.2800    0.0400

edges = 1×5

     0    30    60    90   120

将介于 -5 和 5 之间的 100 个随机整数分布到多个 bin 内,并将 'BinMethod' 指定为 'integers' 以使用以整数为中心的单位宽度 bin。指定 histcounts 的第三个输出以返回代表数据 bin 索引的向量。

X = randi([-5,5],100,1);
[N,edges,bin] = histcounts(X,'BinMethod','integers');

通过计算数字 3 在 bin 索引向量 bin 中的出现次数求第三个 bin 的 bin 计数。结果与 N(3) 相同。

count = nnz(bin==3)
count = 8

创建一个表示投票的分类向量。该向量中的类别是 'yes''no''undecided'

A = [0 0 1 1 1 0 0 0 0 NaN NaN 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 1];
C = categorical(A,[1 0 NaN],{'yes','no','undecided'})
C = 1x27 categorical array
  Columns 1 through 9

     no      no      yes      yes      yes      no      no      no      no 

  Columns 10 through 16

     undecided      undecided      yes      no      no      no      yes 

  Columns 17 through 25

     no      yes      no      yes      no      no      no      yes      yes 

  Columns 26 through 27

     yes      yes 

确定每个类别中的元素数量。

[N,Categories] = histcounts(C)
N = 1×3

    11    14     2

Categories = 1x3 cell array
    {'yes'}    {'no'}    {'undecided'}

输入参数

全部折叠

要分布到各 bin 的数据,指定为向量、矩阵或多维数组。如果 X 不是向量,则 histcounts 将它视作单列向量 X(:)

histcounts 忽略所有的 NaN 值。同样,histcounts 忽略 Inf-Inf 值,除非 bin 边界将 Inf-Inf 显式指定为 bin 边界。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | datetime | duration

分类数据,指定为分类数组。histcounts 将忽略未定义的分类值。

数据类型: categorical

bin 数量,指定为正整数。如果不指定 nbins,则 histcounts 基于 X 中的值自动计算将使用多少个 bin。

示例: [N,edges] = histcounts(X,15) 使用 15 个 bin。

bin 边界,指定为向量。edges(1) 是第一个 bin 的左边界,edges(end) 是最后一个 bin 的右边界。

对于日期时间和持续时间数据,edges 必须是单调递增顺序的日期时间或持续时间向量。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | datetime | duration

计数中包含的类别,指定为字符向量的元胞向量或分类向量。默认情况下,histcounts 对分类数组 C 中的每个类别使用一个 bin,而使用 Categories 可指定类别的唯一子集。

示例: h = histcounts(C,{'Large','Small'}) 只对类别 'Large''Small' 中的分类数据进行计数。

数据类型: cell | categorical

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN 所示。

示例: [N,edges] = histcounts(X,'Normalization','probability')N 中的 bin 计数进行归一化,这样 sum(N) 为 1。

bin 范围,指定为二元素向量 [bmin,bmax]。该选项仅包括 X 中介于 bminbmax(含二者)之间的值,即 X(X>=bmin & X<=bmax)

此选项不适用于分类数据。

示例: [N,edges] = histcounts(X,'BinLimits',[1,10]) 仅包括 X 中介于 110(含二者)之间的值。

bin 划分算法,指定为此表中的一个值。

说明

'auto'

默认的 'auto' 算法选择一个 bin 宽度,以便涵盖数据范围并显示基础分布形状。

'scott'

如果数据接近正态分布,但还适用于大多数的其他分布,则 Scott 规则最佳。它使用 bin 宽度 3.5*std(X(:))*numel(X)^(-1/3)

'fd'

Freedman-Diaconis 规则对数据中的离群值不太敏感,可能更适用于重尾分布的数据。它使用 bin 宽度 2*IQR(X(:))*numel(X)^(-1/3),其中 IQRX 的四分位差。

'integers'

整数规则对整数数据有用,因为它为每个整数创建一个 bin。它使用 bin 宽度 1 并将 bin 边界放在整数的中间。为避免无意间创建太多 bin,可以使用该规则创建 65536 个 bin 的限制 (216)。如果数据范围大于 65536,则改用更宽的 bin。

注意

'integers' 不支持日期时间和持续时间数据。

'sturges'

Sturges 规则是因其简单性而广受欢迎的简单规则。它将 bin 数量选择为 ceil(1 + log2(numel(X)))

'sqrt'

平方根规则是另一个广泛用于其他软件包的简单规则。它将 bin 数量选择为 ceil(sqrt(numel(X)))

histcounts 并不始终使用这些精确的公式来选择 bin 数目。有时 bin 数目会稍做调整,以便 bin 边界落在“合适”的数字上。

对于日期时间数据,bin 方法可以是下列时间单位之一:

'second''month'
'minute''quarter'
'hour''year'
'day''decade'
'week''century'

对于持续时间数据,bin 方法可以是下列时间单位之一:

'second''day'
'minute''year'
'hour' 

如果您使用日期时间或持续时间数据指定 BinMethod,则 histcounts 最多可以使用 65,536(即 216)个 bin。如果指定的 bin 持续时间需要多个 bin,则 histcounts 使用与最大 bin 数对应的较大的 bin 宽度。

此选项不适用于分类数据。

示例: [N,edges] = histcounts(X,'BinMethod','integers') 使用以整数为中心的 bin。

bin 宽度,指定为标量。如果指定 BinWidth,则 histcounts 最多可以使用 65,536(即 216)个 bin。如果指定的 bin 宽度需要多个 bin,则 histcounts 使用与最大 bin 数对应的较大的 bin 宽度。

对于日期时间和持续时间数据,'BinWidth' 的值可以是标量持续时间或日历持续时间。

此选项不适用于分类数据。

示例: [N,edges] = histcounts(X,'BinWidth',5) 使用宽度为 5 的 bin。

归一化类型,指定为此表中的一个值。对于每个 bin i

  • vi 是 bin 的值。

  • ci 是 bin 中的元素数目。

  • wi 是 bin 的宽度。

  • N 是输入数据中的元素数目。此值可以大于分 bin 数据元素数,前提是数据中包含 NaNNaT<undefined> 值,或者某些数据位于 bin 范围外。

bin 值注释
'count'(默认值)

vi=ci

  • 观测值的计数或频率。

  • bin 值之和小于或等于 numel(X)。仅当某些输入数据不在 bin 中时,bin 值之和才会小于 numel(X)

  • 对于分类数据,bin 值之和为 numel(X)sum(ismember(X(:),Categories))

'countdensity'

vi=ciwi

  • 按 bin 的宽度进行换算的计数或频率。

  • 对于分类数据,这与 'count' 相同。

注意

'countdensity' 不支持日期时间和持续时间数据。

'cumcount'

vi=j=1icj

  • 累积计数。每个 bin 的值等于该 bin 及以前的所有 bin 中的累积观测值数量。

  • 最后一个 bin 的值小于或等于 numel(X)

  • 对于分类数据,最后一个 bin 的值小于或等于 numel(X)sum(ismember(X(:),Categories))

'probability'

vi=ciN

  • 相对概率。

  • bin 值之和小于或等于 1

'pdf'

vi=ciNwi

  • 概率密度函数的估计值。

  • 对于分类数据,这与 'probability' 相同。

注意

'pdf' 不支持日期时间和持续时间数据。

'cdf'

vi=j=1icjN

  • 累积的密度函数估算值。

  • N(end) 小于或等于 1

示例: [N,edges] = histcounts(X,'Normalization','pdf') 使用概率密度函数估计值对数据分 bin。

输出参数

全部折叠

bin 计数,以行向量的形式返回。

bin 边界,以向量的形式返回。edges(1) 是第一个 bin 的左边界,edges(end) 是最后一个 bin 的右边界。

bin 索引,以大小与 X 相同的数组形式返回。bin 中的每个元素说明哪些编号的 bin 包含 X 中的对应元素。

bin 中的 0 值用于指明不属于任何 bin 的元素(例如 NaN 值)。

计数中包含的类别,以字符向量元胞向量形式返回。Categories 包含 C 中对应于 N 中每个计数的类别。

提示

  • histcounts 的行为与 discretize 函数的行为类似。使用 histcounts 查找每个 bin 中的元素数量。另一方面,使用 discretize 可查找每个元素所属的 bin(不计数)。

扩展功能

在 R2014b 中推出