仅通过第一个位置创建蒙版

jez*_*ael 5 arrays indexing numpy mask where

我有阵列:

a = np.array([[ 0,  1,  2,  0,  0,  0],
              [ 0,  4,  1, 35,  0, 10],
              [ 0,  0,  5,  4,  0,  4],
              [ 1,  2,  5,  4,  0,  4]])
Run Code Online (Sandbox Code Playgroud)

我需要从0每行中的第一个连续选择:

[[  True   False  False  False  False  False]
 [  True   False  False  False  False  False]
 [  True   True   False  False  False  False]
 [  False  False  False  False  False  False]]
Run Code Online (Sandbox Code Playgroud)

我尝试:

a[np.arange(len(a)), a.argmax(1): np.arange(len(a)), [0,0,0]] = True
Run Code Online (Sandbox Code Playgroud)

但这是错误的.

Bra*_*mon 2

您可以使用np.cumsum

假设:您仅在每行的开头查找零。

a = np.array([[ 0,  1,  2,  0,  0,  0],
              [ 0,  4,  1, 35,  0, 10],
              [ 0,  0,  5,  4,  0,  4]])

a.cumsum(axis=1) == 0
array([[ True, False, False, False, False, False],
       [ True, False, False, False, False, False],
       [ True,  True, False, False, False, False]], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

基础:True只要每行的累积和为 0,就保持不变。

容易出错:具有负整数的数组会导致失败。即对于[-1, 1],这将计算为True位置 1。