Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

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
     no      no      yes      yes      yes      no      no      no      no      undecided      undecided      yes      no      no      no      yes      no      yes      no      yes      no      no      no      yes      yes      yes      yes 

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

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

    11    14     2

Categories = 1x3 cell
    {'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

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

示例: h = histcounts(C,["Large","Small"]) 只对类别 LargeSmall 中的分类数据进行计数。

示例: h = histcounts(C,"Y" + wildcardPattern) 对名称以字母 Y 开头的所有类别中的分类数据进行计数。

数据类型: string | cell | pattern | categorical

名称-值参数

将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参数名称,Value 是对应的值。名称-值参数必须出现在其他参数之后,但参数对组的顺序无关紧要。

在 R2021a 之前,使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: [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 的边界,指定为数值向量。第一个向量元素指定第一个 bin 的左边界。最后一个元素指定最后一个 bin 的右边界。如果不指定 bin 边界,则 histcounts 自动确定 bin 边界的位置。

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

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

归一化类型,指定为此表中的一个值。对于每个 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 数量,指定为正整数。如果不指定 NumBins,则 histcounts 基于输入数据自动计算将使用多少个 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 中推出

全部展开