[SciPy-User] Numpy/MATLAB difference in array indexing

Sturla Molden sturla@molden...
Mon Mar 19 05:51:38 CDT 2012


On 18.03.2012 23:37, Pauli Virtanen wrote:

>> b = tile(a[:,1],(1,5))
>
> a[:,1] is an 1-d array, and therefore considered as a (1, N) vector in
> 2-d context. This is not a bug --- the Numpy constructs do not always
> map exactly to Matlab ones.

Yes.

Also, the need for "repmats" (np.repeat, np.tile, np.hstack, np.vstack) 
and "reshapes" (np.reshape, np.ndarray.reshape) is less prominent in 
NumPy because of broadcasting. Using MATLAB idioms like reshape and 
repmat instead of broadcasting is a common mistake (or bad habit) when 
coming to NumPy for MATLAB.

In my experience, 99% of cases for

   a .* reshape(b,m,n)
   a .* repmat(b,m,n)

in MATLAB will just map to NumPy constructs like these:

   a * b
   a * b[:,np.newaxis]

This, in addition to view arrays, make NumPy much more memory efficient.

Not to mention that a.T is O(1) in NumPy whereas a' is O(N*M) in MATLAB.

Sturla


More information about the SciPy-User mailing list