在累积和变得更大的数组中查找索引的快速 numpy 方法?

Lag*_*aer 5 python arrays numpy

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

running_sum = my_array.cumsum()
greater_than_threshold = running_sum > threshold
index = greater_than_threshold.searchsorted(True)
Run Code Online (Sandbox Code Playgroud)

即:找到第一个索引,其中条目的累积总和my_array高于阈值。

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

Jon*_*rey 4

编辑:此方法比使用 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
Run Code Online (Sandbox Code Playgroud)

  • 手动迭代数组将比 NumPy 的“cumsum”慢得多,因此只有当您期望在大型数组中很早就达到阈值时,这才有意义。 (2认同)