如何确定 A * B 是 Numpy 中的 Hadamard 还是点积?

How can I find out if A * B is a Hadamard or Dot Product in Numpy?

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

c = a * b

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

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

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

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