目录
1 引言
矩阵相乘分为叉乘和点乘,叉乘就是矩阵的乘法,指矩阵A的第一行乘以矩阵B的第一列,各个元素对应相乘后求和作为第一个元素的值。能够进行叉乘运算的场景:A的列数等于B的行数。
矩阵的点乘就是矩阵A和矩阵B各个对应元素的相乘。能够进行点乘运算的场景:①A和B的行向量个数相等;② A和B的列向量的个数相等;③ A和B的行向量和列向量都相等。
在matlab里面实现点乘用“.*”,实现叉乘用“*”,非常清晰明了。但是在Python里面实现矩阵相乘时经常会报错,原因是在Python里面向量和矩阵的概念和数学里面的概念有点差异。
2 Python里向量和矩阵的概念
Pyhton的向量和矩阵是严格区分开来的,这个和数学上(或者Matlab里)的概念是不一样的:
向量:一维;
矩阵:最少是二维。
举例:
import numpy as np
A=np.array([1,2,3]) #一维向量,shape=(3,)
B=np.array([[1,2,3]]) #二维数组,shape=(1,3)
print(f'A={A}')
print(f'B={B}')
print(f'A.shape={A.shape}')
print(f'B.shape={B.shape}')
print(f'A.T={A.T}')
print(f'B.T={B.T}')
运行结果如下:
A=[1 2 3]
B=[[1 2 3]]
A.shape=(3,)
B.shape=(1, 3)
A.T=[1 2 3]
B.T=
[[1]
[2]
[3]]
代码中:
① A是向量,其shape为(3,);其B是行数为1的二维数组,其shape为(1,3);
② 向量没有转置的概念。A的转置还是A,而B的转置是从行数为1的二维数组变成了列数为1的二维数组,这一点和matlab里面是不一样的。
由于以上两点原因,在计算矩阵相乘时,初学者很容易犯错。