代码之家  ›  专栏  ›  技术社区  ›  HJA24

根据条件用值正向填充Numpy矩阵/掩码

  •  2
  • HJA24  · 技术社区  · 5 月前

    我有以下矩阵

    import numpy as np
    
    
    A = np.array([
        [0, 0, 0, 0, 1, 0, 1],
        [0, 0, 0, 0, 0, 0, 1],
        [1, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0]
    ]).astype(bool)
    

    如何在列后按列填充所有行 True ?

    我想要的输出:

        [0, 0, 0, 0, 1, 1, 1],
        [0, 0, 0, 0, 0, 0, 1],
        [1, 1, 1, 1, 1, 1, 1],
        [0, 0, 0, 0, 0, 0, 0]
    
    2 回复  |  直到 5 月前
        1
  •  5
  •   mozway    5 月前

    你可以使用 logical_or 结合 accumulate :

    np.logical_or.accumulate(A, axis=1)
    

    输出:

    array([[False, False, False, False,  True,  True,  True],
           [False, False, False, False, False, False,  True],
           [ True,  True,  True,  True,  True,  True,  True],
           [False, False, False, False, False, False, False]])
    

    如果你想要整数,就用 maximum :

    np.maximum.accumulate(A.astype(int), axis=1)
    
    array([[0, 0, 0, 0, 1, 1, 1],
           [0, 0, 0, 0, 0, 0, 1],
           [1, 1, 1, 1, 1, 1, 1],
           [0, 0, 0, 0, 0, 0, 0]])
    
        2
  •  4
  •   Ahmed AEK    5 月前

    你可以做一个 cumsum .

    import numpy as np
    
    
    A = np.array([
        [0, 0, 0, 0, 1, 0, 1],
        [0, 0, 0, 0, 0, 0, 1],
        [1, 0, 0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0, 0, 0]
    ]).astype(bool)
    
    B = np.cumsum(A, axis=1).astype(bool) # makes copy
    np.cumsum(A, axis=1, out=A) # in-place no copy
    
    
    [[False False False False  True  True  True]
     [False False False False False False  True]
     [ True  True  True  True  True  True  True]
     [False False False False False False False]]
    

    编辑: mozway的答案更快,请改用它。