[Python-ideas] Infix matrix-multiply, but not general infix operators?
Nick Coghlan
ncoghlan at gmail.com
Thu Mar 20 09:02:54 CET 2014
On 20 March 2014 17:41, Jared Grubb <jared.grubb at gmail.com> wrote:
> A couple months back, Andrew Barnet brought up the idea of adding a way to apply functions in an infix style. It really didnt gain much traction. (Subject line "Infix Functions")
>
> Nathaniel Smith has just proposed a PEP to add an infix matrix multiply operator, and everyone seems to love it.
>
> I honestly am surprised at the difference in reaction. Why are we so quick to add a single-purpose punctuation mark, but reject a named infix operator that works for many general cases? Is the matrix-multiply use case so special?
Yes, basically - a large portion of the PEP is about pointing out that
matrix multiplication really is that special. All past attempts at
getting syntax for it *have* been generalised along that lines of this
suggestion from Andrew, and have ended up failing on the grounds of
"just use a method or function instead".
Nathaniel's PEP is about looking at those past proposals and the
experience of the numeric computing community and asking "Which
operator have we *really* missed?". And they realised that it was only
one: a way to spell matrix multiplication, since "*" has already been
claimed for element-wise multiplication.
The generalised proposals failed because they were still clumsy for
the matrix multiplication use case, and there wasn't a compelling
justification for the extra complexity that came with the
generalisation.
By contrast, Nathaniel's latest PEP looked at solving the *exact*
problem the numeric community has: a clean and concise way to spell
matrix multiplication. It hit the sweet spot of design proposals: a
clean targeted solution that is as simple as it can possibly be, while
still solving the problem that needs to be solved.
It may have *looked* deceptively fast in terms of core devs saying
"yes, that's a good idea", but the speed makes more sense if you start
the timer from some of the earlier PEPs referenced from Nathaniel's
one - the "matrix multiplication is clumsy compared to MATLAB" problem
has been around for as long as people have been doing numeric
computing in Python.
Cheers,
Nick.
>
> I dont oppose the PEP, and I dont mean to derail it. And I know there was quite a bit of discussion on Andrew's email. But I cant help feel that Andrew's idea didnt get the appreciation it should. (But hey, I'm biased because I like the idea :))
>
> Jared
>
> QUICK SUMMARY OF ANDREW'S EMAIL:
> (Not a proposal for syntax or naming)
>
> m `cross` n
> m `dot` n
>
> a `Pair` b
> a `Tree` (b `Tree` c `Tree` d) `Tree` e
>
> And of course the matrix multiply (and matrix div that was briefly discussed) are implementable too:
>
> m `mmul` n
> m `mdiv` n
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
More information about the Python-ideas
mailing list