首页 / 资讯中心 / 文章详情

NumPy 矩阵乘法详解:分清矩阵乘法和元素相乘(np.matrix/np.array)

NumPy 矩阵乘法详解:分清矩阵乘法和元素相乘(np.matrix/np.array) ★ FEATURED ARTICLE
NumPy矩阵乘法详解分清矩阵乘法和元素相乘np.matrix / np.array前言任何足够先进的技术都与魔法无异而线性代数就是理解这个魔法的咒语书。矩阵乘法是线性代数的核心运算也是机器学习、数据分析、计算机视觉里高频用到的基础操作。很多新手在用NumPy时最容易踩坑分不清「数学矩阵乘法」和「对应位置元素相乘」。 NumPy里面*、、np.matmul()、.dot()在np.matrix和普通np.array数组中的行为完全不一样一不小心就会算出错误结果。本文就结合代码实例一次性讲清楚。一、先理清核心概念一句话判断题矩阵乘法不是对应元素相乘而是行向量与列向量的点积内积这句话是正确的。矩阵乘法数学定义设矩阵 $(CAB)$$C$ 中第 $i$ 行第 $j$ 列的元素 $c_{ij}$ A的第$i$个行向量点乘B的第$j$个列向量 $$c_{ij}\sum_{k} a_{ik}b_{kj}$$要求A的列数 B的行数最终得到 m×p 的矩阵。元素对应相乘哈达玛积 Hadamard product两个矩阵形状必须完全相同相同位置元素两两相乘不是矩阵乘法。在普通np.array中用*实现。✨ 应用小科普矩阵乘法大量用于AI模型计算、短视频推荐算法、图像滤镜变换、网页排名PageRank等场景。二、np.matrix 类型*直接代表矩阵乘法⚠️ np.matrix是NumPy早期设计的类型现在官方已经不推荐使用仅用于学习理解历史设计。示例代码import numpy as np # 创建两个matrix矩阵对象 x np.matrix([[1,2,3], [4,5,6]]) y np.matrix([[1,2], [3,4], [5,6]]) # 三种写法完全等价都是矩阵乘法 print(x * y) print(x y) print(np.matmul(x, y))输出[[22 28] [49 64]] [[22 28] [49 64]] [[22 28] [49 64]]关键结论对于np.matrix对象x * y等价于x y等价于np.matmul(x,y)全部执行数学上的矩阵乘法。小贴士为什么np.matrix被淘汰np.matrix诞生于2006年设计初衷就是想让*运算符直接做矩阵乘法。 但是它和普通np.array数组混用的时候极易产生BUG。 Python3.5在2015年新增了专门用于矩阵乘法的运算符普通数组也可以优雅实现矩阵乘法np.matrix就逐步退出历史舞台。三、np.array 普通二维数组日常推荐写法我们日常开发优先使用np.array数组这里是坑最多的地方在np.array中*不再是矩阵乘法*是元素对应相乘。矩阵乘法要用/np.matmul()/.dot()示例代码import numpy as np # 创建普通ndarray二维数组 x np.array([[1,2,3], [4,5,6]]) y np.array([[1,2], [3,4], [5,6]]) # 下面三种写法等价执行矩阵乘法 print(x y) print(np.matmul(x, y)) print(x.dot(y))输出[[22 28] [49 64]]记忆口诀星号是对应位置相乘艾特才是真正矩阵乘法四、矩阵幂运算np.linalg.matrix_power矩阵幂运算是方阵连续多次矩阵相乘只有方阵才能做矩阵幂运算。 公式$A^3 A \times A \times A$import numpy as np x np.matrix([[1,-3,3], [3,-5,3], [6,-6,4]]) res np.linalg.matrix_power(x, 3) print(res)输出[[ 28 -36 36] [ 36 -44 36] [ 72 -72 64]]等价写法x ** 3或者x*x*x。应用场景马尔可夫链状态推演、PageRank网页排序、3D图形坐标变换。五、汇总对比表对象类型*运算符运算符np.matmul() / .dot()np.matrix✅矩阵乘法✅矩阵乘法✅矩阵乘法np.array❌元素相乘哈达玛积✅矩阵乘法✅矩阵乘法六、常见考点避坑总结矩阵乘法≠对应元素相乘矩阵乘法本质是行向量点乘列向量优先使用np.array尽量不要使用np.matrixnp.array数组千万不要用*做矩阵乘法要用矩阵幂运算np.linalg.matrix_power输入必须是方阵。结语矩阵乘法是数据分析和深度学习的地基分清两种乘法是NumPy入门必须跨过的一关。 很多机器学习底层运算本质就是大规模矩阵乘法。理解这些细节可以避免后续写模型代码出现隐蔽计算错误。要不要我帮你再加一个常见报错案例小节比如矩阵维度不匹配报错让博客内容更完整 另外CSDN可以加标签#numpy#Python数据分析#线性代数#矩阵。
阅读完成 · 觉得有帮助?
咨询建站