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

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to