Edytuj 1: OP zaktualizował swoje pytanie po udzieleniu pierwszej odpowiedzi. Zaktualizowaną odpowiedź można znaleźć poniżej po EDIT2.
Nie wiem, co dokładnie próbujesz zrobić, ale w tym przypadku można po prostu wykonaj następujące czynności w celu uzyskania diff
:
import numpy as np
diff = np.array(array[n-1:]) - np.array(average[:-n+2])
Następnie diff
będzie sygnał wyjściowy:
array([ 2. , 1.5, 10.5, 4. , 1.5, -2. ])
Najpierw wycina się listy za pomocą parametru n
, a następnie konwertuje listy na tablice i odejmuje je od siebie. Powyższy wiersz kodu byłby jeszcze prostszy, gdyby a) twoje listy miały tę samą długość, b) n
był twoim indeksem, a nie elementem, od którego chcesz zacząć, oraz c) jeśli zamiast list użyto numpy tablic:
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
Następnie diffAr
wygląda następująco (jeden element więcej niż w przypadku odkąd dodaje jeden element do myArray
):
array([ 2. , 1.5, 10.5, 4. , 1.5, -2. , 2.5])
tylko ogólne komentarz: Proszę nie używać array
i diff
jako nazw zmiennych.
EDIT2:
Zmieniłeś pytanie; tutaj jest teraz zaktualizowana odpowiedź. Jedyną rzeczą, którą należy dodać do powyższej odpowiedzi, jest sposób obliczenia średniej bieżącej z uwzględnieniem rozmiaru okna m
. Po tym, co można zrobić dokładnie to, co zrobiłem powyżej:
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]
W tym przypadku d
zawiera pożądany wynik:
array([ 2. , 1.5, 10.5, 4. , 1.5, -2. ])
@ Cleb Dziękuję za odpowiedź, zdałem sobie sprawę później było nieco mylące . Dlatego zmieniłem swój przykład. – Mapa
@Mapa: zaktualizowałem odpowiedź; daj mi znać, jeśli to teraz odpowie na twoje pytanie. – Cleb
Tak, to prawda. Dziękuję Ci. – Mapa