[SciPy-User] multivariate empirical distribution function, avoid double loop ?

Robert Kern robert.kern@gmail....
Wed Aug 24 18:25:12 CDT 2011

On Wed, Aug 24, 2011 at 09:23,  <josef.pktd@gmail.com> wrote:
> Does anyone know whether there is an algorithm that avoids the double
> loop to get a multivariate empirical distribution function?
> for point in data:
>     count how many points in data are smaller or equal to point
> with 1d data it's just argsort(argsort(data))
> double loop version with some test cases is attached.
> I didn't see a way that sorting would help.

If you can bear to make a few (nobs, nobs) bool arrays, you can do
just a kvars-sized loop in Python:

dominates = np.ones((len(data), len(data)), dtype=bool)
for x in data.T:
    dominates &= x[:,np.newaxis] > x
sorta_ranks = dominates.sum(axis=1)

Robert Kern

"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
  -- Umberto Eco

More information about the SciPy-User mailing list