如何用矩阵乘法替代循环实现两个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
相关产品推荐
相关产品推荐

