numpy不知道为啥要搞很多种乘法,特别容易搞混(网上很多搞混的文章),*在array和matrix中的含义还不同,还造了个@运算符
array 的相乘
a = np.array([1,2,3])
b = np.array([1,2,3])
print(a*b) #[1 4 9]
print(np.multiply(a,b)) #[1 4 9]
print(a@b) #14
print(np.dot(a,b)) #14
array中*/multiply是对应元素相乘,@则是对*/dot结果求和
matrix 的相乘
a = np.matrix([[1,2,3],[4,5,6]])
b = np.matrix([[1],[2],[3]])
print(a*b)
print(a@b)
print(np.dot(a,b))
'''
三者结果均为:
[[14]
[32]]
'''
a = np.matrix([[1,2,3],[4,5,6]])
b = np.matrix([[1,2,3]])
print(np.multiply(a,b))
'''
[[ 1 4 9]
[ 4 10 18]]
'''
martix中* @ dot都是直观上的矩阵相乘,而multiply则是对应元素相乘
总结
@ dot的含义相对固定,而* multiply则容易混淆