matmul()函数,学习记录文档,主要是忘记的话过来看看

338 阅读2分钟

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的维数去掉。

不妨看一个例子就很好理解了。

例如:

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

结果为:

[5 11]
[7 10]

上面两种情况,print(np.matlib(a,b))时将b定义为(2x1)的矩阵,print(np.matlib(b,a))时将b定义为(1x2)的矩阵。大佬写的式子:

img

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

例如:

import numpy.matlib
import numpy as np
​
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多维的数组,它就会被理解成两个(2x4)矩阵。 b多维的数组,它就会被理解成两个(4x2)矩阵。 c多维的数组,它就会被理解成一个(4x2)矩阵。

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

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

img

\