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

如何用Numpy无需分配矩阵计算行存储向量数组的点积?

Numpy计算行向量数组的逐元素点积优化方案

给定形状均为(M, 2)的数组a和b,两者各包含M个2维行向量,需求是计算对应位置向量的点积(即沿轴0的ab^T结果)。

原实现代码

np.diag( ( a @ b[:, :, None]).reshape(a.shape[0], a.shape[0]) )

这个实现虽然可行,但会生成一个M×M的中间矩阵,内存开销大,存在更高效的无中间矩阵实现方式:

优化方案

  • 元素级乘法求和:直接对两个数组对应元素相乘,再沿轴1求和,完全避免中间大矩阵的生成:
    (a * b).sum(axis=1)
    
  • 爱因斯坦求和约定:用np.einsum直观表述对应元素相乘后求和的逻辑,同样无中间矩阵:
    np.einsum('ij,ij->i', a, b)
    

方案说明

原实现通过构造高维数组做矩阵乘法,生成了不必要的M×M外积矩阵,再取对角线得到结果。优化后的两种方法都是直接针对每个行向量做计算,时间和空间复杂度均为O(M),远优于原方案的O(M²)内存开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 13:17:49