Hi,

An HDF5/PyTables user asked whether HDF5 supports meta-information for 
keeping Fortran/C ordering in datasets.  By reading the docs, it seems 
to me that HDF5 doesn't support this yet.  Are there plans to support 
this feature?

Thanks,

----------  Missatge transmès  ----------

Subject: Re: [Pytables-users] Reading Fortran arrays with correct array 
indexing
Date: Saturday 31 May 2008
From: "Milos Ilak" <[EMAIL PROTECTED]>
To: "Francesc Alted" <[EMAIL PROTECTED]>

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
>

-------------------------------------------------------

-- 
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

Reply via email to