numpy中matmul的使用

简介:
       numpy.matmul 函数返回两个数组的矩阵乘积。当两个数组都是二维数组的时候,就是数学上的两个矩阵的乘积。

例如:

import numpy.matlib 
import numpy as np 
 
a = [[1,0],[0,1]] 
b = [[4,1],[2,2]] 
print (np.matmul(a,b))

结果:

[[4  1] 
 [2  2]]

1.如果第一个参数或者第二个参数是1 维的,它会提升该参数为矩阵(根据另一个参数维数,给该参数增加一个为1的维数)。矩阵相乘之后会将为1的维数去掉。

import numpy.matlib 
import numpy as np 

a = [[1,2],[3,4]] 
b = [1,2] 
print (np.matmul(a,b))
print (np.matmul(b,a))

结果:

[ 5 11]
[ 7 10]

上面这两种情况,会分别将b提升为(2x1)的矩阵和(1x2)的矩阵。即:

python numpy mat python numpy matmul_python numpy mat


2.如果某一个参数是N(N>2) )维的,该参数被理解为一些矩阵(参数的最后两个维数为矩阵维数)的stack,而且计算时会相应的广播。

a = np.arange(2*2*4).reshape((2,2,4))
b = np.arange(2*2*4).reshape((2,4,2))
c = np.arange(1*2*4).reshape((1,4,2))
print(np.matmul(a,b))
print()
print(np.matmul(a,c))

结果:

[[[ 28  34]
  [ 76  98]]
  
  [[428 466]
  [604 658]]]

[[[ 28  34]
  [ 76  98]]
  
  [[124 162]
  [172 226]]]

a多维的数组,它就会被理解成两个(2x2)矩阵。
b多维的数组,它就会被理解成两个(4x2)矩阵。
c多维的数组,它就会被理解成一个(4x2)矩阵

那么np.matmul(a,b)则会将a的第一个矩阵和b的第一个矩阵相乘,将a的第二个矩阵b 的第二个矩阵相乘,最终得到一个2×2×2 的结果。

np.matmul(a,c)的情况,由于,c只有一个矩阵,所以它会广播一个矩阵与a的第二个矩阵相乘。

python numpy mat python numpy matmul_matmul_02