You need to enable JavaScript to run this app. Python实现2D NumPy数组的八连通域计数与矩阵值替换
优惠活动
大模型
产品
解决方案
定价
更多

Python实现2D NumPy数组的八连通域计数与矩阵值替换

实现方案

这个需求本质是八连通规则下的连通域尺寸映射,最高效简洁的实现方式是依托NumPy配套的SciPy科学计算工具栈完成,无需手动编写邻接遍历逻辑,几行代码即可完全匹配转换规则。

核心逻辑

  1. 题目要求的八方向单步通行、仅在1值位置连通的规则,可直接通过连通域标记工具的邻接核参数匹配
  2. 完成全图连通域标记后,统计每个连通域的总元素数,再将对应尺寸值回填到原数组的1值位置,0值位置保留0即可

可直接运行的代码

import numpy as np
from scipy import ndimage

# 输入原始数组
start = np.array([
    [1,1,0,1],
    [1,0,0,1],
    [0,1,0,0]
])

# 定义八方向连通邻接核:3x3全1矩阵,覆盖上下、左右、四个斜向的相邻位置
connect_kernel = np.ones((3, 3))
# 标记每个位置所属的连通域ID
labels, _ = ndimage.label(start, structure=connect_kernel)
# 统计每个连通域的元素总数(直接数每个标签的出现次数即可)
domain_sizes = np.bincount(labels.ravel())[1:]
# 回填尺寸值,0标签位置直接赋值0,完全匹配转换规则
finish = np.where(labels > 0, domain_sizes[labels - 1], 0)

方案优势

  • 性能优异:连通域标记的底层是C语言实现的优化逻辑,处理大尺寸矩阵时,执行效率远高于纯Python手写的BFS/DFS遍历
  • 规则完全匹配:通过3x3全1的邻接核,直接实现八方向连通的判断逻辑,无需手动写邻接坐标计算、边界判断的样板代码
  • 代码极简:没有冗余的状态维护、连通性判断的逻辑

结果校验

运行上述代码得到的输出矩阵和题目给出的目标矩阵完全一致:

array([[4, 4, 0, 2],
       [4, 0, 0, 2],
       [0, 4, 0, 0]])

内容的提问来源于stack exchange,提问作者Vladimir Eremin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.03 01:27:05