【发布时间】:2017-04-05 13:40:38
【问题描述】:
我在理解 numpy dot 函数和广播背后的工作时遇到问题。下面是我想要理解的 sn-p
a=np.array([[1,2],[3,5]])
如果我们检查 a 的形状
a.shape
它将是(2,2)
b=np.array([3,6])
和b.shape is (2,)
问题1:b是列向量还是行向量?在提供输入时,b 似乎是行向量,但随后形状将其显示为具有 2 行的列向量。我的理解有什么问题?
现在如果这样做
a.dot(b)
它导致
array([15,39])
问题2:根据矩阵乘法,如果a 是m*n,那么b 必须是n*k,并且由于a 是2*2,那么b 必须是2*1。这是否验证b 是列向量,否则如果它是行向量,则矩阵乘法将不可能,但点积的输出确实根据矩阵乘法给出值,将b 视为列向量和广播它
现在b.dot(a) 也是可能的,结果是
array([21,36])和
这让我大吃一惊。他们如何检查矩阵乘法向量的兼容性以及如何计算?
在至少一种情况下,他们必须抛出不兼容维度的错误以进行乘法运算。但它没有显示出来,他们正在计算两种情况下的结果。
【问题讨论】:
-
a=np.array([[1,2],[3,5]) 这必须是 a=np.array([[1,2],[3,5]] )。数组积和矩阵积是不同的。我建议您了解差异
标签: python numpy array-broadcasting