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

histcounts2

二元直方图 bin 计数

说明

示例

[N,Xedges,Yedges] = histcounts2(X,Y)XY 中的值划分为多个二维 bin,并返回 bin 计数以及每个维度的 bin 边界。histcounts2 函数使用自动 bin 划分算法,然后返回均匀 bin,这些 bin 可涵盖 XY 中值的范围并显示分布的基本形状。

示例

[N,Xedges,Yedges] = histcounts2(X,Y,nbins) 指定要在每个维度中使用的 bin 数量。

示例

[N,Xedges,Yedges] = histcounts2(X,Y,Xedges,Yedges) 按照 XedgesYedges 指定的 bin 边界,将 XY 划分为多个 bin。

N(i,j) 对符合 Xedges(i)X(k) < Xedges(i+1)Yedges(j)Y(k) < Yedges(j+1) 条件的值 [X(k),Y(k)] 进行计数。每个维度中的最后 bin 还包含最后一个(外部)边界。例如,如果 Xedges(end-1)X(k)Xedges(end)Yedges(i)Y(k) < Yedges(i+1),则 [X(k),Y(k)] 属于最后一行中的第 i 个 bin。

示例

[N,Xedges,Yedges] = histcounts2(___,Name,Value) 还可使用一个或多个 Name,Value 对组参数(采用上述语法中有任意输入参数)指定的其他选项。例如,可以指定 'BinWidth' 和一个二元素向量来调整每个维度中 bin 的宽度。

示例

[N,Xedges,Yedges,binX,binY] = histcounts2(___) 还使用任何上述语法返回索引数组 binXbinYbinXbinY 数组的大小与 XY 相同,其元素是 XY 中对应元素的 bin 索引。第 (i,j) 个 bin 中的元素数量等于 nnz(binX==i & binY==j);若 Normalization'count',则它与 N(i,j) 相同。

示例

全部折叠

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

x = randn(100,1);
y = randn(100,1);
[N,Xedges,Yedges] = histcounts2(x,y)
N = 7×6

     0     0     0     2     0     0
     1     2    10     4     0     0
     1     4     9     9     5     0
     1     4    10    11     5     1
     1     4     6     3     1     1
     0     0     1     2     0     0
     0     0     1     0     1     0

Xedges = 1×8

    -3    -2    -1     0     1     2     3     4

Yedges = 1×7

    -3    -2    -1     0     1     2     3

将 10 个数字对组分布到 12 个 bin 中。在 x 维度指定 3 个 bin,在 y 维度指定 4 个 bin。

x = [1 1 2 3 2 2 1 1 2 3];
y = [5 6 3 8 9 1 2 7 5 1];
nbins = [3 4];
[N,Xedges,Yedges] = histcounts2(x,y,nbins)
N = 3×4

     1     0     2     1
     1     1     1     1
     1     0     0     1

Xedges = 1×4

    0.6000    1.4000    2.2000    3.0000

Yedges = 1×5

         0    2.3000    4.6000    6.9000    9.2000

将 1,000 个随机数对组分布到多个 bin 内。使用两个向量(分别针对 x 和 y 维度)定义 bin 边界。每个向量中的第一个元素指定第一个 bin 的第一个边界,最后一个元素指定最后一个 bin 的最后一个边界。

x = randn(1000,1);
y = randn(1000,1);
Xedges = -5:5;
Yedges = [-5 -4 -2 -1 -0.5 0 0.5 1 2 4 5];
N = histcounts2(x,y,Xedges,Yedges)
N = 10×10

     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     1     1     1     0     0     0
     0     0     5     5     3     5     1     2     0     0
     0     2    19    23    29    25    26    20     5     0
     0    10    36    51    59    71    54    46    10     0
     0     7    43    46    79    64    60    46     9     0
     0     3    12    18    21    23    19     9     6     0
     0     0     5     3     2     8     2     2     0     0
     0     0     0     1     1     1     0     0     0     0
     0     0     0     0     0     0     0     0     0     0

将 1,000 个随机数对组分布到多个 bin 内。将 Normalization 指定为 'probability' 以对 bin 计数进行归一化处理,从而 sum(N(:))1。即,每个 bin 计数代表观测值属于该 bin 的可能性。

x = randn(1000,1);
y = randn(1000,1);
[N,Xedges,Yedges] = histcounts2(x,y,6,'Normalization','probability')
N = 6×6

         0         0    0.0020    0.0020         0         0
         0    0.0110    0.0320    0.0260    0.0070    0.0010
    0.0010    0.0260    0.1410    0.1750    0.0430    0.0060
         0    0.0360    0.1620    0.1940    0.0370    0.0040
         0    0.0040    0.0300    0.0370    0.0100    0.0010
         0    0.0030    0.0040    0.0040    0.0010         0

Xedges = 1×7

   -4.0000   -2.7000   -1.4000   -0.1000    1.2000    2.5000    3.8000

Yedges = 1×7

   -4.0000   -2.7000   -1.4000   -0.1000    1.2000    2.5000    3.8000

将介于 -10 和 10 之间的 1000 个随机整数对组分布到多个 bin 内,并将 BinMethod 指定为 'integers' 以使用以整数为中心的单位宽度 bin。指定 histcounts2 的五个输出以返回表示数据 bin 位置的向量。

x = randi([-10,10],1000,1);
y = randi([-10,10],1000,1);
[N,Xedges,Yedges,binX,binY] = histcounts2(x,y,'BinMethod','integers');

确定值 (x(3),y(3)) 属于哪个 bin。

[x(3),y(3)]
ans = 1×2

    -8    10

bin = [binX(3) binY(3)]
bin = 1×2

     3    21

输入参数

