当存在 inf 时,np.percentile 返回与 np.median 不同的中位数

Posted

技术标签:

【中文标题】当存在 inf 时,np.percentile 返回与 np.median 不同的中位数【英文标题】:np.percentile returns different median from np.median when inf is present 【发布时间】:2019-05-25 12:53:44 【问题描述】:

当数组中存在 inf 值时,在某些条件下 np.percentile 可以返回 NaN 作为中位数,而 np.median 可以返回一个有限值。

>>> import numpy as np
>>> np.percentile([np.inf, 5, 4], [10, 20, 30, 40, 50, 60, 70, 80, 90])
/Users/tom/miniconda3/envs/alldev/lib/python3.7/site-packages/numpy-1.16.0.dev0+45718fd-py3.7-macosx-10.7-x86_64.egg/numpy/lib/function_base.py:3947: RuntimeWarning: invalid value encountered in multiply
  x2 = take(ap, indices_above, axis=axis) * weights_above
array([4.2, 4.4, 4.6, 4.8, nan, inf, inf, inf, inf])
>>> np.median([np.inf, 5, 4])
5.0

在这种情况下,np.median 能够正确返回 5.0 作为中值,而 np.percentile 返回第 50 个百分位数的 NaN。

【问题讨论】:

你现在有什么问题? 为什么会这样? 那是因为那些函数的功能不一样,甚至不相近。你应该检查源代码。 不,这是个好问题。找到答案后,您可以自己提供答案,或者我也可以这样做。 【参考方案1】:

第一个参数是数据,第二个参数是置信区间。您不允许在置信区间中输入非数字

data=[10, 20, 30, 40, 50, 60, 70, 80, 90]
confidence=[5, 4]
results=np.percentile(data,confidence )

print(results)

输出

 array([14. , 13.2])

值 13.2 到 14 将产生 4% 到 5% 的置信区间

【讨论】:

以上是关于当存在 inf 时,np.percentile 返回与 np.median 不同的中位数的主要内容,如果未能解决你的问题,请参考以下文章

Python计算分位数

你如何在 Numpy 中找到 IQR?

AttributeError:“模块”对象没有属性“百分位”

当不再需要时,JVM 是不是会将空闲内存返还给操作系统?

计算特定组的百分位数

计算特定组的百分位数