Ecco il mio problema: manipolo le griglie 432*46*136*136
che rappresentano time*(space)
racchiuse in array numpy con numpy e python. Ho un array alt
, che comprende le altitudini dei punti della griglia e un altro array temp
che memorizza la temperatura dei punti della griglia.Trasformazione della griglia numpy in Python utilizzando funzioni universali
è problematico per un confronto: se T1
e T2
sono due risultati, T1[t0,z0,x0,y0]
e T2[t0,z0,x0,y0]
rappresentano la temperatura a H1[t0,z0,x0,y0]
e metri, rispettivamente. Ma voglio confrontare la temperatura dei punti alla stessa altitudine, non allo stesso punto della griglia.
Di conseguenza, desidero modificare l'asse z delle mie matrici per rappresentare l'altitudine e non il punto della griglia. Creo una funzione conv(alt[t,z,x,y])
che attribuisce un numero compreso tra -20 e 200 per ogni altitudine. Ecco il mio codice:
def interpolation_extended(self,temp,alt):
[t,z,x,y]=temp.shape
new=np.zeros([t,220,x,y])
for l in range(0,t):
for j in range(0,z):
for lat in range(0,x):
for lon in range(0,y):
new[l,conv(alt[l,j,lat,lon]),lat,lon]=temp[l,j,lat,lon]
return new
Ma questo richiede sicuramente troppo tempo, non posso lavorare questo. Ho provato a scriverlo usando le funzioni universali con numpy:
def interpolation_extended(self,temp,alt):
[t,z,x,y]=temp.shape
new=np.zeros([t,220,x,y])
for j in range(0,z):
new[:,conv(alt[:,j,:,:]),:,:]=temp[:,j,:,:]
return new
Ma questo non funziona. Hai qualche idea di farlo in python/numpy senza usare 4 cicli annidati?
Grazie
Ciò potrebbe essere dovuto al fatto che le chiamate di funzione in Python sono costose. Precalcolando la coordinata 'conv' con ad es. Il metodo numpy 'fromfunction' potrebbe aiutare. – Ashalynd
È z maggiore di 220? Se questo è il caso, posso capire perché il tuo codice si blocca. – jfish003
È 'conv 'qualsiasi combinazione/funzione lineare di' alt'? Puoi dare un esempio o pubblicare il tuo codice per 'conv'? Se 'conv' può essere vettorizzato, puoi scriverlo in 1 fodera. –