代码之家  ›  专栏  ›  技术社区  ›  jbuddy_13

如何计算具有给定数组的外部元素的百分比?

  •  0
  • jbuddy_13  · 技术社区  · 3 年前

    我正在寻找一个百分位函数,它接受一个数组和一个元素,并返回元素的最接近百分位。

    一些例子

    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 这是不希望的。

    2 回复  |  直到 3 年前
        1
  •  2
  •   pho    3 年前

    np.percentile(a, q) 告诉你 q 第百分位 a 大堆这与你想要的相反。我不认为numpy有做你想做的事的功能,但它很容易让你自己做。

    百分位数告诉数组中小于给定元素的元素的百分比,所以只需这样做:

    def percentile(lst: list, val) -> float:
        return sum(i <= val for i in lst) / len(lst)
    

    如果您有一个numpy数组,则不需要对其进行迭代,因为 <= 将通过阵列进行广播:

    def percentile(arr: np.ndarray, val) -> float:
        return np.mean(arr <= val) # thanks Chrysophylaxs!
        # return (arr <= val).sum() / len(arr)
    
    >>> percentile([1,2,3,4,5], 2)
    # 0.4
    >>> percentile([1,2,3,4,5], 2.5)
    # 0.4
    >>> percentile([1,2,3,4,5], 6)
    # 1.0
    
        2
  •  1
  •   Phoenix    3 年前

    你也可以这样计算: 它对数组进行排序,然后在已排序的数组中查找元素的索引。然后它通过取元素的索引并加1来计算百分位数。

    def percentile(arr, element):
        arr = sorted(arr)
        index = arr.index(element)
        percentile = (index + 1) / len(arr) * 100
        return percentile