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

时间:2019-04-02 14:02:11

标签: 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
    cat[i] = it

但是,此方法使用的for循环比(例如)矩阵计算要慢,这是众所周知的。有没有办法在没有for循环的情况下应用此功能,例如以更优雅的方式?

1 个答案:

答案 0 :(得分:5)

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的子类,因此可以对它们进行算术运算。