Sliding Windows mit Numpy

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
thxcv
User
Beiträge: 1
Registriert: Donnerstag 12. Januar 2023, 13:24

Hallo,

ich zeichne Daten, die jeweils mit einem Zeitstempel versehen sind (also hochzählen) auf. Anschließend berechne ich basierend auf dem Zeitstempel den Mittelwert aller in dem Fenster liegenden Wert und erstelle ein neues Array. In dem angehängten Code klappt das auch wie gewollt, jedoch gehe ich stark davon aus, dass es einen besseren Weg gibt (Eliminierung der While-Schleife, und Vermeidung das np.where das gesamte Array check: Die Daten sind ja bereits sortiert)

Danke für eure Hilfe.

Code: Alles auswählen

import numpy as np
# test array generieren: 1. Zeile - Zeitstempel, 2. Zeile Datenpunkte
data = np.array([np.cumsum(np.random.randint(100, size=20)), np.random.randint(1, 5, size=20)])
print(data)

window_size = 200
overlap = 100

i, l_lim, u_lim = 0, 0, window_size
timestamps = []
window_mean = []
while u_lim < data[0, -1]:
    window_mean.append(np.mean(data[1, np.where((data[0, :] > l_lim) & (data[0, :] <= u_lim))]))
    timestamps.append(i)
    l_lim = u_lim - overlap
    u_lim = l_lim + window_size
    i += 1

print(np.array([timestamps, window_mean]))
Antworten