scipy.stats.

binned_statistic_2d#

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

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

这是 histogram2d 函数的推广。直方图将空间划分为箱子,并返回每个箱子中点的数量的计数。此函数允许计算每个箱子中值(或一组值)的总和、平均值、中位数或其他统计量。

参数:
x(N,) array_like

沿第一维分箱的值序列。

y(N,) array_like

沿第二维分箱的值序列。

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

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

statistic字符串或可调用对象,可选

要计算的统计量(默认为 ‘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],可选

箱子规格

  • 两个维度的箱子数量 (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) array_like,可选

沿每个维度的箱子的最左边和最右边的边缘(如果未在 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,) 整数数组或 (2,N) 整数 ndarray

这会为 sample 的每个元素分配一个整数,该整数表示此观测值所属的箱子。表示形式取决于 expand_binnumbers 参数。请参阅 Notes 以获取详细信息。

注释

箱子边缘:除了最后一个(最右边)的箱子外,所有箱子都是半开的。换句话说,如果 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 的箱子编号表示相应的值介于 (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 也一样。