numpy.nanpercentile#
- numpy.nanpercentile(a, q, axis=None, out=None, overwrite_input=False, method='linear', keepdims=<no value>, *, weights=None, interpolation=None)[原始碼]#
沿指定軸計算資料的第 q 個百分位數,同時忽略 nan 值。
傳回陣列元素的第 q 個百分位數。
- 參數:
- aarray_like
輸入陣列或可轉換為陣列的物件,包含要忽略的 nan 值。
- qfloat 的 array_like
要計算的百分位數或百分位數序列,必須介於 0 到 100 之間(包含 0 和 100)。
- axis{int, int 元組, None},可選
計算百分位數的軸或軸。預設值是沿陣列的扁平化版本計算百分位數。
- outndarray,可選
要在其中放置結果的替代輸出陣列。它必須具有與預期輸出相同的形狀和緩衝區長度,但必要時將轉換(輸出的)類型。
- overwrite_inputbool,可選
如果為 True,則允許中間計算修改輸入陣列 a,以節省記憶體。在這種情況下,此函數完成後輸入 a 的內容是未定義的。
- methodstr,可選
此參數指定用於估計百分位數的方法。 有許多不同的方法,其中一些是 NumPy 獨有的。 有關說明,請參閱註釋。 依其 R 類型排序的選項,如 H&F 論文 [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’
在 1.22.0 版本中變更:此引數先前稱為 “interpolation”,僅提供 “linear” 預設值和最後四個選項。
- keepdimsbool,可選
如果設定為 True,則縮減的軸將保留在結果中,作為大小為 1 的維度。 使用此選項,結果將針對原始陣列 a 正確廣播。
如果這不是預設值,它將(在空陣列的特殊情況下)傳遞到基礎陣列的
mean
函數。 如果陣列是子類別,且mean
沒有 kwarg keepdims,則會引發 RuntimeError。- weightsarray_like,可選
與 a 中的值相關聯的權重陣列。 a 中的每個值都根據其關聯的權重貢獻百分位數。 權重陣列可以是 1 維的(在這種情況下,其長度必須是 a 沿給定軸的大小)或與 a 的形狀相同。 如果 weights=None,則假定 a 中的所有資料都具有等於 1 的權重。 只有 method=”inverted_cdf” 支援權重。
在 2.0.0 版本中新增。
- interpolationstr,可選
method 關鍵字引數的已棄用名稱。
自 1.22.0 版本起已棄用。
- 傳回:
- percentile純量或 ndarray
如果 q 是單一百分位數且 axis=None,則結果為純量。 如果給定多個百分位數,則結果的第一個軸對應於百分位數。 其他軸是縮減 a 後剩餘的軸。 如果輸入包含小於
float64
的整數或浮點數,則輸出資料類型為float64
。 否則,輸出資料類型與輸入的資料類型相同。 如果指定了 out,則會改為傳回該陣列。
另請參閱
nanmean
nanmedian
相當於
nanpercentile(..., 50)
percentile
、median
、mean
nanquantile
相當於 nanpercentile,但 q 的範圍為 [0, 1]。
註釋
numpy.nanpercentile
具有百分比 q 的行為與具有引數q/100
(忽略 nan 值)的numpy.quantile
相同。 有關更多資訊,請參閱numpy.quantile
。參考文獻
[1]R. J. Hyndman 和 Y. Fan,「統計套件中的樣本分位數」,《美國統計學家》,50(4),第 361-365 頁,1996 年
範例
>>> import numpy as np >>> a = np.array([[10., 7., 4.], [3., 2., 1.]]) >>> a[0][1] = np.nan >>> a array([[10., nan, 4.], [ 3., 2., 1.]]) >>> np.percentile(a, 50) np.float64(nan) >>> np.nanpercentile(a, 50) 3.0 >>> np.nanpercentile(a, 50, axis=0) array([6.5, 2. , 2.5]) >>> np.nanpercentile(a, 50, axis=1, keepdims=True) array([[7.], [2.]]) >>> m = np.nanpercentile(a, 50, axis=0) >>> out = np.zeros_like(m) >>> np.nanpercentile(a, 50, axis=0, out=out) array([6.5, 2. , 2.5]) >>> m array([6.5, 2. , 2.5])
>>> b = a.copy() >>> np.nanpercentile(b, 50, axis=1, overwrite_input=True) array([7., 2.]) >>> assert not np.all(a==b)