给定百分位数的变量累积和

5 投票
3 回答
3583 浏览
提问于 2025-04-18 00:46

我想把一个数组中的所有值加起来,直到达到某个百分位数为止。

比如说:

import numpy as np
a = [15, 40, 124, 282, 914, 308]
print np.percentile(a,90)

第90个百分位数大约是611,而到这个百分位数为止的累计和是461。

在Python中有没有什么函数可以做到这一点呢?

3 个回答

4

我不知道有什么,但你可以这样做:

import numpy as np
from itertools import takewhile

a = [15, 40, 124, 282, 914, 308]
p90 = np.percentile(a,90)
print sum(takewhile(lambda x : x < p90,  a))

输出:

461
5

在编程中,有时候我们需要让程序做一些事情,比如在特定的条件下执行某段代码。为了实现这个功能,我们可以使用“条件语句”。简单来说,条件语句就像是在问一个问题,如果答案是“是”,那么就执行某些操作;如果答案是“不是”,那么就执行其他操作。

举个例子,想象一下你在做一个选择题。如果你选择了“是”,那么你就会得到一个奖励;如果你选择了“不是”,那么你就可能会失去一些东西。条件语句在编程中就是这样工作的。

在代码中,条件语句通常是用“if”这个词来开始的。接下来会跟着一个条件,比如“如果这个数字大于10”,然后在大括号里写下当条件成立时要执行的代码。如果条件不成立,可以用“else”来指定另一段代码。

这样一来,程序就能根据不同的情况做出不同的反应,变得更加灵活和智能。

import numpy as np
a = np.array([15, 40, 124, 282, 914, 308])
b = np.cumsum(a)
p90 = np.percentile(a, 90)
print b[b < p90][-1] #461
4
A=np.array(a)
A[:(A<np.percentile(a, 90)).argmin()].sum() #461
%%timeit
    ...: b = np.cumsum(a)
    ...: p90 = np.percentile(a, 90)
    ...: b[b < p90][-1]
    ...: 
1000 loops, best of 3: 217 µs per loop
%timeit A[:(A<np.percentile(a, 90)).argmin()].sum()
10000 loops, best of 3: 191 µs per loop

@JoshAdel的

这个:

撰写回答