[Numpy-discussion] Fortran binary files and numpy/scipy
Ryan May
rmay31@gmail....
Mon Feb 2 13:38:14 CST 2009
Nils Wagner wrote:
> On Mon, 02 Feb 2009 10:17:13 -0600
> Ryan May <rmay31@gmail.com> wrote:
>> 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
> Hi Ryan,
>
> I have modified the python script.
>
> import numpy as np
> fname = open("bin.dat",'rb')
> dt =
> np.dtype([('isize',int),('irow',int),('icol',int),('value',float)])
> a = np.fromfile(fname,dtype=dt)
>
>
>>>> a
> array([(16, 1090921693195, 4643140847074803712,
> 7.9050503334599447e-323),
> (16, 1086626725900, 4638566878703255552,
> 7.9050503334599447e-323),
> (16, 1082331758605, 4635611391447793664,
> 7.9050503334599447e-323),
> (16, 1078036791310, 4633922541587529728,
> 7.9050503334599447e-323),
> (16, 1073741824015, 4632233691727265792,
> 7.9050503334599447e-323),
> (16, 1069446856720, 4630967054332067840,
> 7.9050503334599447e-323),
> (16, 1065151889425, 4630122629401935872,
> 7.9050503334599447e-323),
> (16, 1060856922130, 4629137466983448576,
> 7.9050503334599447e-323),
> (16, 1056561954835, 4628293042053316608,
> 7.9050503334599447e-323),
> (16, 1052266987540, 4627448617123184640,
> 7.9050503334599447e-323)],
> dtype=[('isize', '<i8'), ('irow', '<i8'), ('icol',
> '<i8'), ('value', '<f8')])
>
> Is this a 64-bit problem ?
>
I don't know if it's a 64-bit problem per-se, so much as a disagreement between
fortran and numpy. Numpy is making the size of the integer fields 8 bytes, while
in Fortran, they're only 4 bytes. When constructing your dtype, use np.int32 or
'<i4' for your type for the integer fields, and see if that fixes it.
Ryan
--
Ryan May
Graduate Research Assistant
School of Meteorology
University of Oklahoma
More information about the Numpy-discussion
mailing list