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

如何用矩阵乘法替代循环实现两个n×k二维数组的列间点积?

矩阵乘法实现方案

首先明确矩阵定义:设第一个n×k矩阵为A,第二个同维度矩阵为B。

两种场景的对应解法

场景1:计算A的每一列与B的每一列的点积(结果为k×k矩阵)

如果你的需求是得到一个k×k矩阵,其中每个位置[i][j]的值是A的第i列与B的第j列的点积,那么直接用A的转置乘以B即可,对应表达式:

C = A^T @ B

这里A^T表示A的转置(维度变为k×n),与B(n×k)相乘后得到k×k矩阵,完全匹配列与列点积的结果要求。

场景2:得到n×n结果矩阵的正确解法

如果确定需要输出n×n矩阵,那么你可能混淆了点积的应用场景,此时可以通过A乘以B的转置实现,对应表达式:

C = A @ B^T

这个操作得到的n×n矩阵中,每个位置[i][j]的值是A的第i行与B的第j行的点积。如果你的实际需求是将A的所有列与B的所有列的外积求和(最终得到n×n矩阵),这个计算方式也完全等价——因为矩阵乘法A@B^T本质就是所有列外积的累加。

验证示例

假设n=2,k=3:

  • A = [[1,2,3],[4,5,6]]
  • B = [[7,8,9],[10,11,12]]

计算A^T @ B得到3×3矩阵,其中[0][0]是A的第0列[1,4]与B的第0列[7,10]的点积:1×7 +4×10=47,完全符合列点积的结果。

计算A @ B^T得到2×2矩阵,其中[0][1]是A的第0行[1,2,3]与B的第1行[10,11,12]的点积:1×10+2×11+3×12=68,对应行点积的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:15:32