# [Python-ideas] [RFC] draft PEP: Dedicated infix operators for matrix multiplication and matrix power

Alexander Belopolsky alexander.belopolsky at gmail.com
Sat Mar 15 21:50:28 CET 2014

```On Sat, Mar 15, 2014 at 11:11 AM, Steven D'Aprano <steve at pearwood.info>wrote:

> The only question is whether it is more common to write:
>
>     Matrix @ Matrix @ Column_Vector
>
> or
>
>     Row_Vector @ Matrix @ Matrix
>
>
> I'll leave it to those who do matrix maths to decide which they use more
> often, but personally I've never come across the second case except in
> schoolbook exercises.
>

Abstractly, 1-dimensional arrays are neither columns nor rows, but Python's
horizontal notation makes them more row-like than column-like.  In
2-dimensional case, [[1,2]] is a row-vector and [[1],[2]] is a
column-vector.  Which one is more "natural"?

When you have a matrix

A = [[1, 2],
[3, 4]]

A[1] is [3, 4], which is a row.  To get a column, [2, 4], one has to write
A[:,1] in numpy.

When it comes to matrix - vector multiplication,

[1, 2] @ [[1, 2],
[3, 4]] -> [7, 10]

has a text-book appearance, while

[[1, 2],
[3, 4]] @ [1, 2] -> [5, 11]

has to be mentally cast into

([[1, 2],
[3, 4]] @ [[1],
[2]])[0] -> [5, 11]

While it is more common in math literature to see Mat @ vec than vec @ Mat,
I don't think anyone who has completed an introductory linear algebra
course would have trouble understanding what [1, 2, 3] @ Mat means.  On the
other hand, novice programmers may find it puzzling why Mat @ [Mat1, Mat2]
is the same as [Mat @ Mat1, Mat @ Mat2], but [Mat @ [vec1, vec2]] is not
[Mat @ vec1, Mat @ vec2].
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20140315/67daccb1/attachment.html>
```