From: Francesc A. <fa...@ca...> - 2006-11-01 16:29:52
|
El dc 01 de 11 del 2006 a les 15:18 +0000, en/na George Sakkis va escriure: > > Why this is too specific or error-prone? > > Because it > 1. repeats the field types > 2. requires adding up the length of all previous fields as offset. > > If you're not convinced yet, try writing this in less than 3 seconds > ;-): > records = N.fromfile(a_file, dtype=N.dtype('i2,i4,f4,S5,B,Q')) > records_by_f5 = ?? Ah, I see your point :) > > 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')]) > > Ah, much better; I didn't know you can index a normal array (not > recarray) by label. Now, if there's a way to do the sorting in place > (records.sort('f1') doesn't work unfortunately), that would be perfect. Yes, I agree that having the possibility to do records.sort('f1') would be a great addition (both in terms of usability but also efficiency). Cheers, -- 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 |