numpy库中两种对象,数组和矩阵(ndarray,matrix),两者都有三种不同的乘法,分别是 * , dot 和multiply 三种类型。以下分别进行介绍。
1.数组(ndarray)
先不废话,直接上实例:
import numpy as np
a = np.array([[1,2,3]])
b = np.array([(1,2,3),
(4,5,6)])
print(type(a),type(b))
print("a=\n",a,"\n")
print("b=\n",b,"\n")
print("a*b=\n",a*b,"\n")
print("a.dot(b.T)=\n",a.dot(b.T),"\n")
print("b.dot(a.T)=\n",b.dot(a.T),"\n")
print("np.multiply(a,b)=\n",np.multiply(a,b),"\n")
print("np.multiply(b,a)=\n",np.multiply(b,a),"\n")
结果如下:
a=
[[1 2 3]]
b=
[[1 2 3]
[4 5 6]]
<class 'numpy.ndarray'> <class 'numpy.ndarray'>
a*b=
[[ 1 4 9]
[ 4 10 18]]
a.dot(b.T)=
[[14 32]]
b.dot(a.T)=
[[14]
[32]]
np.multiply(a,b)=
[[ 1 4 9]
[ 4 10 18]]
np.multiply(b,a)=
[[ 1 4 9]
[ 4 10 18]]
2.矩阵(matrix)
也不废话,继续上实例:
a = np.mat([[1,2,3]])
b = np.mat([(1,2,3),
(4,5,6)])
print(type(a),type(b))
print("a=\n",a,"\n")
print("b=\n",b,"\n")
# print("a*b=\n",a*b,"\n") 注意,此处报错,因为不符合矩阵乘法规则,注[1]
print("a*b.T=\n",a*b.T,"\n")
print("b*a.T=\n",b*a.T,"\n")
print("a.dot(b.T)=\n",a.dot(b.T),"\n")
print("b.dot(a.T)=\n",b.dot(a.T),"\n")
print("np.multiply(a,b)=\n",np.multiply(a,b),"\n")
print("np.multiply(b,a)=\n",np.multiply(b,a),"\n")
注[1]:矩阵相乘应满足矩阵乘法规则,即前矩阵的列数(column)和后矩阵的行数(row)相同时才有意义。
结果如下:
a=
[[1 2 3]]
b=
[[1 2 3]
[4 5 6]]
<class 'numpy.matrix'> <class 'numpy.matrix'>
a*b.T=
[[14 32]]
b*a.T=
[[14]
[32]]
a.dot(b.T)=
[[14 32]]
b.dot(a.T)=
[[14]
[32]]
np.multiply(a,b)=
[[ 1 4 9]
[ 4 10 18]]
np.multiply(b,a)=
[[ 1 4 9]
[ 4 10 18]]
3.总结
如果您比较细心的话,我相信您自己心中已经有了答案,如果您比较懒,您也可以看看我的总结。
| 类型 | 数组 | 矩阵 |
| * | 对应位置相乘 | 矩阵乘法[1] |
|
dot | 矩阵乘法[1] | 矩阵乘法[1] |
| multiply | 对应位置相乘 | 对应位置相乘 |
此外,从上表中不难发现,对于数组来说,*和multiply的作用一致。对于矩阵来说,*和dot的作用一致。
换一种说法,dot永远代表矩阵乘法,multiply永远代表对应位置相乘,而 *,对于数组是对应位置相乘,对于矩阵是矩阵乘法。
注[1]:矩阵相乘应满足矩阵乘法规则,即前矩阵的列数(column)和后矩阵的行数(row)相同时才有意义。
7921



被折叠的 条评论
为什么被折叠?



