使用Numpy执行矩阵运算得到错误结果,求问题排查方法
矩阵乘法结果错误的原因及解决方法
你遇到的问题和浮点数处理无关,核心是用错了乘法函数:
np.multiply(arr1, arr2)执行的是逐元素相乘,也就是两个矩阵对应位置的元素直接相乘,这不是线性代数中定义的矩阵乘法。- 要实现标准矩阵乘法,你需要用以下三种方式之一:
正确代码示例
import numpy as np np.set_printoptions(formatter={'float': lambda x: "{0:0.2f}".format(x)}) # deltaT arr1 = np.array([[0, 0.01, 0, 0.1], [0, -0.05, 0, 0], [0.05, 0, -0.01, 0], [0, 0, 0, 0]]) # T1inv arr2 = np.array([[0., 1., 0., -5], [0, 0, 1, -2], [1, 0, 0, -8], [0, 0, 0, 1]]) # 标准矩阵乘法(三种选其一即可) arr3 = arr1 @ arr2 # 推荐用这个运算符,直观简洁 # arr3 = np.dot(arr1, arr2) # arr3 = np.matmul(arr1, arr2) print(arr3)
运行后输出的结果会和在线矩阵求解器的结果一致,比如第一行结果为 [0.00 0.00 0.01 0.08],完全符合线性代数矩阵乘法的计算逻辑。
内容的提问来源于stack exchange,提问作者fender
相关产品推荐
相关产品推荐

