Edit 1: OP hat seine Frage aktualisiert, nachdem ich meine erste Antwort gegeben hatte. Die aktualisierte Antwort kann nach EDIT2 gefunden werden.
nicht sicher, was genau Sie versuchen, in diesem Fall zu tun, aber man könnte die folgende, um einfach tun zu erhalten diff
:
import numpy as np
diff = np.array(array[n-1:]) - np.array(average[:-n+2])
Dann diff
wird die gewünschte Ausgabe sein:
array([ 2. , 1.5, 10.5, 4. , 1.5, -2. ])
Sie zerschneiden zuerst Ihre Listen mit dem Parameter n
, dann konvertieren Sie Ihre Listen in Arrays und subtrahieren sie voneinander. Die obige Codezeile wäre noch einfacher, wenn a) Ihre Listen die gleiche Länge hätten, b) n
wäre Ihr Index und nicht das Element, mit dem Sie beginnen möchten und c) wenn Sie anstelle von Listen numpy Arrays verwenden:
import numpy as np
# add one additional value so that the arrays have the same length
myArray = np.array([1, 3, 4, 5, 15, 14, 16, 13, 17])
# choose the starting index rather than the element
n = 2
myAverage = np.array([2, 3.5, 4.5, 10, 14.5, 15, 14.5])
diffAr = myArray[n:] - myAverage
Dann sieht diffAr
wie dieses (ein Element mehr als in Ihrem Fall, da ich ein Element zu myArray
hinzugefügt):
array([ 2. , 1.5, 10.5, 4. , 1.5, -2. , 2.5])
nur eine allgemeine Bemerkung: Bitte nicht array
und diff
als Variablennamen verwenden.
EDIT2:
Sie haben Ihre Frage geändert; Hier ist jetzt eine aktualisierte Antwort. Das einzige, was man der obigen Antwort hinzufügen muss, ist eine Möglichkeit, den laufenden Mittelwert bei der Fenstergröße m
zu berechnen. Danach kann man genau das tun, was ich oben tat
import numpy as np
def runningMean(ar, m):
return np.convolve(ar, np.ones((m,))/m)[(m-1):]
a = np.array([1, 3, 4, 5, 15, 14, 16, 13])
m = 2
av = runningMean(a, m)
d = a[m:] - av[:-m]
In diesem Fall d
enthält die gewünschte Ausgabe:
array([ 2. , 1.5, 10.5, 4. , 1.5, -2. ])
@ Cleb Vielen Dank für Ihre Antwort, ich später erkannte, war es ein wenig verwirrend . Deshalb habe ich mein Beispiel geändert. – Mapa
@Mapa: Ich habe die Antwort aktualisiert; lassen Sie mich wissen, ob das jetzt Ihre Frage beantwortet. – Cleb
Ja, tut es. Vielen Dank. – Mapa