python numpy中multiply与*及matul 的区别说明

发布日期:2025-01-04 15:32    点击次数:115
1、对于矩阵(matrix)而言 multiply是对应元素相乘,而 * 、np.matmul() 函数 与 np.dot()函数 相当于矩阵乘法(矢量积),对应的列数和行数必须满足乘法规则;如果希望以数量积的方式进行,则必须使用 np.multiply 函数,如下所示: 结果是 [[ 1 4 9 16 25]] a = np.mat([[1, 2, 3, 4, 5]]) b = np.mat([ [1],[2],[3],[4],[5] ] ) d=a*b print(d) #a是shape(1,5),b是shape(5,1),结果是一个实数 结果是 [[55]] 2、对于数组(Array)而言 * 与 multiply均表示的是数量积(即对应元素的乘积相加),np.matmul与np.dot表示的是矢量积(即矩阵乘法)。 代码: python中转置的优先级高于乘法运算 例如: a = np.mat([[2, 3, 4]]) b = np.mat([[1,2,3]] ) d=a*b.T print(d) 结果是 [[20]] 其中a为1行3列,b也为1行3列,按理来说直接计算a*b是不能运算,但是计算d=a*b.T是可以的,结果是20,说明运算顺序是先转置再计算a与b转置的积,*作为矩阵乘法,值得注意的在执行*运算的时候必须符合行列原则。 numpy中tile()函数的用法 b = tile(a,(m,n)):即是把a数组里面的元素复制n次放进一个数组c中,然后再把数组c复制m次放进一个数组b中,通俗地讲就是将a在行方向上复制m次,在列方向上复制n次。 python中的 sum 和 np.sum 是不一样的,如果只写sum的话,表示的是数组中对应的维度相加,如果写 np.sum 的话,表示一个数组中的维数和列数上的数都加在一起。 如下图所示: 补充:总结:numpy中三个乘法运算multiply,dot和* 的区别 引言: 本人在做机器学习的练习1的时候,时常抛出错误: Not aligned是什么意思呢? 意思是两个矩阵相乘无意义。 线性代数中mxn 和 nxp的矩阵才能相乘,其结果是mxp的矩阵。 出错源代码: 这里error是一个nx1的矩阵,theta.T也是一个nx1的矩阵。 而矩阵之间*运算符表示矩阵乘法。我们这里想实现矩阵的对应元素相乘,因此应该用np.multiply()实现。 总结: (读者可使用简单的举例自行验证) 1.*用法: 矩阵与矩阵:矩阵乘法(matrix) 数组与数组:对应位置相乘(array) 2.np.dot()用法: 矩阵相乘的结果 3.np.multiply()用法: 数组、矩阵都得到对应位置相乘。 以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 您可能感兴趣的文章:Python NumPy灰度图像的压缩原理讲解Python多进程共享numpy 数组的方法python中sqllite插入numpy数组到数据库的实现方法python图像处理基本操作总结(PIL库、Matplotlib及Numpy)浅谈Python numpy创建空数组的问题Python NumPy中diag函数的使用说明Python机器学习三大件之一numpypython利用numpy存取文件案例教程