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