scipy.stats.

binned_statistic_2d#

scipy.stats.binned_statistic_2d(x, y, values, statistic='mean', bins=10, range=None, expand_binnumbers=False)[源代码][源代码]#

计算一个或多个数据集的二维分箱统计量。

这是直方图2d函数的一个泛化。直方图将空间划分为多个箱子,并返回每个箱子中点的数量。此函数允许计算每个箱子内值(或值集)的总和、均值、中位数或其他统计量。

参数:
x(N,) 数组类

沿第一个维度进行分箱的一组值。

y(N,) 数组类

沿第二维度进行分箱的一组值。

(N,) 数组或 (N,) 数组的列表

将计算统计量的数据。这必须与 x 具有相同的形状,或者是一个序列列表 - 每个序列与 x 具有相同的形状。如果 values 是这样一个列表,统计量将分别在每个序列上计算。

统计字符串或可调用对象,可选

要计算的统计量(默认是’mean’)。以下统计量可用:

  • ‘mean’ : 计算每个箱子内点的值的平均值。空箱子将用 NaN 表示。

  • ‘std’ : 计算每个箱内的标准差。这是隐式计算的,使用 ddof=0。

  • ‘median’ : 计算每个箱子内点的值的中位数。空箱子将用 NaN 表示。

  • ‘count’ : 计算每个箱子内的点数。这与无权重的直方图相同。values 数组未被引用。

  • ‘sum’ : 计算每个箱子内点的值的总和。这与加权直方图相同。

  • ‘min’ : 计算每个箱子内点的值的最小值。空箱子将用NaN表示。

  • ‘max’ : 计算每个区间内点的值的最大值。空区间将用NaN表示。

  • function : 一个用户定义的函数,它接受一个一维的数值数组,并输出一个单一的数值统计量。该函数将在每个箱子中的值上调用。空箱子将由 function([]) 表示,如果这返回错误,则为 NaN。

binsint 或 [int, int] 或 array_like 或 [array, array],可选

bin 规范:

  • 两个维度的箱数(nx = ny = bins),

  • 每个维度中的箱数(nx, ny = bins)

  • 两个维度(x_edge = y_edge = bins)的边界

  • 每个维度中的 bin 边缘(x_edge, y_edge = bins)。

如果指定了bin的边缘,bin的数量将是,(nx = len(x_edge)-1, ny = len(y_edge)-1)。

范围(2,2) 数组类型, 可选

每个维度上箱子的最左和最右边缘(如果未在 bins 参数中明确指定):[[xmin, xmax], [ymin, ymax]]。此范围之外的所有值将被视为异常值,不会计入直方图中。

expand_binnumbersbool, 可选

‘False’(默认):返回的 binnumber 是一个形状为 (N,) 的线性化箱索引数组。’True’:返回的 binnumber 被’解开’成一个形状为 (2,N) 的 ndarray,其中每一行给出相应维度中的箱号。参见返回的 binnumber 值,以及 示例 部分。

Added in version 0.17.0.

返回:
统计(nx, ny) ndarray

每个二维区间内所选统计量的值。

x_edge(nx + 1) ndarray

沿第一个维度的 bin 边缘。

y_edge(ny + 1) ndarray

沿第二个维度的边界。

binnumber(N,) 的整数数组或 (2,N) 的整数 ndarray

这将为 sample 中的每个元素分配一个整数,该整数表示此观测值所属的区间。表示方式取决于 expand_binnumbers 参数。详情请参见 Notes

注释

Binedges: 除了最后一个(最右边的)bin之外,所有bin都是半开的。换句话说,如果 bins[1, 2, 3, 4],那么第一个bin是 [1, 2)``(包括1,但不包括2),第二个是 ``[2, 3)。然而,最后一个bin是 [3, 4],它*包括*4。

binnumber: 这个返回的参数为 sample 中的每个元素分配一个整数,该整数表示它所属的区间。表示方式取决于 expand_binnumbers 参数。如果为 ‘False’(默认):返回的 binnumber 是一个形状为 (N,) 的数组,包含线性化的索引,将 sample 中的每个元素映射到其对应的区间(使用行优先排序)。请注意,返回的线性化区间索引用于一个在边界外添加了额外区间的数组,以捕获超出定义区间边界的值。如果为 ‘True’:返回的 binnumber 是一个形状为 (2,N) 的 ndarray,其中每行分别表示每个维度的区间放置。在每个维度中,区间编号 i 表示对应值位于 (D_edge[i-1], D_edge[i]) 之间,其中 ‘D’ 可以是 ‘x’ 或 ‘y’。

Added in version 0.11.0.

示例

>>> from scipy import stats

使用显式的分箱边界计算计数:

>>> x = [0.1, 0.1, 0.1, 0.6]
>>> y = [2.1, 2.6, 2.1, 2.1]
>>> binx = [0.0, 0.5, 1.0]
>>> biny = [2.0, 2.5, 3.0]
>>> ret = stats.binned_statistic_2d(x, y, None, 'count', bins=[binx, biny])
>>> ret.statistic
array([[2., 1.],
       [1., 0.]])

每个样本被放置的箱子由返回的 binnumber 参数给出。默认情况下,这些是线性化的箱子索引:

>>> ret.binnumber
array([5, 6, 5, 9])

使用 expand_binnumbers 参数,可以将 bin 索引扩展为每个维度的单独条目:

>>> ret = stats.binned_statistic_2d(x, y, None, 'count', bins=[binx, biny],
...                                 expand_binnumbers=True)
>>> ret.binnumber
array([[1, 1, 1, 2],
       [1, 2, 1, 1]])

这表明前三个元素属于 xbin 1,第四个属于 xbin 2;y 也是如此。