给出以下数组:
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循环的情况下应用此功能,例如以更优雅的方式?
答案 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的子类,因此可以对它们进行算术运算。