You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Numpy向量化实现矩阵与另一矩阵逐行的点积运算

问题原因

你直接调用np.dot(a, b)报错的核心原因是:Numpy中对两个二维数组执行np.dot时会按照矩阵乘法规则运算,要求第一个矩阵的列数等于第二个矩阵的行数,你的a形状为(3,2),b形状为(100,2),显然不满足该匹配规则。

向量化解决方案

方案1:矩阵乘法(最简洁)

只需要把b做转置,将形状变为(2, 100),就可以直接用矩阵乘法实现需求:

import numpy as np

a = np.array([[1, 2], [3, 4], [5, 6]])
b = np.random.randint(1, 10, size=(100, 2)) # 模拟100行的b矩阵

z = a @ b.T # 也可以写为np.dot(a, b.T),@是Python3.5+支持的矩阵乘法运算符

此时输出的z形状为(3, 100),其中z[:, i]就完全等价于np.dot(a, b[i])的结果,和需求完全匹配。

方案2:einsum实现(灵活度更高)

如果后续需要调整维度匹配规则,用np.einsum会更方便,写法如下:

z = np.einsum('ij,kj->ik', a, b)

得到的结果和方案1完全一致。

方案3:广播逐乘求和

也可以通过扩展维度广播计算,再对最后一维求和得到结果:

z = (a[:, np.newaxis] * b).sum(axis=-1)

结果验证

你可以直接取对应位置验证结果是否匹配:

print(np.allclose(z[:, 0], np.dot(a, b[0]))) # 输出True
print(np.allclose(z[:, 1], np.dot(a, b[1]))) # 输出True

内容的提问来源于stack exchange,提问作者Ami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:36:03