Reading records from file and sorting

Francesc Altet faltet at carabos.com
Wed Nov 1 07:03:05 EST 2006


El dt 31 de 10 del 2006 a les 23:38 +0000, en/na George Sakkis va
escriure:
> Is there a more elegant and/or faster way to read some records from a
> file and then sort them by different fields ? What I have now is too
> specific and error-prone in general:
> 
> import numpy as N
> records = N.fromfile(a_file, dtype=N.dtype('i2,i4'))
> records_by_f0 = records.take(records.getfield('i2').argsort())
> records_by_f1 = records.take(records.getfield('i4',2).argsort())
> 
> If there's a better way, I'd like to see it; bonus points for in-place
> sorting.

Why this is too specific or error-prone? I think your solution is quite
good. If what you want is a more compact way to write the above, you can
try with:

In [56]:records=numpy.array([(1,1),(0,2)], dtype="i2,i4")
In [57]:records[records['f0'].argsort()]
Out[57]:
array([(0, 2), (1, 1)],
      dtype=[('f0', '<i2'), ('f1', '<i4')])
In [58]:records[records['f1'].argsort()]
Out[58]:
array([(1, 1), (0, 2)],
      dtype=[('f0', '<i2'), ('f1', '<i4')])

HTH,

-- 
Francesc Altet    |  Be careful about using the following code --
Carabos Coop. V.  |  I've only proven that it works, 
www.carabos.com   |  I haven't tested it. -- Donald Knuth


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642




More information about the NumPy-Discussion mailing list