在数组中找到累积和变大的快速numpy方法?

时间:2016-07-27 18:36:13

标签: python arrays numpy

基本上,我的问题的逻辑是:

running_sum = my_array.cumsum()
greater_than_threshold = running_sum > threshold
index = greater_than_threshold.searchsorted(True)

即:查找my_array中累积条目总和超过阈值的第一个索引。

现在的问题是:我知道my_array会很大,但条件会很早就得到满足。当然这意味着我可以做一个简单的while循环来手动计算累积和何时大于阈值,但我想知道是否有一种numpythonic方式,即一种测试某些条件的方法评估整个数组。

1 个答案:

答案 0 :(得分:0)

编辑:此方法比使用NumPy的searchsortedcumsum慢,请参阅user2357112的评论和timeit测试。

cumsum将计算整个阵列的累计总和。相反,只需自己迭代数组:

running_sum = 0
for index, entry in enumerate(my_array.flat):
    running_sum += entry
    if running_sum > threshold:
        break
if running_sum < threshold:
    index = -1 #if the sum never reaches the threshold