Python:按和值分组的数组

Python:按和值分组的数组,python,numpy,Python,Numpy,存在许多基于另一个数组索引对数组求和的主题,但我找不到要查找的内容 我有一个数组[1,1,1,1,2,3,3,0,0,2,4],我想得到一些索引,通过这些索引,到目前为止的总和大于或等于4。所以我会得到: [3,5,9,10]因为: Sum([1,1,1,1]) >= 4 Sum([2,3]) >= 4 Sum([3,0,0,2]) >= 4 我需要满足求和值的元素的索引 我可以用一个循环来做,但我希望能用numpy或类似的工具来高效地做。您可以将np.where与np.

存在许多基于另一个数组索引对数组求和的主题,但我找不到要查找的内容

我有一个数组
[1,1,1,1,2,3,3,0,0,2,4]
,我想得到一些索引,通过这些索引,到目前为止的总和大于或等于
4
。所以我会得到:

[3,5,9,10]
因为:

Sum([1,1,1,1]) >= 4

Sum([2,3]) >= 4

Sum([3,0,0,2]) >= 4
我需要满足求和值的元素的索引


我可以用一个循环来做,但我希望能用numpy或类似的工具来高效地做。

您可以将
np.where
np.cumsum
结合使用:

import numpy as np

li = [1,1,1,1,2,2,3,0,0,1,4]

print(np.where(np.cumsum(li) % 4 == 0))
# (array([ 3,  5,  9, 10], dtype=int32),)
当然,这里的问题是,它还将找到总和为8、12、16、20等的索引

不幸的是,我不确定是否有办法“重置”
cumsum
,如果有,您可以执行类似于
np.where(np.cumsum(li)-4==0)
(但目前它只返回3)

但是,您可以在每次
cumsum
达到4时对数组进行切片,但您不想使用循环

array =[1,1,1,1,2,2,3,0,0,1,4]
print(np.where(np.cumsum(array)%4==0))  

现在,如果更改数组,则可以在总和超过4时进行检查,然后可以取最后一个索引并继续操作。

会有负值吗?如果当前组的总和从未精确达到4,而下一项超过4,该怎么办?项目是否保证为整数,或者是否有浮点数?是的,我更新了问题,我不够清楚,我需要基于第一个索引进行切片,其中累积数通过了我要查找的总和值。我认为您应该使用更相关的示例进行更新。可能是这样的:
[1,1,3,1,2,2,3,0,0,1,4]
,这样答案就不会被过于简单的示例所迷惑。@Divakar:thx。我在上次更新中已经这样做了。如果是
[1,1,3,1,2,2,3,0,0,1,4]
?作为PM 2Ring评论的一个例子。