scipy.stats.

变化#

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

计算变异系数。

变异系数是标准差除以均值。这个函数等价于:

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

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

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

参数:
aarray_like

输入数组。

int 或 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,被减少的轴将作为尺寸为1的维度保留在结果中。通过此选项,结果将正确地与输入数组进行广播。

返回:
变异ndarray

沿着请求轴计算出的变化。

注释

有几种边缘情况可以在不生成警告的情况下处理:

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

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

  • 如果输入的长度为零(可能是因为数组长度为零,或者所有输入值都是 nan 并且 nan_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  ])