在NumPy中能否实现矩阵逐行点积运算?
逐行计算两个NumPy数组的点积
当然可行,针对你给出的数组,我们可以通过多种NumPy内置方法实现逐行点积的计算,得到目标输出y = np.array([28, 28, 28, 28])。以下是几种常用方案:
方法1:逐元素相乘后按行求和
这是最直观的方式,先对两个数组逐元素相乘,再沿着行维度(axis=1)求和,结果就是每行的点积:
import numpy as np X = np.array([[1., 2., 3.], [1., 2., 3.], [1., 2., 3.], [1., 2., 3.]]) B = np.array([[2, 4, 6], [2, 4, 6], [2, 4, 6], [2, 4, 6]]) y = np.sum(X * B, axis=1) print(y) # 输出: [28. 28. 28. 28.]
方法2:使用np.einsum指定维度运算
einsum可以灵活定义数组间的维度运算规则,'ij,ij->i'表示对两个数组的第i行第j列元素相乘,最后沿j维度求和得到第i个结果:
y = np.einsum('ij,ij->i', X, B) print(y) # 输出: [28. 28. 28. 28.]
方法3:矩阵乘法结合取对角线
将B转置后与X做矩阵乘法,结果矩阵的对角线元素就是每行的点积(此方法适合理解矩阵乘法与点积的关系,但前两种更直接):
y = np.dot(X, B.T).diagonal() print(y) # 输出: [28. 28. 28. 28.]
内容的提问来源于stack exchange,提问作者fourloops
相关产品推荐
相关产品推荐

