# [Numpy-discussion] Matrix vs ndarray

Anne Archibald peridot.faceted@gmail....
Thu Apr 17 14:14:56 CDT 2008

```On 17/04/2008, Santanu Chatterjee <santanu.chatter@gmail.com> wrote:
> Hi Numpy users,
>     I used MATLAB to do numerical calculations for a long time. Recently I
> am digging into python and numpy. I am wondering about the following
> question :
>
> 1) What is the difference between ndarray and matrix in numpy? My idea is
> that having N-dimensional array is sufficient (of course a MATLAB users
> point of view). If anyone can provide some idea, I will appreciate it.

The difference comes about because python has a paucity of operators.
In particular, there is only one multiplication operator. Thus for
ndarrays "*" does elementwise multiplication, and to get matrix
multiplication you must use the function "dot". Similarly "**" does
elementwise exponentiation, and to get matrix exponentiation you must
use the function "matrix_power".

Since some people find this inconvenient, the "matrix" class exists.
It represents arrays that are always two-dimensional, and for them "*"
does matrix multiplication. The only difference is how the operators
(and certain indexing operations) are interpreted. If you want to
interpret a matrix M as an array, just use "M.A"; it you want to
interpret an array X as a matrix, do "matrix(X)". In neither case is
data copied.

Personally, I do not ever use matrices; I find "dot" is quite
convenient enough for me. Moreover the numpy standard library has an
undetermined number of bugs where standard functions acting on
matrices return the correct values but in the form of arrays instead;
thus matrix users occasionally find that they have inadvertently (and
silently) transformed their matrices back into arrays.

Anne
```