python - 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“掩码”
解决方案
您正在做的事情称为二元膨胀,可以简单地使用scipy.ndimage.morphology.binary_dilation
from scipy.ndimage.morphology import binary_dilation
output = binary_dilation(input, structure = np.ones((7,7)))
structure
如果您想通过欧几里得距离而不是曼哈顿距离进行排除,这还允许您执行诸如剪掉角落(通过修改数组)之类的操作。
推荐阅读
- android - Android:使用 R8 时构建失败
- c++ - QNX7 中 C++ 的哪条路径应该包括在内?
- javascript - 如何检测网页功能是否完成?
- android - 可点击图像没有响应片段中的 RecyclerView.setOnClickListener()... 为什么?
- java - 单类编译
- c# - 我们如何在 C# 中获取 argv[0]?
- php - 未知列“email_input”(PHP MySQLi 准备好的语句)
- autohotkey - 如何同时点击两个不同的程序?
- c++ - 当找不到匹配的数据时,如何定义一个函数以返回指向“”值的指针?
- java - 如何在 spring-cloud-stream 中的 kafka 进程拓扑中使用交互式查询?