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

矩阵相邻元素属性识别:检测元素周边是否存在值1并存储

矩阵8邻域检测问题解决方案

嘿,我来帮你搞定这个矩阵检测的需求!先理清楚咱们要做的事:给定一个7行9列的矩阵,逐个检查每个位置的8邻域(就是上下左右加四个对角线的相邻位置),只要邻域里至少有一个1,就把当前位置的元素存到单独变量里。

先明确问题细节

首先把你给的一维数字串转换成二维矩阵,方便我们定位每个元素的坐标——数了下总共有63个数字,刚好是7行×9列:

[
 [9,9,1,9,9,9,9,1,9],
 [9,1,9,9,9,9,9,9,9],
 [9,9,9,9,9,9,9,1,9],
 [9,9,9,9,9,9,9,9,9],
 [9,1,1,1,9,9,9,9,9],
 [1,9,9,9,9,9,1,9,9],
 [9,9,9,9,9,1,9,1,9]
]

实现思路

  • 矩阵结构化:把一维列表转成二维矩阵,这样我们就能用行号和列号来定位每个元素。
  • 边界处理:矩阵边缘的元素(比如第一行、最后一列)的邻域会超出矩阵范围,得跳过这些无效坐标,不然会报错。
  • 遍历+检测:逐个走每个元素的坐标,检查它所有有效的邻域里有没有1,只要找到一个就满足条件。
  • 结果存储:用一个列表来装所有符合条件的元素,这个列表就是你要的“单独变量”。

Python代码实现

直接上可运行的代码,注释写得很清楚,你可以直接复用:

# 原始矩阵数据,按行整理
raw_data = [
    9,9,1,9,9,9,9,1,9,
    9,1,9,9,9,9,9,9,9,
    9,9,9,9,9,9,9,1,9,
    9,9,9,9,9,9,9,9,9,
    9,1,1,1,9,9,9,9,9,
    1,9,9,9,9,9,1,9,9,
    9,9,9,9,9,1,9,1,9
]
# 转换为7行9列的二维矩阵
matrix = [raw_data[i*9 : (i+1)*9] for i in range(7)]

# 用来存储符合条件的元素的变量
valid_elements = []

# 矩阵的行数和列数
total_rows = len(matrix)
total_cols = len(matrix[0]) if total_rows > 0 else 0

# 遍历每个元素的坐标(行row,列col)
for row in range(total_rows):
    for col in range(total_cols):
        # 标记是否在邻域中找到1
        found_one = False
        # 遍历8邻域的所有偏移方向(上下左右+四个对角线)
        for dr in (-1, 0, 1):
            for dc in (-1, 0, 1):
                # 跳过当前元素本身,只检查邻域
                if dr == 0 and dc == 0:
                    continue
                # 计算邻域的坐标
                neighbor_row = row + dr
                neighbor_col = col + dc
                # 检查邻域坐标是否在矩阵范围内
                if 0 <= neighbor_row < total_rows and 0 <= neighbor_col < total_cols:
                    if matrix[neighbor_row][neighbor_col] == 1:
                        found_one = True
                        # 找到1后直接跳出内层循环,不用再检查其他邻域
                        break
            if found_one:
                break
        # 如果邻域存在1,把当前元素加入结果列表
        if found_one:
            valid_elements.append(matrix[row][col])

# 输出结果
print("符合条件的元素:", valid_elements)

代码关键点说明

  • 矩阵转换:用切片把一维列表拆成二维,这样我们就能用matrix[row][col]直接访问元素。
  • 邻域遍历:用dr和dc两个偏移量覆盖8个方向,同时跳过当前元素(因为我们要检查的是邻域,不是自己)。
  • 边界检查:确保邻域坐标在矩阵的合法范围内,避免出现索引越界的错误。
  • 提前终止:一旦在邻域里找到1,就停止后续的检查,能节省不少计算时间,尤其是大矩阵的时候。

运行这段代码后,valid_elements就是你要的存储符合条件元素的变量,里面会包含所有邻域内有1的位置的元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:32:12