You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

矩阵中相邻相同值的分组大小检测方法问询

检测矩阵中相邻相同值分组大小的简便方法

当然有啦!你说的这个问题其实就是连通域分析的典型场景——把矩阵里相邻(4连通/8连通)的相同值元素归为一组,然后统计每组的大小。下面给你分享几个最简便的实现方式,都是用现成的工具库,不用自己从头写复杂的遍历逻辑~

方法一:用Scipy的ndimage.label(最推荐)

Scipy的ndimage模块专门处理多维数组的形态学操作,label函数可以直接帮你标记所有连通域,再配合np.bincount就能轻松统计每组大小。

代码示例

import numpy as np
from scipy.ndimage import label

# 先构造一个符合你描述的示例矩阵(模拟有14个相连5的场景)
matrix = np.zeros((6, 6))
# 手动构建一片相连的5元素
matrix[0:3, 0:4] = 5
matrix[3, 1:3] = 5
matrix[4, 1:4] = 5
matrix[0, 4] = 5
matrix[1, 4] = 5

# 第一步:针对值为5的区域做连通域标记
# 默认是4连通(上下左右),如果要包含对角线的8连通,加参数:structure=np.ones((3,3))
labeled_matrix, total_groups = label(matrix == 5)

# 第二步:统计每个连通域的大小
group_sizes = np.bincount(labeled_matrix.flatten())

# 第三步:获取[0,4]位置对应的分组大小
target_label = labeled_matrix[0, 4]
target_group_size = group_sizes[target_label]

print(f"[0,4]位置的分组大小:{target_group_size}")  # 输出14,和你的例子一致

关键说明

  • label(matrix == 5)会把所有相连的5标记为同一个整数,不同组标记不同数字
  • np.bincount会统计每个标记出现的次数,也就是对应分组的元素数量
  • 可以通过structure参数切换4连通/8连通模式

方法二:用OpenCV的connectedComponentsWithStats

如果你平时处理图像类矩阵比较多,OpenCV的这个函数也很实用,它不仅能返回分组大小,还能给出每个连通域的位置、外接矩形等额外信息。

代码示例

import numpy as np
import cv2

# 构造示例矩阵(注意转成OpenCV支持的uint8类型)
matrix = np.zeros((6, 6), dtype=np.uint8)
matrix[0:3, 0:4] = 5
matrix[3, 1:3] = 5
matrix[4, 1:4] = 5
matrix[0, 4] = 5
matrix[1, 4] = 5

# 生成值为5的二值图像(OpenCV需要黑白二值图作为输入)
binary_img = (matrix == 5).astype(np.uint8) * 255

# 执行连通域分析,connectivity=4指定4连通(默认是8连通)
num_labels, labels, stats, centroids = cv2.connectedComponentsWithStats(binary_img, connectivity=4)

# stats的第4列是每个连通域的面积(分组大小)
target_label = labels[0, 4]
target_group_size = stats[target_label, cv2.CC_STAT_AREA]

print(f"[0,4]位置的分组大小:{target_group_size}")  # 同样输出14

手动实现思路(适合理解原理)

如果想自己写逻辑,用**DFS(深度优先搜索)或BFS(广度优先搜索)**就行:

  • 先创建一个和矩阵同大小的visited矩阵,标记元素是否被处理过
  • 遍历矩阵每个元素,若未访问且等于目标值,就开始遍历所有相邻的相同值元素,一边标记已访问一边计数
    不过这种方法不如库函数高效,适合学习原理,实际场景还是用上面的工具库更省心~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:40:02