binned_statistic_dd#
- scipy.stats.binned_statistic_dd(sample, values, statistic='mean', bins=10, range=None, expand_binnumbers=False, binned_statistic_result=None)[源代码][源代码]#
计算一组数据的多维分箱统计量。
这是直方图函数的一个泛化。直方图将空间划分为多个区间,并返回每个区间内点的数量。此函数允许计算每个区间内值的总和、均值、中位数或其他统计量。
- 参数:
- 示例array_like
传递给直方图的数据可以是长度为 D 的 N 个数组的序列,或者是 (N,D) 数组。
- 值(N,) 数组或 (N,) 数组的列表
统计量将基于的数据。这必须与 sample 具有相同的形状,或者是一个序列列表 - 每个序列与 sample 具有相同的形状。如果 values 是这样一个列表,统计量将独立地对每个序列进行计算。
- 统计字符串或可调用对象,可选
要计算的统计量(默认是’mean’)。以下统计量可用:
‘mean’ : 计算每个箱子内点的值的平均值。空箱子将用 NaN 表示。
‘median’ : 计算每个箱子内点的值的中位数。空箱子将用 NaN 表示。
‘count’ : 计算每个箱子内的点数。这与无权重的直方图相同。values 数组未被引用。
‘sum’ : 计算每个箱子内点的值的总和。这与加权直方图相同。
‘std’ : 计算每个箱内的标准差。这是隐式计算的,使用 ddof=0。如果给定箱内的值的数量为 0 或 1,则该箱计算的标准差值将为 0。
‘min’ : 计算每个箱子内点的值的最小值。空箱子将用NaN表示。
‘max’ : 计算每个区间内点的值的最大值。空区间将用NaN表示。
function : 一个用户定义的函数,它接受一个一维的数值数组,并输出一个单一的数值统计量。该函数将在每个箱子中的值上调用。空箱子将由 function([]) 表示,如果这返回错误,则为 NaN。
- bins序列或正整数,可选
bin 规范必须是以下形式之一:
描述每个维度上箱边的数组序列。
每个维度的箱数(nx, ny, … = bins)。
所有维度的箱数(nx = ny = … = bins)。
- 范围序列,可选
如果 bins 中没有明确给出边缘,则使用一系列下限和上限边缘。默认值为每个维度上的最小值和最大值。
- expand_binnumbersbool, 可选
‘False’(默认):返回的 binnumber 是一个形状为 (N,) 的线性化箱索引数组。’True’:返回的 binnumber 被’解开’成一个形状为 (D,N) 的 ndarray,其中每一行给出相应维度中的箱号。参见返回的 binnumber 值,以及
binned_statistic_2d
的 示例 部分。- binned_statistic_resultbinnedStatisticddResult
为了重用箱边缘和箱编号与新值和/或不同的统计数据,对函数的前一次调用的结果。要重用箱编号,expand_binnumbers 必须设置为 False(默认值)
Added in version 0.17.0.
- 返回:
- 统计ndarray, 形状(nx1, nx2, nx3,…)
每个二维区间内所选统计量的值。
- bin_edgesndarrays 列表
描述每个维度 (nxi + 1) 个箱边的 D 数组列表。
- binnumber(N,) 的整数数组或 (D,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 是一个形状为 (D,N) 的 ndarray,其中每一行分别表示每个维度的区间位置。在每个维度中,区间编号 i 表示对应值位于 (bin_edges[D][i-1], bin_edges[D][i]) 之间,对于每个维度 ‘D’。
Added in version 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')