[Numpy-discussion] Fortran binary files and numpy/scipy
Ryan May
rmay31@gmail....
Mon Feb 2 10:17:13 CST 2009
Nils Wagner wrote:
> On Mon, 2 Feb 2009 13:39:32 +0100
> Matthieu Brucher <matthieu.brucher@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