2013-10-18 18 views
17

Ich versuche, die zu berechnen getrimmten bedeuten, die den Ausreißer ausschließt, einen Arrays.Getrimmte Mittelwert mit Prozentwert in Python?

Ich fand es ein Modul scipy.stats.tmean, aber es erfordert, der Benutzer gibt den Bereich von Absolutwert anstelle von Prozentwerten genannt wird.

In Matlab, haben wir m = trimmean(X,percent), das genau das tut, was ich will.

Haben wir das Gegenstück in Python?

+2

Ich war interessiert, wie schwierig es wäre, dies zu implementieren, und ich fand eine nette Diskussion darüber, wie ein getrimmtes Mittel funktioniert: http://stats.stackexchange.com/questions/4252/how-to-calculate-the -truncated-oder-getrimmten Mittelwert – steveha

Antwort

5

bearbeiten:

Die Methode, die ich vorher (diese Antwort an der Unterseite) beschrieben hat Problem mit diesem Eingang:

1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 

Da es nicht all 1 ‚s umfassen wird und 6 ‚s wegen es den gleichen Wert wie die Grenze aufweist.

Eigentlich können Sie implementieren einfach die ganze Sache selbst, nach der Anweisung in der Dokumentation Matlab. Es ist offensichtlich einfacher = D

Hier ist der Code in Python 2:

from numpy import mean 
def trimmean(arr, percent): 
    n = len(arr) 
    k = int(round(n*(float(percent)/100)/2)) 
    return mean(arr[k+1:n-k]) 

Sie numpy.percentile oder scipy.stats.scoreatpercentile verwenden können, um den absoluten Wert zu bekommen.

Sie sollten mit verschiedenen Eingaben versuchen, um die Grenzfälle zu überprüfen, um genau das Verhalten zu erhalten, das Sie wollen.

14

Mindestens für scipy v0.14.0 gibt es eine dedizierte (aber ohne Papiere?) Funktion dafür:

from scipy import stats 
m = stats.trim_mean(X, 0.1) # Trim 10% at both ends 

die stats.trimboth innen verwendet.

+2

soll dies die akzeptierte Antwort – grisaitis

+0

sein diese zumindest für Scipy 0,17 dokumentiert ist: https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.stats .trim_mean.html # scipy.stats.trim_mean – sascha

Verwandte Themen