[SciPy-user] array vs matrix, converting code from matlab

Gennan Chen gnchen at cortechs.net
Thu Apr 20 13:46:26 CDT 2006


Hi! Travis,

Let's start with an example under matlab:

 >> d = [0:23]
 >> k = reshape(d, 3,4,2)
k(:,:,1) =
0  3  6  9
1  4  7  10
2  5  8  11
k(:,:,2) =
12  15  18  21
13  16  19  22
14  17  20  23


under numpy:

 >In [2]: d = numpy.asarray(range(0,24), numpy.float32)

In [3]: d
Out[3]:
array([  0.,   1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.,
         11.,  12.,  13.,  14.,  15.,  16.,  17.,  18.,  19.,  20.,   
21.,
         22.,  23.], dtype=float32)

In [4]: k = d.reshape(3,4,2)

In [5]: k
Out[5]:
array([[[  0.,   1.],
         [  2.,   3.],
         [  4.,   5.],
         [  6.,   7.]],

        [[  8.,   9.],
         [ 10.,  11.],
         [ 12.,  13.],
         [ 14.,  15.]],

        [[ 16.,  17.],
         [ 18.,  19.],
         [ 20.,  21.],
         [ 22.,  23.]]], dtype=float32)

So, if I want to port my Matlab code, I need to pay attention to  
this. And Since I  have a lot of C/C++  mexing code in Matlab, I need  
to fix not just 1-0 based but also indexing issue here. Any chance I  
can make the indexing like the Matlab's way?  Or I should just hunker  
down...

Gen-Nan Chen, PhD
Chief Scientist
Research and Development Group
CorTechs Labs Inc (www.cortechs.net)
1020 Prospect St., #304, La Jolla, CA, 92037
Tel: 1-858-459-9700 ext 16
Fax: 1-858-459-9705
Email: gnchen at cortechs.net


On Apr 20, 2006, at 11:28 AM, Travis Oliphant wrote:

> Gennan Chen wrote:
>
>> Hi! All,
>>
>> I am also in the same process. And I would like to add one more
>> question:
>>
>> In Matlab, for a 3D array or matrix, the indexing is a(i,j,k). In
>> numpy, it became a[k-1,i-1,j-1]. Is there any way to make it become
>> a[i-1,j-1,k-1]? Or I am doing something wrong here??
>>
>>
>>
>
> In NumPy, arrays and matrices are by default in  C-contiguous order so
> that the last index varies the fastest.    Matlab is based on Fortran
> originally and defines arrays in Fortran-contiguous order (the first
> index varies the fastest as you walk linearly throught memory).      
> The
> only time this really matters is if you are interfacing with some
> compiled code.   Otherwise, how you think about indexing is up to you
> and how you define the array.
>
> So,  to make it a[i-1,j-1,k-1] you need to reshape the array from the
> way you defined it in MATLAB.    It really does just depend on how you
> define things.  Perhaps you could give a specific example  so we could
> be more specific on how you would write the same thing in NumPy.
>
> -Travis
>
> _______________________________________________
> SciPy-user mailing list
> SciPy-user at scipy.net
> http://www.scipy.net/mailman/listinfo/scipy-user
>



More information about the SciPy-user mailing list