Python矩阵遍历:从指定坐标自动生成同心正方形数值矩阵
基于指定坐标生成同心正方形填充矩阵的实现方案
问题描述
现有一个5×5的初始零矩阵:
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需要基于给定的(x,y)坐标,从该位置向外逐层构建同心正方形并填充对应数值,示例效果如下:
示例1:3 3 3 3 3 3 2 2 2 2 3 2 1 1 2 3 2 1 1 2 3 2 2 2 2示例2:
2 2 2 3 4 1 1 2 3 4 1 1 2 3 4 2 2 2 3 4 3 3 3 3 4疑问:是否存在可替代硬编码的自动化函数或库来便捷实现该需求?
解决方案
不需要依赖第三方库,通过基础数学计算就能实现自动化生成,核心逻辑是计算每个单元格到指定中心坐标的横向/纵向距离的最大值,再根据数值规则调整填充值。
Python实现代码
def generate_concentric_matrix(matrix_size, center_x, center_y): # 初始化指定大小的零矩阵 matrix = [[0] * matrix_size for _ in range(matrix_size)] for i in range(matrix_size): for j in range(matrix_size): # 计算当前单元格与中心的横向、纵向距离 horizontal_dist = abs(i - center_x) vertical_dist = abs(j - center_y) # 取最大距离作为层数,加1匹配示例的数值起始规则 matrix[i][j] = max(horizontal_dist, vertical_dist) + 1 return matrix # 测试示例1(中心坐标为(2,2),矩阵索引从0开始) print("示例1输出:") for row in generate_concentric_matrix(5, 2, 2): print(' '.join(map(str, row))) # 测试示例2(中心坐标为(1,1),矩阵索引从0开始) print("\n示例2输出:") for row in generate_concentric_matrix(5, 1, 1): print(' '.join(map(str, row)))
逻辑说明
- 对于矩阵中的每个单元格
(i,j),计算它到中心(center_x, center_y)的横向距离horizontal_dist和纵向距离vertical_dist; - 两个距离的最大值对应该单元格所在的「同心层」——中心是第0层,向外每扩展一层数值加1;
- 代码中
+1是为了匹配示例里从1开始的填充规则,若需要从0起始,直接去掉该操作即可; - 该方法支持任意大小的矩阵,完全替代硬编码,只需传入矩阵尺寸和中心坐标即可生成目标矩阵。
内容的提问来源于stack exchange,提问作者Miss_Orchid
相关产品推荐
相关产品推荐

