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] 中所示)為
‘inverted_cdf’
‘averaged_inverted_cdf’
‘closest_observation’
‘interpolated_inverted_cdf’
‘hazen’
‘weibull’
‘linear’ (預設)
‘median_unbiased’
‘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
給定來自底層分佈的樣本 a,
quantile
提供反向累積分布函數的非參數估計。預設情況下,這是透過在
y
(a 的排序副本)中的相鄰元素之間進行內插來完成的(1-g)*y[j] + g*y[j+1]
其中索引
j
和係數g
是q * (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
請注意,當公式的結果超出非負索引的允許範圍時,索引
j
和j + 1
會被裁剪到0
到n - 1
的範圍。j
和g
公式中的- 1
是為了說明 Python 的從 0 開始的索引。上表僅包含 H&F 中機率 q 的連續函數(估計量 4-9)。NumPy 也提供來自 H&F 的三個不連續估計量(估計量 1-3),其中
j
的定義如上,m
的定義如下,而g
是實值index = q*n + m - 1
和j
的函數。inverted_cdf
:m = 0
且g = int(index - j > 0)
averaged_inverted_cdf
:m = 0
且g = (1 + int(index - j > 0)) / 2
closest_observation
:m = -1/2
且g = 1 - int((index == j) & (j%2 == 1))
為了與先前版本的 NumPy 向後相容,
quantile
提供了四個額外的不連續估計量。與method='linear'
類似,所有估計量都具有m = 1 - q
,因此j = q*(n-1) // 1
,但g
的定義如下。lower
:g = 0
midpoint
:g = 0.5
higher
:g = 1
nearest
:g = (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_cdf
和averaged_inverted_cdf
。對於加權分位數,覆蓋條件仍然成立。經驗累積分布僅被其加權版本取代,即 \(P(Y \leq t) = \frac{1}{\sum_i w_i} \sum_i w_i 1_{x_i \leq t}\)。只有
method="inverted_cdf"
支援權重。參考文獻
範例
>>> 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
以視覺化大多數方法。