首页 > 解决方案 > 0 和 1 的 2D numpy 数组 - 单元格为 1 也将周围的 12x12 单元格设置为 1

问题描述

有一个大的 2d numpy 数组,尺寸为 1500x1500,代表一个迷宫。单元格包含 0 和 1,其中 0 是开放空间,1 是占用空间。我想考虑机器人的尺寸,所以最简单的方法是修改地图,使原始单元格为 1 的位置,将周围单元格在任何方向上最多 3 个单元格设置为 1。

看了面具,卷积等,但不知道如何进行,感谢帮助。

1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

变成

1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 0 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0
1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0
1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0
1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0
1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0
1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0
1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0
1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

编辑:通过示例将 Q 简化为 3x3“掩码”

标签: pythonarraysnumpy

解决方案


您正在做的事情称为二元膨胀,可以简单地使用scipy.ndimage.morphology.binary_dilation

from scipy.ndimage.morphology import binary_dilation

output = binary_dilation(input, structure = np.ones((7,7)))

structure如果您想通过欧几里得距离而不是曼哈顿距离进行排除,这还允许您执行诸如剪掉角落(通过修改数组)之类的操作。


推荐阅读