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

use*_*632 1 python numpy linear-algebra matrix-multiplication dot-product

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

c = a * b
Run Code Online (Sandbox Code Playgroud)

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

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

Kev*_*vin 9

这在PEP 465中讨论.总之,它取决于类型AB.如果它们是numpy.ndarray,则星形意味着Hadamard产品和矩阵乘法用该.dot()方法完成.如果它们是numpy.matrix,则星形意味着矩阵乘法.如果它们是其他类型(例如来自NumPy以外的库),则必须查阅该类型的文档.如果它们是混合类型,matrix则优先考虑(根据评论中的@ajcr).

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

  • 顺便说一下,我被告知完全避免使用"矩阵"类型 - 我相信它至少是非正式弃用的. (3认同)