[Numpy-discussion] Robust Sorting of Points
Nathaniel Smith
njs at pobox.com
Sun Oct 27 18:53:37 EDT 2013
On Sun, Oct 27, 2013 at 10:41 PM, Freddie Witherden
<freddie at witherden.org> wrote:
> On 27/10/13 21:05, Jonathan March wrote:
>> If an "almost always works" solution is good enough, then sort on the
>> distance to some fixed random point that is in the vicinity of your N
>> points.
>
> I had considered this. Unfortunately I need a solution which really
> does always work.
>
> The only pure-Python solution I can envision -- at the moment anyway --
> is to do some cleverness with the output of np.unique to identify
> similar values and replace them with an arbitrarily chosen one. This
> should permit the output to be passed to np.lexsort without issue.
# Warning 1: Untested code.
# Warning 2: I can't tell if this is clever or horrible.
r = np.random.RandomState(0)
while True:
# This perturbation leaves lexical order unchanged, but will
eventually shift
# all points away from rounding bin boundarys.
shift = r.rand()
if np.any(np.around(perturbed + (shift - 1e-11), decimals=10) !=
np.around(perturbed + (shift + 1e-11))):
continue
return np.lexsort(np.around(perturbed, decimals=10))
-n
More information about the NumPy-Discussion
mailing list