| 情况 | A*B | np.dot(A,B) | np.multiply(A,B) |
|---|---|---|---|
| A.shape=(1,m);B.shape=(1,1) | C.shape = (1,m) A行向量扩大b倍 | ValueError | 同 * 运算法则 |
| A.shape=(1,m);B.shape=(1,n) | C.shape = (1,m) 相同坐标的元素相乘。注:当且仅当n=m成立 | ValueError | 同 * 运算法则 |
| A.shape=(1,m);B.shape=(n,1) | C.shape = (n,m) 行向量扩大bi(i=1-n)倍,结果独占一行 | C.shape = (1,1) 向量点乘法则。注:当且仅当n=m成立 | 同 * 运算法则 |
| A.shape=(n,m);B.shape=(l,o) | C.shape = (n,m) 相同坐标的元素相乘。注:当且仅当m=o时成立 | C.shape = (n,o) 相同坐标的元素相乘。注:当且仅当m=l成立 | 同 * 运算法则 |
总结:
np.dot(a,b) 遵循矩阵向量运算规则
np.multiply(A,B)和 A*B两者遵循相同的运算规则,更偏向于列向量相同矩阵向量相乘。(也就适用于机器学习列向量代表样本数量)
附上 写笔记用的测试代码
import numpy as np # 行向量、数 # a = np.array([[1, 2, 3]]) # b = np.array([[2]]) # 行向量、行向量 # a = np.array([[1, 2, 3]]) # b = np.array([[2, 2, 3]]) # b = np.array([[2, 2]]) # 行向量、列向量 # a = np.array([[1, 2, 3]]) # # b = np.array([[2],[ 2],[3]]) # b = np.array([[2], [2]]) # 矩阵、矩阵 # a = np.array([[1, 2,1], [3, 4,1]]) # b = np.array([[2, 2, 1], [1, 1,1]]) a = np.array([[1, 2,1], [3, 4,1]]) b = np.array([[2, 2, 1]]) # a = np.array([[1, 2], [3, 4]]) # b = np.array([[2, 2], [1, 1]]) # a = np.array([[1, 2], [3, 4], [1, 1]]) # b = np.array([[2], [2]]) print(a * b) # print(np.dot(a, b)) print(np.multiply(a,b))



