一、關於python中的矩陣乘法,我們一般有兩種數據格式可以實現:np.array()類型和np.mat()類型;
對於這兩種數據類型均有三種操作方式:
(1)乘號 *
(2)np.dot()
(3)np.multiply()
而這三種操作方式在操作這兩種數據格式時又有點區別,下面一一列出來:
import numpy as np #np.array() type #1. np.dot() a = np.array([[1 , 2] , [3 , 4]] , dtype = np.float) b = np.array([[1 , 2] , [3 , 4]] , dtype = np.float) c = np.dot(a , b) print(c) #output:[[ 7. 10.],[ 15. 22.]] #2. * d = a * b print(d) #output:[[ 1. 4.],[ 9. 16.]] #3. np.multiply() e = np.multiply(a , b) print(e) #output:[[ 1. 4.],[ 9. 16.]] #np.mat() type #4. * A = np.mat([[1 , 2] , [3 , 4]] , dtype = np.float) B = np.mat([[1 , 2] , [3 , 4]] , dtype = np.float) C = A * B print(C) #output:[[ 7. 10.],[ 15. 22.]] #5. np.dot() D = np.dot(A , B) print(D) #output:[[ 7. 10.],[ 15. 22.]] #6. np.multiply() E = np.multiply(A , B) print(E) #output:[[ 1. 4.],[ 9. 16.]] # np.mat() * np.array() F = A * a; print(F) #output:[[ 7. 10.],[ 15. 22.]]
由上面的代碼可以總結如下:
(1)np.dot()對於這兩種數據格式均為矩陣乘法;
(2)np.multiply()對於這兩種數據格式均為按元素相乘;
(3)符號“*”對於array類型是矩陣乘法,對於mat類型是按元素類型相乘,而當一個array類型乘上一個mat類型時,則為矩陣乘法;
二、pytorch中的乘法:
(1)矩陣相乘:torch.mm();
(2)對應元素點乘:torch.mul();