全部折叠

要分布到各 bin 的数据,指定为向量、矩阵或多维数组的单独参数。XY 的大小必须相同。

XY 中的对应元素指定二维数据点 [X(k),Y(k)] 的 x 和 y 坐标。XY 的数据类型可以不同。

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

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

每个维度中的 bin 数量,指定为一个正整数标量或由正整数组成的二元素向量。如果不指定 nbins,则 histcounts2 自动基于 XY 中的值计算要使用多少个 bin:

  • 如果 nbins 是标量,则 histcounts2 在每个维度中使用该标量所指定的 bin 数。

  • 如果 nbins 是向量,则 nbins(1) 指定 x 维度的 bin 数,nbins(2) 指定 y 维度的 bin 数。

示例: [N,Xedges,Yedges] = histcounts2(X,Y,[15 20])x 维度使用 15 个 bin,在 y 维度使用 20 个 bin。

x 维度中的 bin 边界,指定为向量。Xedges(1) 是 x 维度的第一个 bin 的第一个边界,Xedges(end) 是最后一个 bin 的外边界。

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

y 维度中的 bin 边界,指定为向量。Yedges(1) 是 y 维度的第一个 bin 的第一个边界,Yedges(end) 是最后一个 bin 的外边界。

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

名称-值对组参数

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

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

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

说明
'auto'

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

'scott'

如果数据接近联合正态分布,则 Scott 规则最佳。该规则也适用于大多数的其他分布。它使用 bin 大小 [3.5*std(X(:))*numel(X)^(-1/4), 3.5*std(Y(:))*numel(Y)^(-1/4)]

'fd'

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

'integers'

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

为避免无意间创建太多 bin,可以使用此规则创建 1024 (210) 个 bin 的限制。如果任一维度的数据范围大于 1024,则整数规则改用更宽的 bin。

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

示例: [N,Xedges,Yedges] = histcounts2(X,Y,'BinMethod','integers') 使用以整数为中心的二维 bin。

每个维度中的 bin 宽度,指定为由正整数组成的二元素向量 [xWidth yWidth]

如果指定 BinWidth,则 histcounts2 可以沿每个维度使用最多 1024 (210) 个 bin。如果指定的 bin 宽度需要多个 bin,则 histcounts2 使用与最大 bin 数对应的较大的 bin 宽度。

示例: [N,Xedges,Yedges] = histcounts2(X,Y,'BinWidth',[5 10])x 维度使用的 bin 的大小为 5,在 y 维度使用的 bin 的大小为 10

x 维度的 bin 范围,指定为二元素向量 [xbmin,xbmax]。该向量表示 x 维度中的第一个和最后一个 bin 边界。

此选项只对在 bin 范围 X>=xbmin & X<=xbmax(包含这两个边界值)内的数据进行 bin 划分。

y 维度的 bin 范围,指定为二元素向量 [ybmin,ybmax]。该向量表示 y 维度中的第一个和最后一个 bin 边界。

此选项只对在 bin 范围 Y>=ybmin & Y<=ybmax(包含这两个边界值)内的数据进行 bin 划分。

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

  • vi 是 bin 的值。

  • ci 是 bin 中的元素数目。

  • Ai=wxiwyi 是每个 bin 的面积,使用 bin 宽度 x 和 y 计算得出。

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

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

vi=ci

  • 观测值的计数或频率。

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

'countdensity'

vi=ciAi

  • 按 bin 的面积进行换算的计数或频率。

  • bin 的体积(N 值 * bin 的面积)之和等于 numel(X)numel(Y)

'cumcount'

vi=j=1icj

  • 累积计数。每个 bin 的值等于 x 和 y 维度中每个 bin 及以前所有 bin 中的观测值的累积数量。

  • N(end,end) 小于或等于 numel(X)numel(Y)

'probability'

vi=ciN

  • 相对概率。

  • sum(N(:)) 小于或等于 1

'pdf'

vi=ciNAi

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

  • bin 的体积(N 值 * bin 的面积)之和小于或等于 1

'cdf'

vi=j=1icjN

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

  • N(end,end) 小于或等于 1

示例: [N,Xedges,Yedges] = histcounts2(X,Y,'Normalization','pdf') 使用 XY 的概率密度函数估计值对数据进行 bin 划分。

输出参数

全部折叠

bin 计数,以数值数组形式返回。

对于 N 中的不同编号 bin,以及其相对于 x 和 y 轴的方向,bin 包含模式如下所示:

例如,bin (1,1) 包括位于每个维度中第一个边界上的值,右下角的最后一个 bin 包括位于其任何边界上的值。

x 维度中的 bin 边界,以向量形式返回。Xedges(1) 是 x 维度的第一个 bin 边界,Xedges(end) 是最后一个 bin 边界。

y 维度中的 bin 边界,以向量形式返回。Yedges(1) 是 y 维度的第一个 bin 边界,Yedges(end) 是最后一个 bin 边界。

x 维度中的 bin 索引,以数值数组形式返回,数组大小与 X 相同。binXbinY 中的对应元素说明哪个编号的 bin 包含 XY 中的对应值。binXbinY 中的 0 值表示元素不属于任何 bin(例如 NaN 值)。

例如,binX(1)binY(1) 描述值 [X(1),Y(1)] 的 bin 位置。

y 维度中的 bin 索引,以数值数组形式返回,数组大小与 Y 相同。binXbinY 中的对应元素说明哪个编号的 bin 包含 XY 中的对应值。binXbinY 中的 0 值表示元素不属于任何 bin(例如 NaN 值)。

例如,binX(1)binY(1) 描述值 [X(1),Y(1)] 的 bin 位置。

扩展功能

在 R2015b 中推出