在使用 NumPy 过程中遇到 矩阵乘积有些不清楚,查询资料做个笔记。
矩阵乘积分为三种,常用的就是第一种和第二种,以下结果以python代码为准,和线性代数有出入
矩阵乘积
百度百科:
设A为 m * p 的矩阵,B为 p* n 的矩阵,那么称 A * B 的矩阵C为矩阵A与B的乘积
python:
python称为矩阵点乘,写法为 A.dot(B) ,计算方式如下,两者相同
python 测试:
a1 = np.array([[1,2,3],[4,5,6]]) # a1为2*3矩阵
a2 = np.array([[1,2],[3,4],[5,6]]) # a2为3*2矩阵
print(a1.dot(a2))
"""
[[22 28]
[49 64]]
"""
如下所示:
哈达马积(Hadamard product)
百度百科:
设矩阵 A 和矩阵 B 都是 m*n 的矩阵,及行列相同,则称 A * B 的矩阵 C 为哈达马积,
python:
python 中称为 矩阵乘积 ,写法为 A * B
区别:
在python中,不要求 A,B 矩阵 都是 mn 矩阵,python还支持 A mn 矩阵,B为 1*n 阶矩阵
python 测试
A、B 矩阵 都是 2*3 阶矩阵,对应位置相乘, a * b = b * a
a = np.array([[4, 5, 6], [1, 2, 3]])
b = np.array([[6, 5, 4], [3, 2, 1]])
print(a*b)
"""
[[24 25 24]
[ 3 4 3]]
"""
A 33 阶矩阵,B 为 13 阶矩阵,对应位置相乘, a * b = b * a
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[7, 8, 9]])
print(a * b)
"""
[[ 7 16 27]
[28 40 54]]
"""
克罗内克积(Kronecker Product)
克罗内克积是两个任意大小的矩阵间的运算,符号记作⊗。克罗内克积也被称为直积或张量积
该乘积 python 不涉及,没看到相关方法
总结
在 python 中,点乘用的 dot() 方法,A * B 需要保证A矩阵列数等于B矩阵行数, 乘用的 * 符号