[SciPy-user] array vs matrix, converting code from matlab
Gennan Chen
gnchen at cortechs.net
Thu Apr 20 16:58:37 EDT 2006
Hi! Travis,
Thanks for your suggestion. In fact, that is what I do. Creating a
class and use __getitem__ to swap the indices. Unfortunately, In the
medical imaging, index (i,j,k) is always related to FORTRAN way.
Gen
On Apr 20, 2006, at 1:44 PM, Travis Oliphant wrote:
> Gennan Chen wrote:
>
>> 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
>>
>>
>>
>
> This is a FORTRAN-order reshaping. The linear sequence of values is
> reshaped into an array by varying the first index (the row) the
> fastest.
>
> NumPy, by default, uses C-contiguous order so that the last index
> varies
> the fastest as it places elements in the array.
>
> NumPy does have support for the FORTRAN-order, but there are a few
> constructs that don't support it: (arr.flat iterators are always in
> C-contiguous order and a.shape = (3,4,2) always assumes C-contiguous
> order for advancing through the elements). I don't know of anyone
> who
> has used the FORTRAN support to successfully convert MATLAB code so
> unless you want to be a guinea pig, you might want to just hunker down
> and convert to C-contiguous order. Alternatively you can just re-
> think
> the shape of your arrays in reverse: i.e. instead of creating a 3,4,2
> array, create a 2,4,3 array and reverse all your indices.
>
>> 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...
>>
>>
> As far as the indexing is concerned. The only way to alter it is to
> implement a new class that subtracts 1 from all the indices. You
> could
> also define "end" as a simple object and when you see it replace with
> the number of dimension in the array. Such a thing is possible (you
> could also implement it to reverse the order of all your indices and
> simulate a matlab-style array).
>
> -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