如何使用Numpy生成示例所示的嵌套方框结构9×9矩阵
NumPy生成嵌套方框矩阵实现方法
实现思路说明
你的第二种思路是可行的,这个矩阵本质是三层嵌套的正方形边框,对应偏移量k=0、2、4的三层边框,只要给每一层边框的位置赋值为1即可。
方案1:基于全零矩阵逐层赋值
步骤:
- 生成9×9的全0整数矩阵
- 循环处理k=0、2、4三个偏移量,每次给对应子矩阵的上下左右四个边赋值为1
代码示例:
import numpy as np # 生成9x9全0矩阵 mat = np.zeros((9, 9), dtype=int) # 逐层处理嵌套边框 for k in range(0, 5, 2): # 赋值当前层上下边 mat[k, k:9-k] = 1 mat[-(k+1), k:9-k] = 1 # 赋值当前层左右边(避免重复赋值边角) mat[k+1:8-k, k] = 1 mat[k+1:8-k, -(k+1)] = 1 print(mat)
方案2:使用np.where实现
步骤:
- 用
np.indices生成矩阵每个位置的x、y坐标网格 - 写出三层嵌套边框的判断条件
- 用
np.where根据条件给对应位置赋值1,其余为0
代码示例:
import numpy as np x, y = np.indices((9, 9)) # 三层边框判断条件 cond = ( (x == 0) | (x == 8) | (y == 0) | (y == 8) | ((x >=2) & (x <=6) & (y >=2) & (y <=6) & ((x==2) | (x==6) | (y==2) | (y==6))) | (x == 4) & (y == 4) ) mat = np.where(cond, 1, 0) print(mat)
两种方案运行后输出的矩阵都和你给出的示例完全一致。如果需要生成更大尺寸的同类型矩阵,只要把尺寸改为奇数,调整循环范围或者条件判断的边界值即可。
内容的提问来源于stack exchange,提问作者sudo rm -rf
相关产品推荐
相关产品推荐

