numpy.quantile#

numpy.quantile(a, q, axis=None, out=None, overwrite_input=False, method='linear', keepdims=False, *, weights=None, interpolation=None)[原始碼]#

沿著指定軸計算資料的 q-th 分位數。

參數:
aarray_like of real numbers

輸入陣列或可轉換為陣列的物件。

qarray_like of float

要計算的分位數的機率或機率序列。值必須介於 0 和 1 之間(包含 0 和 1)。

axis{int, tuple of int, None}, optional

沿著計算分位數的軸或軸。預設值是沿著陣列的展平版本計算分位數。

outndarray, optional

放置結果的替代輸出陣列。它必須具有與預期輸出相同的形狀和緩衝區長度,但必要時會轉換(輸出的)類型。

overwrite_inputbool, optional

如果為 True,則允許中間計算修改輸入陣列 a,以節省記憶體。在這種情況下,此函數完成後輸入 a 的內容是未定義的。

methodstr, optional

此參數指定用於估計分位數的方法。有許多不同的方法,有些是 NumPy 特有的。建議的選項(編號如 [1] 中所示)為

  1. ‘inverted_cdf’

  2. ‘averaged_inverted_cdf’

  3. ‘closest_observation’

  4. ‘interpolated_inverted_cdf’

  5. ‘hazen’

  6. ‘weibull’

  7. ‘linear’ (預設)

  8. ‘median_unbiased’

  9. ‘normal_unbiased’

前三種方法是不連續的。為了與先前版本的 NumPy 向後相容,可以使用預設 ‘linear’ (7.) 選項的以下不連續變體

  • ‘lower’

  • ‘higher’

  • ‘midpoint’

  • ‘nearest’

請參閱「Notes」以瞭解詳細資訊。

在 1.22.0 版本中變更:此引數先前稱為「interpolation」,僅提供「linear」預設值和最後四個選項。

keepdimsbool, optional

如果設定為 True,則縮減的軸將保留在結果中,作為大小為 1 的維度。使用此選項,結果將針對原始陣列 a 正確廣播。

weightsarray_like, optional

a 中的值相關聯的權重陣列。a 中的每個值都根據其相關聯的權重對分位數做出貢獻。權重陣列可以是 1-D(在這種情況下,其長度必須是 a 沿給定軸的大小)或與 a 的形狀相同。如果 weights=None,則假定 a 中的所有資料都具有等於 1 的權重。只有 method="inverted_cdf" 支援權重。請參閱 Notes 以瞭解更多詳細資訊。

2.0.0 版本的新增功能。

interpolationstr, optional

已棄用的 method 關鍵字引數名稱。

自 1.22.0 版本起已棄用。

傳回值:
quantile純量或 ndarray

如果 q 是單一機率且 axis=None,則結果為純量。如果給定多個機率層級,則結果的第一個軸對應於分位數。其他軸是在縮減 a 後剩餘的軸。如果輸入包含整數或小於 float64 的浮點數,則輸出資料類型為 float64。否則,輸出資料類型與輸入的資料類型相同。如果指定了 out,則會改為傳回該陣列。

另請參閱

mean
percentile

等效於 quantile,但 q 的範圍為 [0, 100]。

median

等效於 quantile(..., 0.5)

nanquantile

Notes

給定來自底層分佈的樣本 aquantile 提供反向累積分布函數的非參數估計。

預設情況下,這是透過在 ya 的排序副本)中的相鄰元素之間進行內插來完成的

(1-g)*y[j] + g*y[j+1]

其中索引 j 和係數 gq * (n-1) 的整數和分數分量,而 n 是樣本中的元素數量。

這是 H&F [1] 的方程式 1 的特例。更一般而言,

  • j = (q*n + m - 1) // 1,且

  • g = (q*n + m - 1) % 1,

其中 m 可以根據幾種不同的慣例來定義。可以使用 method 參數選擇偏好的慣例

方法

H&F 中的編號

m

interpolated_inverted_cdf

4

0

hazen

5

1/2

weibull

6

q

linear (預設)

7

1 - q

median_unbiased

8

q/3 + 1/3

normal_unbiased

9

q/4 + 3/8

請注意,當公式的結果超出非負索引的允許範圍時,索引 jj + 1 會被裁剪到 0n - 1 的範圍。jg 公式中的 - 1 是為了說明 Python 的從 0 開始的索引。

上表僅包含 H&F 中機率 q 的連續函數(估計量 4-9)。NumPy 也提供來自 H&F 的三個不連續估計量(估計量 1-3),其中 j 的定義如上,m 的定義如下,而 g 是實值 index = q*n + m - 1j 的函數。

  1. inverted_cdfm = 0g = int(index - j > 0)

  2. averaged_inverted_cdfm = 0g = (1 + int(index - j > 0)) / 2

  3. closest_observationm = -1/2g = 1 - int((index == j) & (j%2 == 1))

為了與先前版本的 NumPy 向後相容,quantile 提供了四個額外的不連續估計量。與 method='linear' 類似,所有估計量都具有 m = 1 - q,因此 j = q*(n-1) // 1,但 g 的定義如下。

  • lowerg = 0

  • midpointg = 0.5

  • higherg = 1

  • nearestg = (q*(n-1) % 1) > 0.5

加權分位數: 更正式地說,累積分布函數 \(F(y)=P(Y \leq y)\) 在機率層級 \(q\) 且具有機率測度 \(P\) 的分位數定義為任何符合覆蓋條件的數字 \(x\)

\[P(Y < x) \leq q \quad\text{且}\quad P(Y \leq x) \geq q\]

其中隨機變數為 \(Y\sim P\)quantile 的結果(樣本分位數)提供了底層母體對應項的非參數估計,以未知的 \(F\) 表示,並給定長度為 n 的資料向量 a

當人們將 \(F\) 視為資料的經驗分布函數時,即 \(F(y) = \frac{1}{n} \sum_i 1_{a_i \leq y}\),就會出現上述的一些估計量。然後,不同的方法對應於符合上述覆蓋條件的 \(x\) 的不同選擇。遵循此方法的方法為 inverted_cdfaveraged_inverted_cdf

對於加權分位數,覆蓋條件仍然成立。經驗累積分布僅被其加權版本取代,即 \(P(Y \leq t) = \frac{1}{\sum_i w_i} \sum_i w_i 1_{x_i \leq t}\)。只有 method="inverted_cdf" 支援權重。

參考文獻

[1] (1,2)

R. J. Hyndman and Y. Fan, “Sample quantiles in statistical packages,” The American Statistician, 50(4), pp. 361-365, 1996

範例

>>> import numpy as np
>>> a = np.array([[10, 7, 4], [3, 2, 1]])
>>> a
array([[10,  7,  4],
       [ 3,  2,  1]])
>>> np.quantile(a, 0.5)
3.5
>>> np.quantile(a, 0.5, axis=0)
array([6.5, 4.5, 2.5])
>>> np.quantile(a, 0.5, axis=1)
array([7.,  2.])
>>> np.quantile(a, 0.5, axis=1, keepdims=True)
array([[7.],
       [2.]])
>>> m = np.quantile(a, 0.5, axis=0)
>>> out = np.zeros_like(m)
>>> np.quantile(a, 0.5, axis=0, out=out)
array([6.5, 4.5, 2.5])
>>> m
array([6.5, 4.5, 2.5])
>>> b = a.copy()
>>> np.quantile(b, 0.5, axis=1, overwrite_input=True)
array([7.,  2.])
>>> assert not np.all(a == b)

另請參閱 numpy.percentile 以視覺化大多數方法。