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。

示例

[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) 使用一个或多个名称-值参量指定其他参量。例如,您可以指定 '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 边界,指定为向量。第一个向量元素指定第一个 bin 的左边界。最后一个元素指定最后一个 bin 的右边界。仅最后一个 bin 包含右边界。

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

计数中包含的类别,指定为字符串向量、字符向量的元胞向量、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 的宽度,指定为正标量。如果指定 BinWidth,则 histcounts 最多可以使用 65,536(即 216)个 bin。如果指定的 bin 宽度需要多个 bin,则 histcounts 使用与最大 bin 数对应的较大的 bin 宽度。

  • 对于 datetimeduration 数据,BinWidth 可以是标量持续时间或日历持续时间。

  • 如果用 BinMethodNumBinsBinEdges 指定 BinWidth,则 histcounts 仅采用最后一个参数。

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

示例: histcounts(X,'BinWidth',5) 使用宽度为 5 的 bin。

bin 的边界,指定为数值向量。第一个元素指定第一个 bin 的左边界。最后一个元素指定最后一个 bin 的右边界。仅最后一个 bin 包含右边界。

如果不指定 bin 边界,则 histcounts 自动确定 bin 边界。

  • 如果用 BinMethodBinWidthNumBinsBinLimits 指定 BinEdges,则 histcounts 只采用 BinEdges 且必须最后指定 BinEdges

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

bin 范围,指定为二元素向量 [bmin,bmax]。第一个元素指示第一个 bin 边界。第二个元素指示最后一个 bin 边界。

此选项仅使用在 bin 范围 X>=bmin & X<=bmax(包含这两个边界值)内的数据进行计算。

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

示例: 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)

'integers'

整数规则对整数数据有用,因为它为每个整数创建一个 bin。它使用 bin 宽度 1 并将 bin 边界放在整数的中间。

为避免无意间创建太多 bin,可以使用该规则创建 65536 (216) 个 bin 的限制。如果数据范围大于 65536,则整数规则改用更宽的 bin。

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

'sturges'

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

'sqrt'

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

histcounts 稍微调整 bin 的数目,使 bin 边界落在“合适”的数字上,而不是机械遵循这些精确的公式。

对于 datetimeduration 数据,将 bin 宽度指定为下列时间单位之一。

描述数据类型
"second"

每个 bin 是 1 秒。

datetimeduration
"minute"

每个 bin 是 1 分钟。

datetimeduration
"hour"

每个 bin 是 1 小时。

datetimeduration
"day"

每个 bin 表示 1 个日历日。此值将夏令时变化考虑在内。

datetimeduration
"week"每个 bin 是 1 个日历周。仅限 datetime
"month"每个 bin 是 1 个日历月。仅限 datetime
"quarter"每个 bin 是 1 个日历季度。仅限 datetime
"year"

每个 bin 表示 1 个日历年。此值将闰日考虑在内。

datetimeduration
"decade"每个 bin 是 1 个十年(10 个日历年)。仅限 datetime
"century"每个 bin 是 1 个世纪(100 个日历年)。仅限 datetime

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

  • 如果指定 BinLimitsNumBinsBinEdgesBinWidth,则 BinMethod 设置为 'manual'

  • 如果用 BinWidthNumBinsBinEdges 指定 BinMethod,则 histcounts 仅采用最后一个参数。

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

示例: histcounts(X,'BinMethod','integers') 将 bin 以整数为中心放置。

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

  • vi 是 bin 的值。

  • ci 是 bin 中的元素数目。

  • wi 是 bin 的宽度。

  • N 是输入数据中的元素数目。此值可以大于分 bin 数据元素数,前提是数据中包含缺失值,例如 NaN,或者某些数据位于 bin 范围外。

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

vi=ci

  • 观测值的计数或频率。

  • 对于分类数据,bin 值之和最多为 numel(X)sum(ismember(X(:),Categories))。仅当某些输入数据不在 bin 中时,bin 值之和才会小于此值。

'probability'

vi=ciN

  • 相对概率。

  • 每个 bin 中的元素数与输入数据中的总元素数之比最大为 1。

'percentage'

vi=100*ciN

  • 相对百分比。

  • 'percentage' 不支持分类数据。

  • 每个 bin 中的元素百分比最多为 100。

'countdensity'

vi=ciwi

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

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

  • 'countdensity' 不支持 datetimeduration 数据。

  • bin 面积的总和最多为 numel(X)

'cumcount'

vi=j=1icj

  • 累积计数,或每个 bin 及前面所有 bin 中累积的观测值数量。

  • 对于分类数据,N(end) 最多为 numel(X)sum(ismember(X(:),Categories))

'pdf'

vi=ciNwi

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

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

  • 'pdf' 不支持 datetimeduration 数据。

  • bin 面积的总和最多为 1

'cdf'

vi=j=1icjN

  • 累积分布函数估算值。

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

  • N(end) 最多为 1。

示例: histcounts(X,'Normalization','pdf') 使用概率密度函数估计值对数据进行分 bin。

bin 数量,指定为正整数。如果不指定 NumBins,则 histcounts 基于输入数据自动计算将使用多少个 bin。

  • 如果用 BinMethodBinWidthBinEdges 指定 NumBins,则 histcounts 仅采用最后一个参数。

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

输出参量

全部折叠

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

bin 边界,以向量形式返回。第一个元素是第一个 bin 的左边界。最后一个元素是最后一个 bin 的右边界。

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

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

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

提示

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

扩展功能

版本历史记录

在 R2014b 中推出

全部展开