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] 中總結的那樣,是

  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,則縮減的軸將保留在結果中,作為大小為 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)

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