scipy.stats.

binned_statistic_dd#

scipy.stats.binned_statistic_dd(sample, values, statistic='mean', bins=10, range=None, expand_binnumbers=False, binned_statistic_result=None)[源代码]#

计算一组数据的多维分箱统计量。

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

参数:
samplearray_like

要直方图的数据,作为长度为 D 的 N 个数组的序列传递,或作为 (N,D) 数组传递。

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

将在其上计算统计量的数据。这必须与 sample 的形状相同,或一个序列列表 - 每个序列的形状与 sample 相同。如果 values 是这样的列表,则将独立计算每个统计量。

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

要计算的统计量(默认为“mean”)。以下统计量可用

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

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

  • “count”:计算每个箱子内的点的数量。这与未加权的直方图相同。不引用 values 数组。

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

  • “std”:计算每个箱子内的标准差。这是使用 ddof=0 隐式计算的。如果给定箱子内的值的数量为 0 或 1,则该箱子的计算标准差值将为 0。

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

  • “max”:计算每个箱子内点的最大值。空箱子将用 NaN 表示。

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

bins序列或正整数,可选

箱子规范必须采用以下形式之一

  • 一个描述沿每个维度的箱子边缘的数组序列。

  • 每个维度的箱子数 (nx, ny, … = bins)。

  • 所有维度的箱子数 (nx = ny = … = bins)。

range序列,可选

如果未在 bins 中显式给出边缘,则使用的一系列较低和较高箱子边缘。默认为沿每个维度的最小值和最大值。

expand_binnumbers布尔值,可选

“False”(默认值):返回的 binnumber 是一个形状为 (N,) 的线性化箱子索引数组。“True”:返回的 binnumber 被“展开”为一个形状为 (D,N) 的 ndarray,其中每一行给出相应维度中的箱子编号。请参阅返回的 binnumber 值,以及 binned_statistic_2dExamples 部分。

binned_statistic_resultbinnedStatisticddResult

为了将箱子边缘和箱子编号与新值和/或不同的统计量重复使用,先前调用该函数的结果。要重复使用箱子编号,expand_binnumbers 必须设置为 False(默认值)

在 0.17.0 版本中添加。

返回:
statisticndarray,形状 (nx1, nx2, nx3,…)

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

bin_edgesndarray 列表

一个描述每个维度的 (nxi + 1) 箱子边缘的 D 个数组的列表。

binnumber(N,) 整数数组或 (D,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 是一个形状为 (D,N) 的 ndarray,其中每行分别指示每个维度的箱子位置。在每个维度中,i 的箱子编号表示每个维度“D”的对应值介于 (bin_edges[D][i-1], bin_edges[D][i]) 之间。

在 0.11.0 版本中添加。

示例

>>> import numpy as np
>>> from scipy import stats
>>> import matplotlib.pyplot as plt
>>> from mpl_toolkits.mplot3d import Axes3D

以 600 个 (x, y) 坐标的数组为例。 binned_statistic_dd 可以处理更高维度 D 的数组。但是需要一个维度为 D+1 的图。

>>> mu = np.array([0., 1.])
>>> sigma = np.array([[1., -0.5],[-0.5, 1.5]])
>>> multinormal = stats.multivariate_normal(mu, sigma)
>>> data = multinormal.rvs(size=600, random_state=235412)
>>> data.shape
(600, 2)

创建箱子并计算每个箱子中有多少个数组

>>> N = 60
>>> x = np.linspace(-3, 3, N)
>>> y = np.linspace(-3, 4, N)
>>> ret = stats.binned_statistic_dd(data, np.arange(600), bins=[x, y],
...                                 statistic='count')
>>> bincounts = ret.statistic

设置条形的体积和位置

>>> dx = x[1] - x[0]
>>> dy = y[1] - y[0]
>>> x, y = np.meshgrid(x[:-1]+dx/2, y[:-1]+dy/2)
>>> z = 0
>>> bincounts = bincounts.ravel()
>>> x = x.ravel()
>>> y = y.ravel()
>>> fig = plt.figure()
>>> ax = fig.add_subplot(111, projection='3d')
>>> with np.errstate(divide='ignore'):   # silence random axes3d warning
...     ax.bar3d(x, y, z, dx, dy, bincounts)

将箱子编号和箱子边缘与新值重复使用

>>> ret2 = stats.binned_statistic_dd(data, -np.arange(600),
...                                  binned_statistic_result=ret,
...                                  statistic='mean')
../../_images/scipy-stats-binned_statistic_dd-1.png