Seite 1 von 1

Durchschnitt von Daten

Verfasst: Montag 30. Mai 2011, 09:37
von mzh
Hallo zusammen.
Sagen wir, ich hab eine numpy.array mit Rohdaten:

Code: Alles auswählen

[ 4.54187404  5.44150706  1.79067179 ...,  5.47850569  5.30213909
  5.8472153 ]
, deren Länge 10000 beträgt. Es ist wenig hilfreich, diese Daten direkt zu plotten, hingegen ist es sinnvoller, einen Durchschnitt über Abschnitte auf den Daten zu plotten. Also aus den ersten 100 Punkten (= das erste Segment) wird der Durchschnitt berechnet, dann aus den nächsten 100 und so weiter. So kommt man auf 100 Punkte. Wie kann ich jetzt die Durchschnitte mit den Rohdaten "überlagert" plotten? Die Liste aus Durchschnitten ist ja jetzt 100 mal kürzer, plottet man jetzt einfach 100 mal den gleichen Wert für jedes Segment?
Mein Code für die Berechnung des Durchschnittes:

Code: Alles auswählen

Eav = array( [reduce(lambda x,y: x+y, i)/len(i) for i in [E[i:i+segm] for i in range(0, len(Eraw), segm)] ] )
Sieht scheisse aus, geht aber irgendwie.
Ein Bild davon kann man hier sehen.

Re: Durchschnitt von Daten

Verfasst: Montag 30. Mai 2011, 09:58
von gkuhl
@mzh: Wie wäre es mit einem laufenden Mittel:

Code: Alles auswählen

values = numpy.random.rand(10000)
means = numpy.convolve(values, numpy.ones(100)/100.0, 'same')
Mit Hilfe von Slicing kann man natürlich auch nur jeden 100ten Wert nehmen. Wie man das plotten soll hängt davon ab, was du als nicht so schlimm ansiehst.

Re: Durchschnitt von Daten

Verfasst: Montag 30. Mai 2011, 10:00
von Liffi
[quote="mzh"]Hallo zusammen.
Sagen wir, ich hab eine numpy.array mit Rohdaten:

Code: Alles auswählen

 Wie kann ich jetzt die Durchschnitte mit den Rohdaten "überlagert" plotten? Die Liste aus Durchschnitten ist ja jetzt 100 mal kürzer, plottet man jetzt einfach 100 mal den gleichen Wert für jedes Segment?[/quote]
Ich wuerde den Durschnitt laufend berechnen, das heisst jeweils die 50 Werte davor und dahinter mitteln. 
Das ist aber natuerlich mit mehr Rechenaufwand verbunden.

EDIT: Da war ich wohl zu langsam :-)

Re: Durchschnitt von Daten

Verfasst: Montag 30. Mai 2011, 11:36
von HerrHagen
Ach..., numpy ist an der Stelle recht flott :wink: :

Code: Alles auswählen

import numpy
from time import clock
values = numpy.random.rand(10000)
t = clock()
means = numpy.convolve(values, numpy.ones(100)/100.0, 'same')
print clock() - t

Code: Alles auswählen

0.00547304196483

Re: Durchschnitt von Daten

Verfasst: Montag 30. Mai 2011, 12:49
von mzh
Danke Leute für den Hinweis auf convolve.
Ich habs ausprobiert, was mich allerdings wundert ist, weshalb der Durchschnitt am Ende so stark fällt (besonders bei der roten Kurve sichtbar).
Hier nochmals der Link auf die jüngste Figur.

Re: Durchschnitt von Daten

Verfasst: Montag 30. Mai 2011, 13:01
von gkuhl
@mzh: Randbedingungen.