矩阵乘法主要分为两种:元素乘和矩阵乘。
矩阵乘则是一般意义上的矩阵乘法,可以使用
- C = A @ B
- C = np.matmul(A,B)
- C = np.dot(A,B)
矩阵乘的条件很明确,即是A的列数必须等于B的行数。
元素乘(也叫点乘)即是两个矩阵元素之间的乘法,可以使用
- C = A*B
- C = np.multiply(A,B)
按道理元素乘必须满足A和B的行数和列数都相同,但是实际做两个numpy array的元素乘却很灵活,可以一个矩阵乘以一个数n得到的矩阵里每一个元素都被乘了n,甚至可以一个3×3的矩阵乘以一个1×3的矩阵,但是究竟那些矩阵之间可以做元素乘,各种说法并不统一。今天做了实验总结了以下规律:
A和B可以做元素乘必须满足两个条件:
- A的行数和B的行数相同或其中一个矩阵的行数为1,即Row(A)==Row(B) || Row(A)==1 || Row(B)==1;
- A的列数和B的列数相同或其中一个矩阵的列数为1,即Col(A)==Col(B) || Col(A)==1 || Col(B)==1。
根据这个规则:
- 一个2×2的矩阵和一个2×2的矩阵可以元素乘;
- 一个4×2的矩阵和一个1×2的矩阵可以元素乘;
- 一个4×2的矩阵和一个1×1的矩阵可以元素乘;
- 一个4×1的