numpy中np.multiply()、np.dot()、" * "、np.matmul()的区别与联系
类别 | np.multiply | np.dot() | " * " | np.matmul() |
---|---|---|---|---|
数组 | 对应位置相乘, 输出与原数组大小一致 |
秩为1(内积运算), 执行对应位置相乘, 然后再相加; 秩不为1的, 执行矩阵乘法运算; |
对应位置相乘 | 矩阵乘法运算 做内积 |
矩阵 | 对应位置相乘, 输出与原矩阵大小一致 |
执行矩阵乘法运算 | 矩阵乘法运算 | 矩阵乘法运算 |
数组运算 | a = array([[1, 2], [3, 4]]) b = array([[0, 1], [2, 3]]) np.multiply(a,b) |
秩不为1 a = array([[1, 2], [3, 4]]) b = array([[0, 1], [2, 3]]) np.dot(a,b) ; 秩为1, c = array([1, 2, 3]) d = array([0, 1, 2]) np.dot(c,d) #对应位置相乘,再求和 |
a= array([[1,2],[3, 4]]) b= array([[0, 1], [2, 3]]) a*b |
a = array([[1, 2], [3, 4]]) b = array([[0, 1], [2, 3]]) np.matmul(a,b) |
输出 | array([[ 0, 2], [ 6, 12]]) | array([[ 4, 7], [ 8, 15]]) ; 8 |
array([[ 0, 2], [ 6, 12]]) | array([[ 4, 7], [ 8, 15]]) |
矩阵运算 | np.multiply(np.mat(a) ,np.mat(b)) |
np.dot(np.mat(a),np.mat(b)) #执行矩阵乘法 | (np.mat(a))*(np.mat(b)) | np.matmul (np.mat(a),np.mat(b)) |
输出 | matrix([[ 0, 2], [ 6, 12]]) | matrix([[ 4, 7], [ 8, 15]]) | matrix([[ 4, 7], [ 8, 15]]) | matrix([[ 4, 7], [ 8, 15]]) |
特别提示:
np.dot:
数组中如果a或者b中有一个是标量,则np.dot等同于np.multiply()或者" * "
如果a是N-D数组,b是1-D数组,答案是,a和b最后一个轴的乘积
例:
# 2-D array: 2 x 3
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([1,2,3])
result_ab = np.dot(a,b)
print('result_ab:\n %s' %(result_ab))
结果:
result_ab:
[14 32]