numpy可以帮助我快速找到一个数组的索引吗,在这个索引处它的和第一次是负的?

jhkqcmku  于 2022-12-13  发布在  其他
关注(0)|答案(1)|浏览(89)

我需要做这样的事情

import numpy as np

a = np.random.rand(1000)
a -= .55
a[0] = 1
b = 0
for i in range(len(a)):
    b += a[i]
    if b < 0:
        print(i)
        break

很多,而且最好是快速的。NumPy能帮我吗?我知道NumPy是为向量计算而构建的,而不是为这个。尽管如此,它可以非常快地计算数组的和--我能给予它这个特定的条件(和第一次为负),让它停下来告诉我索引号吗?

zazmityj

zazmityj1#

您可以使用numpy.cumsum()numpy.argmax()。首先,计算元素的累积和。然后返回elements < 0True/False,并返回element < 0argmax()的第一个为True的索引。

>>> (a.cumsum() < 0).argmax()

检查两个代码:

import numpy as np

a = np.random.rand(1000)
a -= .55
a[0] = 1

def check_1(a):
    b = 0
    for i in range(len(a)):
        b += a[i]
        if b < 0:
            print(i)
            break
            
def check_2(a):
    return (a.cumsum() < 0).argmax()

输出:(生成基本随机输入)

>>> check_1(a)
6

>>> check_2(a)
6

相关问题