Hi Freddie, Le 29/10/2013 10:21, Freddie Witherden a écrit : > The order itself does not need to satisfy any specific properties. I can't agree with you : if there is no specific property, then keeping the list *unchanged* would be a fine solution (and very fast and very very robust) ;-)
what about defining a comparison function (in the sense of the old cmp keyword of list.sort) such as : def compare(point, other): delta = point - other argmax = np.abs(delta).argmax() delta_max = delta[argmax] if delta_max > 0: return 1 elif delta_max < 0: return -1 else: return 0 This function returns a comparison of the coordinates with the biggest absolute difference. Of course this doesn't define an *absolute order* (since it doesn't exist). But I think it defines a *relative order* (if this notion exists mathematically !!!!) which is indeed robust. To apply this comparison function, the simple solution I see (for Python <3) is, using your first example ; >>> my_array = np.array([[-0.5, 0, 2**0.5], [0.5, 0, 2**0.5 - 1e-15]]) >>> l = list(my_array) >>> l.sort(cmp = compare) >>> l [array([-0.5 , 0. , 1.41421356]), array([ 0.5 , 0. , 1.41421356])] Now, if this comparison function indeed answers your question, the next step is to plug it either in numpy sorting machinery or in the new Python sorting which uses a "key function" (cf. http://docs.python.org/3.3/howto/sorting.html#the-old-way-using-the-cmp-parameter). best, Pierre
signature.asc
Description: OpenPGP digital signature
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion