Why many documentations and blog posts use @ in place of * (multiplication operator) in python.
Here is an example. They use C@x
instead of c*x
(also found in the next lines in the page). Is @ used to say it is vector multiplication etc.?
>Solution :
They write it like that because the underlying objects are matrices and/or vectors, not scalars.
The operator @
indicates a matrix multiplication, and hooks into the datamodel __matmul__
, which has a different behaviour to *
operation i.e. __mul__
.
The most common case you will see is with numpy ndarrays, where @
is matrix multiplication and *
is element-wise multiplication:
>>> A = np.arange(4).reshape(2,2)
>>> A
array([[0, 1],
[2, 3]])
>>> A @ A
array([[ 2, 3],
[ 6, 11]])
>>> A * A
array([[0, 1],
[4, 9]])