Python:如何逐行填充数组?

Nic*_*ico 7 python numpy fill

我有一个我无法解决的numpy问题.我有3D数组(x,y,z)填充0和1.例如,z轴中的一个切片:

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

我想要这个结果:

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

也就是说,我想为每个切片z做的是从右到左,从左到右(x轴)逐行扫描,第一次有1,我想用1填充其余部分.

有没有一种有效的计算方法?

非常感谢.

尼科!

How*_*ard 0

我想不出比你描述的更有效的方法:

对于每一行

  1. 从左侧扫描行,直到找到1.

  2. 如果没有1找到,则继续下一行。

  3. 否则从右侧扫描以查找1行中的最后一个。

  4. 用 s 填充当前行中位置 1. 和 3. 之间的所有内容1