基本上,我的问题的逻辑是:
running_sum = my_array.cumsum()
greater_than_threshold = running_sum > threshold
index = greater_than_threshold.searchsorted(True)
即:查找my_array
中累积条目总和超过阈值的第一个索引。
现在的问题是:我知道my_array
会很大,但条件会很早就得到满足。当然这意味着我可以做一个简单的while
循环来手动计算累积和何时大于阈值,但我想知道是否有一种numpythonic方式,即一种测试某些条件的方法评估整个数组。
答案 0 :(得分:0)
编辑:此方法比使用NumPy的searchsorted
和cumsum
慢,请参阅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