第1步:先认清题目要哪种乘法
看到“A乘B”,别急着动笔。普通矩阵乘法解决的是线性变换或数据汇总,规则是行乘列;对应元素相乘,也叫Hadamard积,要求两个矩阵形状完全相同;向量点积则把两个等长向量压成一个数。
例如A和B都是2×2矩阵,普通乘法与对应元素相乘都能做,但答案完全不同。前者会把一行与一列配对求和,后者只是同位置数字直接相乘。题目出现AB、变换、权重汇总时,默认通常是普通矩阵乘法。
矩阵相乘怎么算攻略,难点通常不是算术,而是先判断该用普通矩阵乘法、对应元素相乘,还是向量点积。本文按识别运算、检查维度、执行行乘列、快速验算四步推进,并把三种常见算法放在一起比较,帮你避开“数字算得很认真,方法却选错了”的坑。
看到“A乘B”,别急着动笔。普通矩阵乘法解决的是线性变换或数据汇总,规则是行乘列;对应元素相乘,也叫Hadamard积,要求两个矩阵形状完全相同;向量点积则把两个等长向量压成一个数。
例如A和B都是2×2矩阵,普通乘法与对应元素相乘都能做,但答案完全不同。前者会把一行与一列配对求和,后者只是同位置数字直接相乘。题目出现AB、变换、权重汇总时,默认通常是普通矩阵乘法。
设A是m×n,B是n×p,AB才有定义,结果固定为m×p。实战里可以念一句“中间相等,留下两边”:2×3乘3×4可算,答案是2×4;2×3乘2×3不能做普通乘法,却可以做对应元素相乘。维度检查比背公式更管用。
用A=[[1,2,3],[4,5,6]]、B=[[7,8],[9,10],[11,12]]演示。结果左上角取A第一行与B第一列:1×7+2×9+3×11=58;右上角换成B第二列,得到64。第二行照做,最终AB=[[58,64],[139,154]]。
这里与点积的关系很直接:结果矩阵中的每个格子,本质上都是一次向量点积。把“整块矩阵一起算”改成“逐格配对”,出错率会低很多。
先看结果是不是2×2,再抽查一个格子。全为正数时,若某个结果比参与计算的数字还离谱地小,也要回头检查是否漏加。普通乘法适合表达组合关系,对应元素乘法适合掩码、逐像素缩放,点积适合相似度或加权求和,三者没有谁更高级,只有场景是否匹配。
小矩阵建议手算并写出中间乘积;超过5×5,用NumPy、MATLAB或计算器更稳,但输入前仍要检查维度。软件能替你算数,不能替你判断乘法类型。
不能做普通矩阵乘法,因为第一个矩阵的列数3不等于第二个矩阵的行数2;可以做对应元素相乘,结果仍是2×3。
普通矩阵乘法要表达连续变换与加权汇总,因此每个结果元素必须汇集一整行和一整列的信息。对应位置直接乘属于另一种运算,即Hadamard积。
先记录A、B和预期结果的维度,再输入矩阵;输出后抽查左上角元素,手算A第一行与B第一列的点积,能快速发现录入错误。