[英]Numpy Matrix Multiplication Explanation
我正在做一些数学练习,但我不明白为什么我的 numpy 矩阵乘法不起作用。
所以我有:
t = np.array([[6,-1],[2,3]])
c = np.array([[1,1], [1,2]])
cinv = np.linalg.inv(c)
这给了我:
t:
[[ 6 -1]
[ 2 3]]
c:
[[1 1]
[1 2]]
cinv:
[[ 2. -1.]
[-1. 1.]]
现在,当我运行我的方程式时,我得到以下信息:
cinv*t*c
array([[12., 1.],
[-2., 6.]])
这是不正确的。 我做了几次,正确的答案是 (5,0)(0,4)。 为什么乘法是由 position 而不是行 * 列进行的?
有人可以帮我解决我在这里做错的事情吗?
使用*
进行元素乘法,而不是点积。 使用@
进行点积乘法。 这是 Numpy 重载运算符的选择。 事实上,在最初的 Python 设计中, @
被指定用于矩阵乘法,这可能就是这种情况的原因。
import numpy as np
t = np.array([[6,-1],[2,3]])
c = np.array([[1,1], [1,2]])
cinv = np.linalg.inv(c)
print(cinv@t@c)
"""
Result:
[[5. 0.]
[0. 4.]]
"""
很多时候,我发现使用严格的函数而不是重载的运算符更容易阅读(尽管它们会很快变得拥挤)。
np.dot(A, B)
或A.dot(B)
用作点积
这里有一些关于每个符号做什么的文档,明确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.