On Mon, 02 Feb 2009 13:38:14 -0600 Ryan May <rma...@gmail.com> wrote: > Nils Wagner wrote: >> On Mon, 02 Feb 2009 10:17:13 -0600 >> Ryan May <rma...@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. >
dt = np.dtype([('isize','int32'),('irow','int32'),('icol','int32'),('value','float')]) >>> a array([(16, 0, 11, 1.2549267404367662e-321), (1081065472, 16, 0, 7.9050503334599447e-323), (12, 253, 0, 3.4485523805914514e-313), (0, 16, 0, 5.3474293932967148e-312), (0, 1079312384, 16, 3.3951932655444357e-313), (0, 14, 251, 62.0), (16, 0, 16, 3.1829936864479085e-313), (250, 0, 1078525952, 7.9050503334599447e-323), (16, 0, 16, 1.2302234581447039e-321), (1078231040, 16, 0, 7.9050503334599447e-323), (17, 248, 0, 3.4484552433329538e-313), (0, 16, 0, 5.2413296037731544e-312), (0, 1077805056, 16, 3.3951932655444357e-313), (0, 19, 246, 27.0), (16, 0, 16, 4.2439915819305446e-313), (245, 0, 1077411840, 7.9050503334599447e-323)], dtype=[('isize', '<i4'), ('irow', '<i4'), ('icol', '<i4'), ('value', '<f8')]) Any idea ? Nils _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion