scipy.stats.

binned_statistic_2d#

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

针对一组或多组数据计算二维分类统计。

这是 histogram2d 函数的泛化。直方图将空间划分为 bin,并返回每个 bin 中点的数量。此函数允许计算每个 bin 内的值(或值集)的和、平均值、中位数或其他统计信息。

参数:
x(N,) array_like

一个将沿着第一维度进行分类的值序列。

y(N,) array_like

一个将沿着第二维度进行分类的值序列。

values(N,) array_like 或 (N,) array_like 列表

将计算统计数据的数据。这必须与x的形状相同,或者是由一系列序列组成的列表——每个序列的形状与x的形状相同。如果values为这样的列表,则将独立计算每个统计数据。

statisticstring 或可调用对象,可选

要计算的统计数据(默认为“mean”)。提供以下统计数据

  • ‘mean’ :计算每个箱区域内点的值均值。空箱区域将通过 NaN 表示。

  • ‘std’ :计算每个箱区域内的标准差。这是在 ddof=0 下隐式计算出来的。

  • ‘median’ :计算每个箱区域内点值的中值。空箱区域将通过 NaN 表示。

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

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

  • ‘min’ :计算每个箱区域内点值的最小值。空箱区域将通过 NaN 表示。

  • ‘max’ :计算每个箱区域内点的最大值。空箱区域将通过 NaN 表示。

  • function :用户定义的函数,它使用一个值 1D 数组并输出一个单独的数字统计数据。此函数将在每个箱区域中的值上被调用。空箱区域将通过 function([]) 表示,或如果这返回错误,则通过 NaN 表示。

binsint 或 [int, int] 或类数组对象或 [array, array],可选

箱形规格

  • 两个尺寸的箱形数量(nx = ny = bins),

  • 每个尺寸中的箱形数量(nx, ny = bins),

  • 两个尺寸的箱形边缘(x_edge = y_edge = bins),

  • 每个尺寸中的箱形边缘(x_edge, y_edge = bins)。

如果指定了箱形边缘,则箱形数量将为(nx = len(x_edge)-1, ny = len(y_edge)-1)。

range(2,2) 类数组对象,可选

每个尺寸上箱形的左右边缘(如果未在bins参数中明确指定):[[xmin,xmax],[ymin,ymax]]。此范围之外的所有值均被视为异常值,并且不会在直方图中计算。

expand_binnumbersbool,可选

‘False’(默认):返回的binnumber是一个形状为 (N,) 的数组,用于线性化箱形索引。‘True’:返回的binnumber已被“展开”成形状为 (2,N) 的 ndarray,其中每行都给出了相应尺寸中的箱形编号。请参阅binnumber的返回值,以及Examples小节。

在版本 0.17.0 中添加。

返回:
statistic(nx, ny) ndarray

每个二维箱中所选统计量的值。

x_edge(nx + 1) ndarray

沿着第一维的箱边缘。

y_edge(ny + 1) ndarray

沿着第二维的箱边缘。

binnumber(N,) array 的 int 或 (2,N) ndarray 的 int

这为 sample 的每个元素指定一个整数,代表这个观察所在的箱。表示取决于 expand_binnumbers 参数。有关详细信息,请参阅 Notes

说明

Bin 边缘:除最后一个(最右边的)箱外,所有箱都是半开。换句话说,如果 bins[1, 2, 3, 4],则第一个箱为 [1, 2)(包含 1,但不包含 2),第二个为 [2, 3)。然而,最后一个箱为 [3, 4],其中包含 4。

binnumber:此返回参数为 sample 的每个元素指定一个整数,代表它所属的箱。表示取决于 expand_binnumbers 参数。如果为“False”(默认):返回的 binnumber 为形状为 (N,) 的线性化索引数组,将 sample 的每个元素映射到其对应的箱(使用行优先顺序)。请注意,返回的线性化箱索引用于在外部箱边缘有额外箱的数组,以捕获超出定义的箱边界的值。如果为“True”,则返回的 binnumber 为形状为 (2,N) 的 ndarray,其中每一行分别表示每个维度中的箱放置。在每个维度中,i 的 binnumber 意味着对应值介于 (D_edge[i-1], D_edge[i]) 之间,其中“D”为“x”或“y”。

在版本 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 参数将垃圾箱索引展开为每个维度的单独条目

>>> 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。