电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python numpy中multiply與*及matul 的區別說明

瀏覽:5日期:2022-06-18 11:19:45
1、對于矩陣(matrix)而言

multiply是對應元素相乘,而 * 、np.matmul() 函數 與 np.dot()函數 相當于矩陣乘法(矢量積),對應的列數和行數必須滿足乘法規則;如果希望以數量積的方式進行,則必須使用 np.multiply 函數,如下所示:

a = np.mat([[1, 2, 3, 4, 5]])b = np.mat([[1,2,3,4,5]])c=np.multiply(a,b)print(c)

結果是

[[ 1 4 9 16 25]]a = np.mat([[1, 2, 3, 4, 5]])b = np.mat([ [1],[2],[3],[4],[5] ] )d=a*bprint(d) #a是shape(1,5),b是shape(5,1),結果是一個實數

結果是

[[55]]

2、對于數組(Array)而言

* 與 multiply均表示的是數量積(即對應元素的乘積相加),np.matmul與np.dot表示的是矢量積(即矩陣乘法)。

代碼:

if __name__ == ’__main__’: w = np.array([[1,2],[3,4]]) x = np.array([[1,3],[2,4]]) w1 = np.array([[1,2],[3,4]]) x1 = np.array([[1,2]]) w_mat = np.mat([[1,2],[3,4]]) x_mat = np.mat([[1,3],[2,4]]) print('x1.shape:',np.shape(x1)) w_x_start = w*x w_x_dot = np.dot(w,x) x_w_dot = np.dot(x,w) w_x_matmul = np.matmul(w, x) x_w_matmul = np.matmul(x, w) w_x_multiply = np.multiply(w,x) x_w_multiply = np.multiply(x, w) #w1_x1_matmul = np.matmul(w1, x1) x1_w1_matmul = np.matmul(x1, w1) w_x_mat_matmul = np.matmul(w_mat,x_mat) x_w_mat_matmul = np.matmul(x_mat, w_mat) w_x_mat_start = w_mat*x_mat x_w_mat_start = x_mat*w_mat w_x_mat_dot = np.dot(w_mat,x_mat) x_w_mat_dot = np.dot(x_mat,w_mat) w_x_mat_multiply = np.multiply(w_mat,x_mat) x_w_mat_multiply = np.multiply(x_mat,w_mat) print('W.shape:', np.shape(w)) print('x.shape:', np.shape(x)) print('w_x_start.shape:', np.shape(w_x_start)) print('w_x_dot.shape:', np.shape(w_x_dot)) print('x_w_dot.shape:', np.shape(x_w_dot)) print('x1_w1_matmul.shape::', np.shape(x1_w1_matmul)) print('做Array數組運算時:', ’n’) print('w_x_start:', w_x_start) print('w_x_dot:', w_x_dot) print('x_w_dot:', x_w_dot) print('w_x_matmul:', w_x_matmul) print('x_w_matmul:', x_w_matmul) print('w_x_multiply:', w_x_multiply) print('x_w_multiply:', x_w_multiply) # print('w1_x1_matmul:', w1_x1_matmul) print('x1_w1_matmul:', x1_w1_matmul) print('做matrix矩陣運算時:', ’n’) print('w_x_mat_start:', w_x_mat_start) print('x_w_mat_start:', x_w_mat_start) print('x_w_mat_dot:', x_w_mat_dot) print('w_x_mat_dot:', w_x_mat_dot) print('w_x_mat_matmul:',w_x_mat_matmul) print('x_w_mat_matmul:', x_w_mat_matmul) print('w_x_mat_multiply',w_x_mat_multiply) print('x_w_mat_multiply', x_w_mat_multiply)

x1.shape: (1, 2)W.shape: (2, 2)x.shape: (2, 2)w_x_start.shape: (2, 2)w_x_dot.shape: (2, 2)x_w_dot.shape: (2, 2)x1_w1_matmul.shape:: (1, 2)做Array數組運算時: w_x_start: [[ 1 6] [ 6 16]]w_x_dot: [[ 5 11] [11 25]]x_w_dot: [[10 14] [14 20]]w_x_matmul: [[ 5 11] [11 25]]x_w_matmul: [[10 14] [14 20]]w_x_multiply: [[ 1 6] [ 6 16]]x_w_multiply: [[ 1 6] [ 6 16]]x1_w1_matmul: [[ 7 10]]做matrix矩陣運算時: w_x_mat_start: [[ 5 11] [11 25]]x_w_mat_start: [[10 14] [14 20]]x_w_mat_dot: [[10 14] [14 20]]w_x_mat_dot: [[ 5 11] [11 25]]w_x_mat_matmul: [[ 5 11] [11 25]]x_w_mat_matmul: [[10 14] [14 20]]w_x_mat_multiply [[ 1 6] [ 6 16]]x_w_mat_multiply [[ 1 6] [ 6 16]]

python中轉置的優先級高于乘法運算 例如:

a = np.mat([[2, 3, 4]])b = np.mat([[1,2,3]] )d=a*b.Tprint(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 的話,表示一個數組中的維數和列數上的數都加在一起。

如下圖所示:

python numpy中multiply與*及matul 的區別說明

補充:總結:numpy中三個乘法運算multiply,dot和* 的區別

引言:

本人在做機器學習的練習1的時候,時常拋出錯誤:

python numpy中multiply與*及matul 的區別說明

Not aligned是什么意思呢?

意思是兩個矩陣相乘無意義。

線性代數中mxn 和 nxp的矩陣才能相乘,其結果是mxp的矩陣。

出錯源代碼:

def gradientDescent(X,y,theta,alpha,iteration): colunms = int(theta.ravel().shape[1]) thetai = np.matrix(np.zeros(theta.shape)) cost = np.zeros(iteration) for i in range(iteration):error = X*theta.T-yfor j in range(colunms): a = np.sum(error*X[:,j])/len(X) ########## error! thetai[0,j] = thetai[0,j] - alpha*a theta = thetai cost[i] = computeCost(X, y, theta) return theta,cost

這里error是一個nx1的矩陣,theta.T也是一個nx1的矩陣。

而矩陣之間*運算符表示矩陣乘法。我們這里想實現矩陣的對應元素相乘,因此應該用np.multiply()實現。

總結:

(讀者可使用簡單的舉例自行驗證)

1.*用法:

矩陣與矩陣:矩陣乘法(matrix)

數組與數組:對應位置相乘(array)

2.np.dot()用法:

矩陣相乘的結果

3.np.multiply()用法:

數組、矩陣都得到對應位置相乘。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 垃圾处理设备_餐厨垃圾处理设备_厨余垃圾处理设备_果蔬垃圾处理设备-深圳市三盛环保科技有限公司 | 短信通106短信接口验证码接口群发平台_国际短信接口验证码接口群发平台-速度网络有限公司 | 北京浩云律师事务所-法律顾问_企业法务_律师顾问_公司顾问 | MOOG伺服阀维修,ATOS比例流量阀维修,伺服阀维修-上海纽顿液压设备有限公司 | 缠膜机|缠绕包装机|无纺布包装机-济南达伦特机械设备有限公司 | 拼装地板,悬浮地板厂家,悬浮式拼装运动地板-石家庄博超地板科技有限公司 | 煤矿人员精确定位系统_矿用无线通信系统_煤矿广播系统 | 明渠式紫外线杀菌器-紫外线消毒器厂家-定州市优威环保 | 地磅-地秤-江阴/无锡地磅-江阴天亿计量设备有限公司_ | 冲击式破碎机-冲击式制砂机-移动碎石机厂家_青州市富康机械有限公司 | 纯水电导率测定仪-万用气体检测仪-低钠测定仪-米沃奇科技(北京)有限公司www.milwaukeeinst.cn 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 手术室净化装修-手术室净化工程公司-华锐手术室净化厂家 | 懂研帝_专业SCI论文润色机构_SCI投稿发表服务公司 | 玻璃钢型材-玻璃钢风管-玻璃钢管道,生产厂家-[江苏欧升玻璃钢制造有限公司] | 路面机械厂家| 手持气象站_便携式气象站_农业气象站_负氧离子监测站-山东万象环境 | 污水提升器,污水提升泵,地下室排水,增压泵,雨水泵,智能供排水控制器-上海智流泵业有限公司 | 实木家具_实木家具定制_全屋定制_美式家具_圣蒂斯堡官网 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 福建珂朗雅装饰材料有限公司「官方网站」 | 防火门|抗爆门|超大门|医疗门|隔声门-上海加汇门业生产厂家 | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 开业庆典_舞龙舞狮_乔迁奠基仪式_开工仪式-神挚龙狮鼓乐文化传媒 | 吲哚菁绿衍生物-酶底物法大肠菌群检测试剂-北京和信同通科技发展有限公司 | NBA直播_NBA直播免费观看直播在线_NBA直播免费高清无插件在线观看-24直播网 | 天津试验仪器-电液伺服万能材料试验机,恒温恒湿标准养护箱,水泥恒应力压力试验机-天津鑫高伟业科技有限公司 | 深圳标识制作公司-标识标牌厂家-深圳广告标识制作-玟璟广告-深圳市玟璟广告有限公司 | 成都亚克力制品,PVC板,双色板雕刻加工,亚克力门牌,亚克力标牌,水晶字雕刻制作-零贰捌广告 | 顺景erp系统_erp软件_erp软件系统_企业erp管理系统-广东顺景软件科技有限公司 | 南京精锋制刀有限公司-纵剪机刀片_滚剪机刀片_合金刀片厂家 | 老房子翻新装修,旧房墙面翻新,房屋防水补漏,厨房卫生间改造,室内装潢装修公司 - 一修房屋快修官网 | 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 | 搬运设备、起重设备、吊装设备—『龙海起重成套设备』 | 软文世界-软文推广-软文营销-新闻稿发布-一站式软文自助发稿平台 | 恒温槽_恒温水槽_恒温水浴槽-上海方瑞仪器有限公司 | 五轴加工中心_数控加工中心_铝型材加工中心-罗威斯 | 便携式表面粗糙度仪-彩屏硬度计-分体式粗糙度仪-北京凯达科仪科技有限公司 | 飞行者联盟-飞机模拟机_无人机_低空经济_航空技术交流平台 | 冲击式破碎机-冲击式制砂机-移动碎石机厂家_青州市富康机械有限公司 | 苏州伊诺尔拆除公司_专业酒店厂房拆除_商场学校拆除_办公楼房屋拆除_家工装拆除拆旧 | 煤粉取样器-射油器-便携式等速飞灰取样器-连灵动 | 筒瓦厂家-仿古瓦-寺庙-古建琉璃瓦-宜兴市古典园林建筑陶瓷厂有限公司 |