给定以下数组:
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 循环的情况下应用这个函数,例如以更优雅的方式?
最佳答案
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 的子类,因此可以通过这种方式对它们进行算术运算。
关于python - 将 bool 数组转换为递增数值数组的优雅方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55476743/