[Numpy-discussion] Sorting objects with ndarrays

Gael Varoquaux gael.varoquaux at normalesup.org
Sun Feb 28 09:07:43 EST 2010


On Sun, Feb 28, 2010 at 03:01:18PM +0100, Friedrich Romstedt wrote:
> > Well, I might not have to compare ndarrays, but fairly arbitrary
> > structures (dictionnaries, classes and lists) as I am dealing with
> > semi-structured data coming from a stack of unorganised experimental
> > data. Python has some logic for comparing these structures by comparing
> > their members, but if these are ndarrays, I am back to my original
> > problem.

> I also do not understand how to build an oder on such a thing at all,
> maybe you can give a simple example?

Well, you can't really build an order in the mathematical sens of
ordering. All I care is that if you give me twice the samed shuffled list
of elements, it comes out identical. I am fighting the fact that
dictionnaries in Python have no order, and thus shuflle the data from run
to run.

> Hmm, you could also replace numpy.greater and similar temporarily with
> an with statement like:

> # Everything as usual, comparing ndarrays results in ndarrays here.

> with monkeypatched_operators:
>     # Comparing ndarrays may result in scalars or what you need.
>     pass  # Perform the sorting

> # Everything as usual ...

> Though that's maybe not threadsafe too.

Yes, it's not threadsafe either.

> Then you could use ndarray.flatten().tolist() to compare them using
> usual Python semantics?

That solves the local problem of comparing 2 arrays (though will be quite
slow), but not the general problem of sorting in a reproducible order
(may it be arbitary) objects containing arrays.

Anyhow, I solved the problem implementing a subclass of dict and using it
everywhere in my code. Right now it seems to be working for what I need.

Cheers,

Gaël



More information about the NumPy-Discussion mailing list