Hi Francesc,
thanks a lot! I didn't know MATLAB used Fortran order too. My Python code
needs to read in files written in both orders, so I just added an attribute
in my Fortran output routine which the Python code looks for and if it is
there, it transposes the data after loading.
I would have thought that the meta-information about the order would be
stored somewhere in the file. Do you know if the future versions of HDF5
will support this? Thanks again,
Milos
On Fri, May 30, 2008 at 8:22 AM, Francesc Alted <[EMAIL PROTECTED]> wrote:
> A Thursday 29 May 2008, Milos Ilak escrigué:
> > Hi all,
> >
> > I apologize if this has been discussed, but I could not find any
> > information in the archives. I am creating HDF5 files with 3-D arrays
> > in Fortran 90, and I need to read them in both Python and MATLAB.
> > While MATLAB recognizes the correct dimensions of the arrays,
> > PyTables gets them backwards (i.e. (x,y,z) in Fortran becomes (z,y,x)
> > when PyTables reads it). I know that this is due to the fact that the
> > order in which Fortran stores arrays is different than that of
> > Python, C or MATLAB, and I couldn't determine how exactly MATLAB
> > 'knows' that Fortran arrays are being read.
>
> Well, it is easy: because MATLAB writes and reads arrays in *Fortran*
> order. So, if you write your arrays with Fortran, then you are not
> going to have any problem to read them in the correct order from
> MATLAB. However, as PyTables uses a C API to access HDF5 files, and as
> C follows a different order for matrices in memory, you will get
> inverted dimensions for your Fortran created files (as it is the case).
>
> > I have tried using the
> >
> > 'isfortran' command in numpy, but I get the following error:
> > >>> hh5f.root
> >
> > / (RootGroup) ''
> > children := ['eta' (Array), 'u' (Array), 'w' (Array), 'v' (Array),
> > 'y' (Array), 'x' (Array), 'z' (Array)]
> >
> > >>> hh5f.root.v
> >
> > /v (Array(16L, 33L, 32L)) ''
> > atom := Float64Atom(shape=(), dflt=0.0)
> > maindim := 0
> > flavor := 'numpy'
> > byteorder := 'little'
> > chunkshape := None
> >
> > >>> numpy.isfortran(hh5f.root.v)
> >
> > Traceback (most recent call last):
> > File "<stdin>", line 1, in <module>
> > File "/sw/lib/python2.5/site-packages/numpy/core/numeric.py", line
> > 184, in isfortran
> > return a.flags.fnc
> > AttributeError: 'Array' object has no attribute 'flags'
> >
> > It seems like there is perhaps some kind of flag I should add when
> > writing in Fortran to indicate that the array is in Fortran order,
> > but MATLAB somehow seems to know that anyway. Any advice would be
> > greatly appreciated.
>
> You are applying the numpy isfortran() function to a pytables Array and
> not a numpy object. The correct call would be:
>
> >>> numpy.isfortran(hh5f.root.v[:])
>
> because the result of reading a pytables Array is a numpy object.
>
> However, this won't tell you anything about the actual order (Fortran or
> C) in which the array was written because this meta-information is not
> saved anywhere in the file (apparently HDF5 does not support this yet).
>
> So, unless you want to provide this info yourself by using, say, an HDF5
> attribute, your best bet is to *deduce* the ordering by knowing that
> the file comes from a Fortran or a C program and *transpose* manually
> your arrays after reading them (if you need to).
>
> Hope this helps,
>
> --
> Francesc Alted
> Freelance developer
> Tel +34-964-282-249
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2008.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________
> Pytables-users mailing list
> Pytables-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/pytables-users
>
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Pytables-users mailing list
Pytables-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/pytables-users