Ho due array 1D, uno per i dati misurati e l'altro per la posizione. Ad esempio, i dati misurati possono essere la temperatura e l'altra matrice altezze della misurazione:Media intervallata dei dati 1D
temp = np.asarray([10, 9.6, 9.3, ..., -20.3, -21.0]) # Temperature in celsius
height = np.asarray([129, 145, 167, ..., 5043, 5112]) # Height in meters
Come si può vedere, l'altezza delle misurazioni non è distanziata regolarmente.
Voglio calcolare la temperatura media in intervalli di altezza regolarmente distanziati. Questa è una sorta di media mobile, ma la dimensione della finestra è variabile, perché i punti di dati all'interno dell'intervallo di interesse non sono sempre gli stessi.
questo potrebbe essere fatto con un ciclo for nel seguente modo:
regular_heights = np.arange(0, 6000, 100) # Regular heights every 100m
regular_temps = []
for i in range(len(regular_heights)-1):
mask = np.logical_and(height > regular_heights[i], height < regular_heights[i+1])
mean = np.mean(temp[mask])
regular_temps.append(mean)
regular_temps = np.hstack((regular_temps))
Non mi piace questo approccio che tanto e mi chiedevo se ci sarebbe stata una soluzione più "NumPy-style".
vuoi una "media mobile" o "la temperatura media in intervalli regolarmente spaziati"? Cioè, se hai intervalli N, vuoi medie N o vuoi una media continua usando una finestra mobile (che copre un intervallo di altezze in ogni posizione)? – tom10
Come ho detto nella mia commnet alla risposta di @elyase, probabilmente ho bisogno di prima di una media in intervalli regolari e poi lisciala con una spline. Tuttavia, una media mobile potrebbe anche essere buona in combinazione con una spline. –