我假设
@
是dot
方法的简写。阻止形状为()
的数组进行乘法运算的设计决策背后的动机是什么?In [6]: a = np.ones((2,1))
In [7]: a.dot(1)
Out[7]:
array([[ 1.],
[ 1.]])
In [8]: a @ 1
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-8-398cff4c0ec9> in <module>()
----> 1 a @ 1
ValueError: Scalar operands are not allowed, use '*' instead
dot
对标量的处理方式很奇怪——它将标量有效地提升为一个方阵,其中标量在对角线上,其他地方都是零。在NumPy中没有其他像这样模糊的标量->数组提升。那么@
应该做dot
所做的事情,还是应该广播,或者......什么?没有很好的答案,而且scalar @ matrix
也毫无意义(您可以使用*
代替),所以我们放弃了。 - Nathaniel J. Smith