如何创建外围为1、向中心递增的矩阵?
解决方案
标准对称矩阵(符合外围为1、向中心递增的需求)
你需要的矩阵可以通过计算每个位置到上下左右四个边界的最小步数(包含自身)来实现,用列表推导式就能一行完成:
dims = (5,5) m = [min(i, dims[1]-i+1, j, dims[2]-j+1) for i in 1:dims[1], j in 1:dims[2]]
运行后得到的矩阵:
5×5 Matrix{Int64}: 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1
这个矩阵完全符合「外围行/列元素为1,数值向中心递增」的描述,逻辑简洁,不需要手动复制三角区域。
针对你给出的特殊非对称矩阵
如果你确实需要示例中第五行为1 2 1 1 1的非对称矩阵,可以在标准矩阵基础上修改特定区域,或者直接在生成时添加判断:
dims = (5,5) # 直接生成目标矩阵 m = [i == 5 && j >= 3 ? 1 : min(i, dims[1]-i+1, j, dims[2]-j+1) for i in 1:dims[1], j in 1:dims[2]]
运行后得到:
5×5 Matrix{Int64}: 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 2 1 1 1
不过这个非对称矩阵并不完全符合「向中心递增」的常规逻辑,大概率是输入时的笔误,优先推荐标准对称的解法。
内容的提问来源于stack exchange,提问作者flee
相关产品推荐
相关产品推荐

