|
From: Francesc A. <fa...@ca...> - 2005-11-25 15:27:26
|
A Divendres 25 Novembre 2005 15:24, gf va escriure:
>
> from numarray import add, array, asarray, absolute, argsort, floor, take,
> size
>
> def mean(m,axis=3D0):
> m =3D asarray(m)
> return add.reduce(m,axis)/float(m.shape[axis])
>
> def eliminate_outliers(dat,frac):
> num_to_eliminate =3D int(floor(size(dat,0)*frac))
> for i in range(num_to_eliminate):
> ind =3D argsort(absolute(dat-mean(dat)),0)
> sdat =3D take(dat,ind,0)[:,0]
> dat =3D sdat[:-1]
> return dat
>
> #--------------------------------------------------------------------
>
> if __name__ =3D=3D "__main__":
> from MLab import rand
> sz =3D 100
> nn =3D rand(sz,1)
> nn[:10] =3D 20*rand(10,1)
> nn[sz-10:] =3D -20*rand(10,1)
> print eliminate_outliers(nn,0.10)
=46or sz=3D100, the next line of code is 10x faster on my machine (more if
sz is bigger):
print nn[argsort(abs(nn_c-nn_c.mean()),0)][:-int(sz*0.10),0]
I haven't checked it very carefully, so you should double check it.
BTW, you will need to use the numarray MLab interface:
from numarray.mlab import rand
Cheers,
=2D-=20
>0,0< Francesc Altet =A0 =A0 http://www.carabos.com/
V V C=E1rabos Coop. V. =A0=A0Enjoy Data
"-"
|