python - 将 bool 数组转换为递增数值数组的优雅方法是什么?

标签 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 循环的情况下应用这个函数,例如以更优雅的方式?

最佳答案

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/

相关文章:

python - 为什么更改 .format 中的变量后,字符串格式的全局变量仍保持不变?

c# - Python 和 C# 之间的 IPC

python - (为了防止内存错误)如何使用 Tokenize 类在 Keras 中将单词列表热编码为 INTEGER 8 矩阵

python - 如何随机选择具有嵌套列表的列表

python - numpy stride_tricks.as_strided 与滚动窗口的列表理解

python - numpy数组求和,使用哪种方法更好?

python - 检查一个数据框中的列对是否存在于另一个数据框中?

python matplotlib 绘制稀疏矩阵模式

python - 导入Python模块会影响性能吗?

python - numpy:在 true_divide 中遇到无效值