我正在寻找一个百分位函数,它接受一个数组和一个元素,它将返回该元素的最近百分位。一些例子
percentile([1,2,3,4,5], 2) => 40% percentile([1,2,3,4,5], 2.5) => 40% percentile([1,2,3,4,5], 6) => 100%
python或numpy中是否存在类似的东西?numpy做了这个np.percentile(a=[1,2,3,4,5], q=3) => 1.12,这是不希望的。
np.percentile(a=[1,2,3,4,5], q=3) => 1.12
gdx19jrr1#
np.percentile(a, q)告诉你a数组中q的百分位数。这是你想要的反函数。我不认为numpy有一个函数可以做你想做的事情,但是你自己做一个很容易。百分位数告诉你数组中小于给定元素的元素所占的百分比,所以只要这样做就行了:
np.percentile(a, q)
a
q
def percentile(lst: list, val) -> float: return sum(i <= val for i in lst) / len(lst)
如果你有一个numpy数组,你不需要迭代它,因为<=会在数组上广播:x一个一个一个一个x一个一个二个x
<=
lsmepo6l2#
你也可以这样计算:它对数组排序,然后在排序后的数组中找到元素的索引。2然后它通过取元素的索引加1来计算百分位数。
def percentile(arr, element): arr = sorted(arr) index = arr.index(element) percentile = (index + 1) / len(arr) * 100 return percentile
2条答案
按热度按时间gdx19jrr1#
np.percentile(a, q)
告诉你a
数组中q
的百分位数。这是你想要的反函数。我不认为numpy有一个函数可以做你想做的事情,但是你自己做一个很容易。百分位数告诉你数组中小于给定元素的元素所占的百分比,所以只要这样做就行了:
如果你有一个numpy数组,你不需要迭代它,因为
<=
会在数组上广播:x一个一个一个一个x一个一个二个x
lsmepo6l2#
你也可以这样计算:它对数组排序,然后在排序后的数组中找到元素的索引。2然后它通过取元素的索引加1来计算百分位数。