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

给定以下数组:


jump = array([[False, False,  True, False, False,  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 循环的情况下以更优雅的方式应用此函数?


喵喵时光机
浏览 179回答 1
1回答

慕村9548890

np.cumsum 这里似乎合适:>>> import numpy as np>>> np.cumsum([False, False,  True, False, False,  True])array([0, 0, 1, 1, 1, 2], dtype=int32)幸运的是 bool 是 int 的子类,因此以这种方式对它们进行算术运算是可能的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python