Python 将布尔数组转换为递增数值数组的优雅方法是什么?

Python 将布尔数组转换为递增数值数组的优雅方法是什么?,python,numpy,Python,Numpy,给定以下数组: jump = array([[False, False, True, False, False, True]]) 将此数组映射到数字数组的优雅方式是什么?每次遇到“True”时,该数组将增加+1? 像这样: [0,0,1,1,1,2]. 这确实有效: cat = np.zeros([6,]) it = 0 for i in range(0,np.shape(jumps)[0]): if jumps[i] == True: it = it + 1

给定以下数组:

jump = array([[False, False,  True, False, False,  True]])
将此数组映射到数字数组的优雅方式是什么?每次遇到“True”时,该数组将增加+1? 像这样:

[0,0,1,1,1,2].
这确实有效:

cat = np.zeros([6,])

it = 0
for i in range(0,np.shape(jumps)[0]):
    if jumps[i] == True:
        it = it + 1
    cat[i] = it
然而,这种方法使用了一个for循环,这是臭名昭著的,它比(例如)矩阵计算要慢。是否有一种方法可以在不使用for循环的情况下应用此函数,即以更优雅的方式应用此函数?

在这里似乎很合适:

>>> import numpy as np
>>> np.cumsum([False, False,  True, False, False,  True])
array([0, 0, 1, 1, 1, 2], dtype=int32)
幸运的是,bool是int的一个子类,因此以这种方式对它们执行算术是可能的