scipy.stats.

variation#

scipy.stats.variation(a, axis=0, nan_policy='propagate', ddof=0, *, keepdims=False)[source]#

计算变异系数。

变异系数是标准差除以平均值。此函数等效于

np.std(x, axis=axis, ddof=ddof) / np.mean(x)

ddof 的默认值为 0,但变异系数的许多定义使用无偏样本方差的平方根作为样本标准差,这对应于 ddof=1

该函数不取数据平均值的绝对值,因此如果平均值为负数,则返回值为负数。

参数::
aarray_like

输入数组。

axisint 或 None,默认值:0

如果为整数,则为计算统计量的输入的轴。输入的每个轴切片(例如,行)的统计量将出现在输出的相应元素中。如果为 None,则在计算统计量之前将展平输入。

nan_policy{‘propagate’, ‘omit’, ‘raise’}

定义如何处理输入 NaN。

  • propagate:如果在计算统计量的轴切片(例如,行)中存在 NaN,则输出的相应条目将为 NaN。

  • omit:执行计算时将忽略 NaN。如果在计算统计量的轴切片中剩余数据不足,则输出的相应条目将为 NaN。

  • raise:如果存在 NaN,则将引发 ValueError

ddofint,可选

给出计算标准差时使用的“自由度增量”。在标准差计算中使用的除数是 N - ddof,其中 N 是元素的数量。 ddof 必须小于 N;如果不是,则结果将是 naninf,具体取决于 N 和数组中的值。默认情况下,为了向后兼容,ddof 为零,但建议使用 ddof=1 来确保样本标准差计算为无偏样本方差的平方根。

keepdimsbool,默认值:False

如果将其设置为 True,则将被缩减的轴保留在结果中,作为大小为一的维度。使用此选项,结果将针对输入数组正确广播。

返回值::
variationndarray

沿请求轴计算的变异系数。

注释

有一些边缘情况在不生成警告的情况下进行处理

  • 如果平均值和标准差均为零,则返回 nan

  • 如果平均值为零且标准差非零,则返回 inf

  • 如果输入的长度为零(可能是因为数组的长度为零,或者所有输入值均为 nannan_policy'omit'),则返回 nan

  • 如果输入包含 inf,则返回 nan

从 SciPy 1.9 开始,np.matrix 输入(不建议在新代码中使用)将在执行计算之前转换为 np.ndarray。在这种情况下,输出将是标量或形状适当的 np.ndarray,而不是 2D np.matrix。类似地,虽然掩盖了掩盖数组的元素,但输出将是标量或 np.ndarray,而不是掩盖数组,其中 mask=False

参考资料

[1]

Zwillinger,D. 和 Kokoska,S. (2000)。CRC 标准概率和统计表和公式。Chapman & Hall:纽约。2000 年。

示例

>>> import numpy as np
>>> from scipy.stats import variation
>>> variation([1, 2, 3, 4, 5], ddof=1)
0.5270462766947299

计算包含一些 nan 值的数组的给定维度的变异系数

>>> x = np.array([[  10.0, np.nan, 11.0, 19.0, 23.0, 29.0, 98.0],
...               [  29.0,   30.0, 32.0, 33.0, 35.0, 56.0, 57.0],
...               [np.nan, np.nan, 12.0, 13.0, 16.0, 16.0, 17.0]])
>>> variation(x, axis=1, ddof=1, nan_policy='omit')
array([1.05109361, 0.31428986, 0.146483  ])