簡體   English   中英

numpy的百分位函數究竟做了什么?

[英]What does numpy's percentile function do exactly?

根據我的理解, numpy的百分位計算數據的第q百分位數。

但它是如何做到的呢?


比如說,給定x = np.array([1.3, 1.7, 2.4, 2.8, 3.5, 5.6, 6.6, 7.7, 8.8, 9.9]) (里面有10個浮點數)。

如果我做np.percentile(x, 100) ,它會返回9.9000000000000004

如果我做np.percentile(x, 90) ,它應該返回8.8 ,對嗎? 但它回饋了8.9100000000000001


為什么會有這樣的差異? 這些差異是否可以接受?

從版本1.9.0開始,Numpy的百分位函數有一個interpolation參數, 在這樣的文檔中描述:

插值 :{'線性','低','高','中點','最近'}
當所需的分位數位於兩個數據點i和j之間時,此可選參數指定要使用的插值方法:

  • 線性:i +(j - i)*分數,其中分數是由i和j包圍的索引的小數部分。
  • 更低:我
  • 更高:j。
  • 最近的:我或j哪個最近。
  • 中點:(i + j)/ 2。

它默認為線性 如果您想從示例中獲得8.8 ,請運行:

np.percentile(x, 90, interopolation='lower')

根據我的理解,90%-percentile不必是輸入數組中的項目。

文檔

給定長度為N的向量V,V的第q個百分位數是V的排序副本中的第q個排名值。兩個最近鄰居的值和距離以及插值參數將確定百分位數,如果標准化排名與q完全不匹配。 如果q = 50,則此函數與中位數相同,如果q = 0,則與最小值相同,如果q = 100,則與最大值相同。

浮點表示的問題(導致np.percentile(x, 100)9.9相比略有不同)是眾所周知的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM