如何判断A * B是Numpy中的Hadamard还是Dot产品?

时间:2015-05-25 11:33:17

标签: python numpy linear-algebra matrix-multiplication dot-product

如果我在导入numpy的python代码中看到以下行:

c = a * b

确定此操作是以Hadamard(元素方式)还是点积(逐点)操作执行的最简单,最实用的方法是什么?

对于Hadamard产品,A和B的列和行大小必须相同才是正确的。对于点积,只有A的列大小必须与B的行大小相同,对吗?所以我可以查找两者的形状并找出使用的操作?

1 个答案:

答案 0 :(得分:9)

这在PEP 465中讨论过。简而言之,它取决于AB的类型。如果他们是numpy.ndarray,则星号表示Hadamard乘积和矩阵乘法是使用.dot()方法完成的。如果它们是numpy.matrix,则星号表示矩阵乘法。如果他们是某种其他类型(例如来自NumPy以外的图书馆),则您必须查阅该类型的文档。如果他们是混合类型,matrix优先(根据评论中的@ajcr)。

在Python 3.5中,希望这更容易,因为@符号是作为专用矩阵乘法运算符引入的(有关详细信息,请参阅上面的PEP)。这不会被移植到2.7.x,这是升级的另一个原因。