如何用Numpy实现列向量b与转置列向量c的矩阵乘法?
问题根源
numpy中的一维数组(比如[1,1])没有行/列维度的区分,np.transpose(c)不会改变它的维度,结果仍是一维数组。此时b * d执行的是元素逐位相乘(广播后的对应元素运算),所以得到的还是一维向量。
解决方法
方法1:显式转换为二维数组,使用矩阵乘法运算符@
把b转成列向量(形状(2,1)),c转成行向量(形状(1,2)),然后用@执行矩阵乘法:
import numpy as np b = np.array([1,1]) c = np.array([0,1]) # 转换b为列向量,c为行向量 b_col = b.reshape(-1, 1) # 形状(2,1) c_row = c.reshape(1, -1) # 形状(1,2) A = b_col @ c_row print(A)
输出:
[[0 1] [0 1]]
方法2:直接使用np.outer计算外积
np.outer(b, c)专门用于计算列向量b与行向量c^T的乘积,一步到位:
import numpy as np b = np.array([1,1]) c = np.array([0,1]) A = np.outer(b, c) print(A)
输出与方法1完全一致。
方法3:利用numpy广播机制实现外积
通过[:, None]给一维数组增加维度,触发广播后逐元素相乘,结果等价于目标矩阵:
import numpy as np b = np.array([1,1]) c = np.array([0,1]) A = b[:, None] * c[None, :] print(A)
输出同样符合预期。
内容的提问来源于stack exchange,提问作者sakabukayo
相关产品推荐
相关产品推荐

