gpt4 book ai didi

python - 对 Numpy bool 索引求和

转载 作者:行者123 更新时间:2023-11-30 22:30:18 24 4
gpt4 key购买 nike

我正在尝试找到一种方法,使用模函数来确定月份开始/结束,从而根据 bool 索引对值数组求和。

months = np.arange(36) + 1 # +1 to denote months rather than index
vals = np.ones(36)
vals[12:24] = 2
vals[24:36] = 3

# closest try:

vals.cumsum()[[months % 12 == 0]] # returns array([12, 36, 72])

# target result = array([12, 24, 36])

vals.sum() 函数只是对整个事物进行求和,但是 cumsum 对整个事物进行累加,这并不是我想要的。目标结果包含在上面 - 这是一种常见的电子表格汇总技术,通常使用 SUMIF 函数根据某些参数对值求和来完成。

有没有简单的方法可以做到这一点?我确信有,我只是错过了它,并且我花了一些时间试图弄清楚这一点 - 宁愿不使用 for 循环。

谢谢。

最佳答案

看来您需要np.add.reduceat :

np.add.reduceat(vals, np.flatnonzero((months - 1) % 12 == 0))
# array([ 12., 24., 36.])
<小时/>

说明:

months
# array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
# 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
# 35, 36])

1).使用模来找出总和应以 (months - 1) % 12 开始的条件:

(months - 1) % 12 == 0
# array([ True, False, False, False, False, False, False, False, False,
# False, False, False, True, False, False, False, False, False,
# False, False, False, False, False, False, True, False, False,
# False, False, False, False, False, False, False, False, False], dtype=bool)

2). np.flatnonzeronp.where 类似,并给出索引,因此这里,第一个总和从 0 开始到 12(不包括),依此类推:

np.flatnonzero((months - 1) % 12 == 0)
array([ 0, 12, 24])

3).找到索引后,使用 np.add.reduceat 来对段求和:

np.add.reduceat(vals, [0, 12, 24])
# array([ 12., 24., 36.])

本质上,这相当于 [sum(vals[0:12]), sum(vals[12:24]), sum(vals[24:])] 并给出输出你需要。

关于python - 对 Numpy bool 索引求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46120633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com