填充 numpy 数组中某个值之间的值

Afo*_*o_a 0 numpy numpy-ndarray

假设我有一个如下所示的数组:

a = np.array([0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0])
Run Code Online (Sandbox Code Playgroud)

我想用 1 填充 1 之间的值。所以这将是所需的输出:

a = np.array([0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0])
Run Code Online (Sandbox Code Playgroud)

我查看了这个答案,得到以下结果:

array([0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
   1, 1]) 
Run Code Online (Sandbox Code Playgroud)

我确信这个答案非常接近我想要的输出。然而,尽管尝试了无数次,但我无法更改此代码以使其按照我想要的方式工作,因为我对 numpy 数组不太熟悉。任何帮助深表感谢!

And*_* L. 6

尝试这个

b = ((a == 1).cumsum() % 2) | a

Out[10]:
array([0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0], dtype=int32)
Run Code Online (Sandbox Code Playgroud)

来自 @Paul Panzer:使用ufunc.accumulatewithbitwise_xor

b = np.bitwise_xor.accumulate(a)|a
Run Code Online (Sandbox Code Playgroud)

  • 相同的想法,但速度更快:“np.bitwise_xor.accumulate(a)|a”。 (2认同)
  • @PaulPanzer:在“bitwise_xor”上使用“ufunc.accumulate”非常好。我将其添加到答案中 (2认同)