binned_statistic_dd#
- scipy.stats.binned_statistic_dd(sample, values, statistic='mean', bins=10, range=None, expand_binnumbers=False, binned_statistic_result=None)[source]#
计算数据集的多维分箱统计。
这是 histogramdd 函数的推广。直方图将空间划分为箱,并返回每个箱中点的数量的计数。此函数允许计算每个箱中值的总和、平均值、中值或其他统计量。
- 参数:
- sample类数组
要进行直方图的数据,以长度为 D 的 N 个数组的序列或 (N,D) 数组的形式传递。
- values(N,) 类数组 或 (N,) 类数组的列表
将计算统计量的数据。它必须与 sample 的形状相同,或者是一个序列列表 - 每个序列的形状与 sample 相同。如果 values 是这样的列表,则将独立计算每个列表的统计量。
- statistic字符串或可调用对象,可选
要计算的统计量(默认为“mean”)。以下统计量可用
‘mean’ : 计算每个箱内点的平均值。空箱将表示为 NaN。
‘median’ : 计算每个箱内点的中值。空箱将表示为 NaN。
‘count’ : 计算每个箱内点的计数。这与未加权直方图相同。values 数组未被引用。
‘sum’ : 计算每个箱内点的总和。这与加权直方图相同。
‘std’ : 计算每个箱内的标准差。这是用 ddof=0 隐式计算的。如果给定箱中的值的数量为 0 或 1,则计算出的标准差值对于该箱将为 0。
‘min’ : 计算每个箱内点的最小值。空箱将表示为 NaN。
‘max’ : 计算每个箱内点的最大值。空箱将表示为 NaN。
function : 一个用户定义的函数,它接受一个一维的值数组,并输出一个单一的数值统计量。将在每个箱中的值上调用此函数。空箱将表示为 function([]),如果这返回一个错误,则表示为 NaN。
- bins序列或正整数,可选
bin 规范必须采用以下形式之一
描述每个维度上的 bin 边缘的数组序列。
每个维度的 bin 数量(nx, ny, … = bins)。
所有维度的 bin 数量(nx = ny = … = bins)。
- range序列,可选
如果没有在 bins 中显式给出边缘,则使用下限和上限 bin 边缘的序列。默认为每个维度上的最小值和最大值。
- expand_binnumbersbool,可选
“False”(默认):返回的 binnumber 是一个形状为 (N,) 的线性化 bin 索引数组。“True”:返回的 binnumber 被“展开”为一个形状为 (D,N) 的 ndarray,其中每一行给出相应维度中的 bin 编号。请参阅返回的 binnumber 值,以及
binned_statistic_2d
的 示例 部分。- binned_statistic_resultbinnedStatisticddResult
为了使用新值和/或不同统计量来重用 bin 边缘和 bin 编号,先前调用该函数的结果。要重用 bin 编号,expand_binnumbers 必须设置为 False(默认值)
0.17.0 版本中新增。
- 返回:
- statisticndarray, shape(nx1, nx2, nx3,…)
每个二维 bin 中所选统计量的值。
- bin_edgesndarray 列表
描述每个维度的 (nxi + 1) bin 边缘的 D 个数组的列表。
- binnumber(N,) 整数数组或 (D,N) 整数ndarray
这会将 sample 的每个元素分配一个整数,该整数表示此观察值落入的 bin。表示形式取决于 expand_binnumbers 参数。有关详细信息,请参阅 Notes。
说明
Binedges:除了最后一个(最右边的)bin 之外,每个维度中的 bin 都是半开的。换句话说,如果 bins 是
[1, 2, 3, 4]
,那么第一个 bin 是[1, 2)
(包括 1,但不包括 2),第二个是[2, 3)
。但是,最后一个 bin 是[3, 4]
,其中包括 4。binnumber:这个返回的参数将 sample 的每个元素分配一个整数,该整数表示它所属的 bin。表示形式取决于 expand_binnumbers 参数。如果为“False”(默认值):返回的 binnumber 是一个形状为 (N,) 的数组,其中包含线性化索引,将 sample 的每个元素映射到其对应的 bin(使用行优先排序)。如果为“True”:返回的 binnumber 是一个形状为 (D,N) 的 ndarray,其中每一行分别指示每个维度的 bin 位置。在每个维度中,bin 编号为 i 表示相应的值位于 (bin_edges[D][i-1], bin_edges[D][i]) 之间,对于每个维度“D”。
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)
创建 bin 并计算每个 bin 中有多少个数组
>>> 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)
使用新值重用 bin 编号和 bin 边缘
>>> ret2 = stats.binned_statistic_dd(data, -np.arange(600), ... binned_statistic_result=ret, ... statistic='mean')