【问题标题】:What is an elegant way to convert a boolean array into increasing numerical array? [duplicate]将布尔数组转换为递增数值数组的优雅方法是什么? [复制]
【发布时间】:2019-04-02 22:11:02
【问题描述】:

给定以下数组:

jump = array([[False, False,  True, False, False,  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 循环的情况下应用此功能,即以更优雅的方式?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-01-05
      • 2012-05-17
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      • 2015-03-19
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      相关资源
      最近更新 更多