当存在 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 不同的中位数的主要内容,如果未能解决你的问题,请参考以下文章