如果我在导入numpy的python代码中看到以下行:
c = a * b
确定此操作是以Hadamard(元素方式)还是点积(逐点)操作执行的最简单,最实用的方法是什么?
对于Hadamard产品,A和B的列和行大小必须相同才是正确的。对于点积,只有A的列大小必须与B的行大小相同,对吗?所以我可以查找两者的形状并找出使用的操作?
答案 0 :(得分:9)
这在PEP 465中讨论过。简而言之,它取决于A
和B
的类型。如果他们是numpy.ndarray
,则星号表示Hadamard乘积和矩阵乘法是使用.dot()
方法完成的。如果它们是numpy.matrix
,则星号表示矩阵乘法。如果他们是某种其他类型(例如来自NumPy以外的图书馆),则您必须查阅该类型的文档。如果他们是混合类型,matrix
优先(根据评论中的@ajcr)。
在Python 3.5中,希望这更容易,因为@
符号是作为专用矩阵乘法运算符引入的(有关详细信息,请参阅上面的PEP)。这不会被移植到2.7.x,这是升级的另一个原因。