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. and Kokoska, S. (2000). CRC Standard Probability and Statistics Tables and Formulae. Chapman & Hall: New York. 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  ])