Ich möchte eine Funktion schreiben, die ein abgeflachtes Array als Eingabe verwendet und ein Array gleicher Länge zurückgibt, das die Summe der vorherigen n Elemente aus dem Eingabearray enthält, wobei die anfänglichen n - 1
-Elemente des Ausgabearrays auf% gesetzt sind. co_de%.
Zum Beispiel, wenn das Array zehn NaN
hat
und elements = [2, 4, 3, 7, 6, 1, 9, 4, 6, 5]
, dann sollte das resultierende Array n = 3
sein.
Eine Möglichkeit, wie ich das machen könnte:
%Vor%Gibt es einen besseren / effizienteren / mehr "pythonischen" Weg, dies zu tun?
Vielen Dank im Voraus für Ihre Hilfe.
Sie führen im Grunde 1D convolution
dort aus, so dass Sie np.convolve
, wie so -
Beispiellauf -
%Vor% Für 1D-Faltung kann auch Scipy's implementation
verwendet werden. . Die Laufzeiten mit Scipy-Version schienen für eine große Fenstergröße besser zu sein, da auch die nachfolgend aufgeführten Laufzeittests versuchen würden zu untersuchen. Die Scipy-Version für den Erhalt von vals
wäre -
Die Operation NaNs
padding könnte durch np.hstack
ersetzt werden. : np.hstack(([np.nan]*(n-1),vals))
für bessere Leistung.
Laufzeittests -
%Vor%Tags und Links python algorithm arrays performance numpy