我有一个我无法解决的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填充其余部分.
有没有一种有效的计算方法?
非常感谢.
尼科!
我想不出比你描述的更有效的方法:
对于每一行
从左侧扫描行,直到找到1.
如果没有1找到,则继续下一行。
否则从右侧扫描以查找1行中的最后一个。
用 s 填充当前行中位置 1. 和 3. 之间的所有内容1。