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