如何利用对称性借助numpy从对称矩阵的八分扇区生成完整矩阵
八重对称矩阵八分扇区还原实现(numpy版)
该需求完全可以通过numpy实现。你给出的输入是9×9八重对称矩阵的1/8扇区数据,利用矩阵的八重对称特性(关于主对角线、副对角线、水平中线、垂直中线均对称),仅需要遍历输入的少量元素,赋值到对应8个对称位置即可得到完整矩阵。
实现代码
import numpy as np # 输入的八分扇区数据 arr_in = [[1], [0, 0], [0, 0, 1], [0, 0, 0, 0], [0, 1, 0, 1, 0]] sector_size = len(arr_in) n = 2 * sector_size - 1 # 自动计算完整矩阵边长,此处输出为9 center = n // 2 # 矩阵中心坐标,此处为4 full_mat = np.zeros((n, n), dtype=int) # 遍历八分扇区所有元素,赋值到8个对称位置 for dy in range(sector_size): for dx in range(dy + 1): val = arr_in[dy][dx] full_mat[center+dx, center+dy] = val full_mat[center+dy, center+dx] = val full_mat[center+dx, center-dy] = val full_mat[center+dy, center-dx] = val full_mat[center-dx, center+dy] = val full_mat[center-dy, center+dx] = val full_mat[center-dx, center-dy] = val full_mat[center-dy, center-dx] = val # 打印结果验证 for row in full_mat: print(' '.join(map(str, row)))
输出结果
运行上述代码后,输出结果和你给出的预期矩阵完全一致:
0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 1 0 1 0 1 0 1 0 1 0
如果输入的扇区长度变化,仅需要修改arr_in即可,代码会自动适配对应边长的对称矩阵。
内容的提问来源于stack exchange,提问作者MUD
相关产品推荐
相关产品推荐

