1 条题解

  • 0
    @ 2026-3-26 15:34:24

    NUMPY071 题解:计算邻居数量

    题目

    计算二维数组每个位置的邻居数量。

    解题思路

    1. 读取矩阵
    2. 使用 8 个方向的切片计算邻居
    3. 对于边界点,邻居数量会少一些

    代码

    import numpy as np
    
    n = int(input())
    Z = np.array([list(map(int, input().split())) for _ in range(n)])
    N = np.zeros(Z.shape, dtype=int)
    N[1:-1,1:-1] = (Z[0:-2,0:-2] + Z[0:-2,1:-1] + Z[0:-2,2:] +
                    Z[1:-1,0:-2] + Z[1:-1,2:] +
                    Z[2:,0:-2] + Z[2:,1:-1] + Z[2:,2:])
    print(N)
    

    代码详解

    8 个方向的切片:

    • 左上:Z[0:-2,0:-2]\texttt{Z[0:-2,0:-2]}
    • 正上:Z[0:-2,1:-1]\texttt{Z[0:-2,1:-1]}
    • 右上:Z[0:-2,2:]\texttt{Z[0:-2,2:]}
    • 左:Z[1:-1,0:-2]\texttt{Z[1:-1,0:-2]}
    • 右:Z[1:-1,2:]\texttt{Z[1:-1,2:]}
    • 左下:Z[2:,0:-2]\texttt{Z[2:,0:-2]}
    • 正下:Z[2:,1:-1]\texttt{Z[2:,1:-1]}
    • 右下:Z[2:,2:]\texttt{Z[2:,2:]}

    运行示例

    输入:

    3
    1 1 1
    1 1 1
    1 1 1
    

    分析:

    • 角点有 3 个邻居
    • 边中点有 5 个邻居
    • 中心点有 8 个邻居

    输出:

    [[3 5 3]
     [5 8 5]
     [3 5 3]]
    

    核心知识点

    1. 数组切片
    2. 向量化计算
    3. 边界处理
    • 1

    信息

    ID
    378
    时间
    1000ms
    内存
    256MiB
    难度
    (无)
    标签
    (无)
    递交数
    0
    已通过
    0
    上传者