2016-07-21 11 views
2

Es gibt einen einfachen Weg, um alle drei Elemente im Intervall eine Summe zu bilden? Zum Beispiel:Summieren von Elementen in einem Schiebefenster - NumPy

import numpy as np 
mydata = np.array([4, 2, 3, 8, -6, 10]) 

Ich möchte dieses Ergebnis erhalten:

np.array([9, 13, 5, 12]) 
+1

@Ohumeronen 'conv' erklären könnte eine Weile dauern. Aber hinzugefügt einige relevante Kommentare in der Post. – Divakar

+0

Oh, vielen Dank, dass du dir die Zeit genommen hast. Ich sehe, dass diese Funktion ziemlich komplex zu sein scheint, aber ich werde auch einige Dokumentationen darüber lesen. Danke noch einmal! – Ohumeronen

Antwort

8

Wir np.convolve verwenden -

np.convolve(mydata,np.ones(3,dtype=int),'valid') 

Die Grundidee mit convolution ist, dass wir einen Kernel, der wir durch das Eingabe-Array gleiten und die Faltungsoperation summiert die Elemente multipliziert mit den Kernel-Elementen, während der Kernel hindurchgleitet. Also, um unseren Fall für eine Fenstergröße von 3 zu lösen, verwenden wir einen Kernel von drei 1s generiert mit np.ones(3).

Probelauf -

In [334]: mydata 
Out[334]: array([ 4, 2, 3, 8, -6, 10]) 

In [335]: np.convolve(mydata,np.ones(3,dtype=int),'valid') 
Out[335]: array([ 9, 13, 5, 12]) 
+0

Ah jetzt verstehe ich. Auf der Grundlage der bereitgestellten Daten habe ich es mit np.convolve (mydata, [1,2], 'valid') versucht und nicht verstanden, warum das Ergebnis nicht [8, 8, 19, -4, 14] ist. Aber das ist die Ausgabe von np.convolve (mydata, [2,1], 'valid'). Alles klar jetzt :-) – Ohumeronen

Verwandte Themen