On Fri, Mar 14, 2014 at 11:24:26AM +0100, Antoine Pitrou wrote:
This PEP proposes two new binary operators dedicated to matrix multiplication and matrix power, spelled ``@`` and ``@@`` respectively. (Mnemonic: ``@`` is ``*`` for mATrices.)
That sounds like a strange choice to me. There's nothing in "@" or "@@" that suggests "matrices" or "multiplication".
The PEP even gives a mnemonic for it: @ is for mATrix multiplication. There's nothing in @ that suggests "decorator", nor is there anything about * that suggests scalar multiplication. Out of the common symbols used in Python, & is possibly the only operator symbol with a non-arbitrary connection to its meaning. & was originally a ligature of "et", the Latin word for "and". Everything else is pretty much arbitrary, and it's only habit and long use that makes them seem normal.
AFAIK, other languages sometimes use ".*" for matrix multiplication (as opposed to element-wise multiplication). Why not re-use that convention? Would that lead to parsing difficulties?
"Syntax should not look like grit on Tim Peters' monitor." .* is, in my opinion, pretty ugly, and leads to even ugly extensions: a .* b # matrix multiplication a .*= b # in place matrix multiplication a .** b # matrix exponentiation a .**= b # in-place matrix exponentiation And it suffers from exactly the same lack of connection to matrix multiplication as @ does: there is nothing about . that spells "matrix". It also has the problem that it could cause confusion with vector dot product. Read out A .* B aloud and you get something that sounds like it might mean dot product, "A dot times B".
That said, I'm rather sympathetic to the general idea, and if "@" is the least contentious option, then I'm ok with it too ("@@" doesn't sound like a good idea at all, though).
I don't see why. Since Python uses * and ** for scalar multiplication and exponentiation, and given that @ is accepted as matrix multiplication, then it is completely logical to follow the same pattern, which gives us @@ for matrix exponentiation. That's no sillier than using ** for exponentiation, instead of ^ as the Gods intended :-) -- Steven