实现矩阵与其转置相乘无输出结果,请求技术排查
代码问题排查与修正
问题点分析
缩进错误导致逻辑断裂
函数multiply_At_A里的return matrix被放在了外层i循环内部,第一次循环迭代后就直接返回空矩阵,后续定义测试矩阵和打印的代码永远不会执行。而且测试代码本就不该放在函数内部。运算符误用
计算矩阵元素时用了==比较符号,而非=赋值符号,导致matrix始终是初始的全零矩阵,根本没完成计算。索引逻辑错误
矩阵转置相乘(A^T * A)的元素计算逻辑有误,正确的计算应该是对原矩阵第k行的第i列和第j列元素相乘后累加,原代码的索引顺序搞反了。函数未被调用
原代码没有调用定义好的multiply_At_A函数,就算前面的问题都修复,也不会触发计算。
修正后的代码
import numpy as np def multiply_At_A(A): dim1 = A.shape[0] dim2 = A.shape[1] matrix = np.zeros([dim2, dim2]) for i in range(dim2): for j in range(dim2): total = 0 for k in range(dim1): # 修正索引逻辑,累加计算元素值 total += A[k, i] * A[k, j] matrix[i, j] = total return matrix # 测试代码移到函数外部,并调用函数 A = np.array([[1,2,3],[4,5,6],[7,8,9]]) result = multiply_At_A(A) print(result)
更高效的实现方式
numpy内置了矩阵转置相乘的高效运算,完全不需要手动写嵌套循环:
import numpy as np A = np.array([[1,2,3],[4,5,6],[7,8,9]]) # 使用@运算符或者np.dot实现矩阵乘法 result = A.T @ A print(result)
内容的提问来源于stack exchange,提问作者Medha Shringari
相关产品推荐
相关产品推荐

