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