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 類型排序的選項為

  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’

在 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)