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的一个子类,因此以这种方式对它们执行算术是可能的