如何用Numpy实现4×4矩阵与4×1向量相乘得到4×1结果?
用Numpy实现4×4矩阵与4×1向量的矩阵乘法
问题根源
你用A*x得到4×4矩阵,是因为Numpy里的*是逐元素乘法——当向量x是一维数组时,会触发广播机制,把x扩展成和A一样的4×4矩阵,再逐个元素相乘,结果自然是4×4。而你需要的是线性代数里的矩阵-向量乘法。
三种解决方法
下面是实现正确矩阵乘法的三种常用方式,都能得到你要的4×1结果:
1. @运算符(Python 3.5+推荐用这个)
这是Numpy专门为矩阵乘法设计的简洁写法,直接对应线性代数里的矩阵乘法规则。
2. numpy.dot()函数
传统的点积计算函数,完全支持矩阵与向量的乘法运算。
3. numpy.matmul()函数
专门用于矩阵乘法的函数,和@运算符的效果完全一致。
完整代码示例
先定义你的矩阵A和向量x:
import numpy as np # 4×4矩阵A A = np.array([ [2, 2, 1, 4], [1, -3, 2, 3], [-1, 1, -1, -1], [1, -1, 1, 2] ]) # 4×1列向量x(这里定义成二维数组,形状是(4,1)) x = np.array([[1], [0], [-1], [1]])
然后用任意一种方法计算:
方法1:@运算符
b = A @ x print(b)
方法2:np.dot()
b = np.dot(A, x) print(b)
方法3:np.matmul()
b = np.matmul(A, x) print(b)
三种方法输出的结果都是你预期的4×1矩阵:
[[ 5] [ 2] [-1] [ 2]]
额外提示
如果你的x是一维数组(比如x = np.array([1, 0, -1, 1]),形状为(4,)),用上面三种方法得到的会是一维数组,你可以用.reshape(4,1)把它转成4×1的二维矩阵:
x_1d = np.array([1, 0, -1, 1]) b = A @ x_1d b = b.reshape(4, 1)
内容的提问来源于stack exchange,提问作者Pedro Sousa
相关产品推荐
相关产品推荐

