通过替换成对元素为最大值实现矩阵对称化的方法咨询
矩阵对称化实现方案
实现逻辑
只需要遍历矩阵的上三角区域(i < j的位置),对每一对X[i][j]和X[j][i]取最大值,同时赋值给两个位置即可,既避免了重复处理,也完全匹配你的替换规则。
原生Python实现(无第三方依赖)
def symmetricize_matrix(matrix): n = len(matrix) # 校验输入是否为方阵 for row in matrix: if len(row) != n: raise ValueError("输入必须为方阵") # 仅遍历上三角区域避免重复计算 for i in range(n): for j in range(i + 1, n): max_val = max(matrix[i][j], matrix[j][i]) matrix[i][j] = max_val matrix[j][i] = max_val return matrix # 测试用例 Input_array = [[1, 5, 3], [1, 10, 2], [0, 9, 16]] Output_array = symmetricize_matrix(Input_array) for row in Output_array: print(row)
输出结果:
[1, 5, 3] [5, 10, 9] [3, 9, 16]
NumPy实现(简洁高效)
如果你可以使用NumPy,直接调用元素级最大值方法即可,完全不会用到你提到的矩阵乘法对称化方式:
import numpy as np input_arr = np.array([[1, 5, 3], [1, 10, 2], [0, 9, 16]]) # 取原矩阵和转置矩阵的元素级最大值,完全符合替换规则 output_arr = np.maximum(input_arr, input_arr.T) print(output_arr)
输出结果和预期完全一致。
内容的提问来源于stack exchange,提问作者sarmistha
相关产品推荐
相关产品推荐

