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)的矩阵。大佬写的式子:
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的第二个矩阵相乘。
\