[Numpy-discussion] Fortran binary files and numpy/scipy

Ryan May rmay31 at gmail.com
Mon Feb 2 11:17:13 EST 2009


Nils Wagner wrote:
> On Mon, 2 Feb 2009 13:39:32 +0100
>  Matthieu Brucher <matthieu.brucher at gmail.com> wrote:
>> Hi,
>>
>> There was a discussion about this last week. You can find it int he
>> archives ;)
>>
>> Matthieu
>  
> Hi Matthieu,
> 
> Sorry but I missed that.
> Anyway I have some trouble with my short example.
> 
> g77 -c binary_fortran.f
> g77 -o io binary_fortran.o
> ./io
> 
>  11 254  254.
>  12 253  126.
>  13 252  84.
>  14 251  62.
>  15 250  50.
>  16 249  41.
>  17 248  35.
>  18 247  30.
>  19 246  27.
>  20 245  24.
> 
> python -i read_fortran.py
> 
>>>> a
> array([(16, 1090921693195, 254.0), (16, 16, 5.3686493512014268e-312),
>        (4638566878703255552, 16, 7.9050503334599447e-323),
>        (1082331758605, 4635611391447793664, 7.9050503334599447e-323),
>        (16, 1078036791310, 62.0), (16, 16, 5.3049894774872906e-312),
>        (4632233691727265792, 16, 7.9050503334599447e-323),
>        (1069446856720, 4630967054332067840, 7.9050503334599447e-323),
>        (16, 1065151889425, 35.0), (16, 16, 5.2413296037731544e-312),
>        (4629137466983448576, 16, 7.9050503334599447e-323),
>        (1056561954835, 4628293042053316608, 7.9050503334599447e-323),
>        (16, 1052266987540, 24.0)],
>       dtype=[('irow', '<i8'), ('icol', '<i8'), ('value', '<f8')])
> 
> How can I fix the problem ?
> 

Every write statement in fortran first writes out the number of bytes that will
follow, *then* the actual data.  So, for instance, the first write to file in
your program will write the bytes corresponding to these values:

16 X(1) Y(1) Z(1)

The 16 comes from the size of 2 ints and 1 double.  Since you're always writing
out the 3 values, and they're always the same size, try adding another integer
column as the first field in your array.

Ryan

-- 
Ryan May
Graduate Research Assistant
School of Meteorology
University of Oklahoma



More information about the NumPy-Discussion mailing list