是否有一种方法可以从排序列表中获取cumumulative总和百分比的索引



给定一个真实数字的列表,例如

x = range(20)

任务是找到列表累积总和的X%的第一个索引,例如

def compute_cumpercent(lint, percent):
    break_point = sum(lint) * percent
    mass = 0
    for i, c in enumerate(lint):
        if mass > break_point:
            return i
        mass += c

在输入列表中查找数字的索引,该列表少于累积总和的25%,

>>> compute_cumpercent(x, 0.25)
11

首先,是否有此类函数的数学/名称?

除了上述简单循环外,是否可以使用numpy或某些bisect或其他方式进行操作?

假设输入列表始终是分类的。

也许是这样的东西?

import numpy as np
x = range(20)
percent = 0.25
cumsum = np.cumsum(x)
break_point = cumsum[-1] * percent
np.argmax(cumsum >= break_point) + 1 # 11
import numpy as np
x = np.arange(20)
Percent = 25
CumSumArray = np.cumsum(x)
ValueToFind = CumSumArray[-1] * Percent / 100
Idx = np.argmax(CumSumArray > ValueToFind)[0] - 1

遵循此提示,可以使用搜索搜索来找到元素的索引,该元素接近(较低(至百分位/分数值。

请参阅下面的示例:

import numpy as np
def find_index_left(xs, v):
   return np.searchsorted(xs, v, side='left') - 1
def find_index_quantile(xs, q):
    v = np.quantile(xs, q)
    return find_index_left(xs, v)
xs = [5, 10, 11, 15, 20]
assert np.quantile(xs, 0.9) == 18.0
assert find_index_left(xs, 18) == 3 # zero-based index for forth element
assert find_index_quantile(xs, 0.9) == 3

必须对xs进行排序。

最新更新