2015-01-08 12 views
6

Ho due array numpy e sto cercando di dividerne uno con l'altro e allo stesso tempo, voglio assicurarmi che le voci in cui il divisore è 0, debbano essere sostituite con 0.numpy: valore non valido rilevato in true_divide

Quindi, faccio qualcosa di simile:

log_norm_images = np.where(b_0 > 0, np.divide(diff_images, b_0), 0) 

Questo mi dà un avvertimento tempo di esecuzione di:

RuntimeWarning: invalid value encountered in true_divide 

Ora, ho voluto vedere cosa stava succedendo e ho fatto la a seguire:

xx = np.isfinite(diff_images) 
print (xx[xx == False]) 

xx = np.isfinite(b_0) 
print (xx[xx == False]) 

Tuttavia, entrambi restituiscono array vuoti, il che significa che tutti i valori negli array sono finiti. Quindi, non sono sicuro da dove provenga il valore non valido. Sto assumendo il controllo b_0> 0 nella funzione np.where si occupa della divisione per 0.

La forma dei due array è (96, 96, 55, 64) e (96, 96, 55, 1)

+0

Perché 'xx' è' False' e ​​un dict? – seequ

+0

Penso che isfinite restituisca un array booleano. Quindi, sto cercando dei luoghi in cui i valori NON sono finiti. – Luca

+0

Prova '[x per x in xx se x == False]'. Stai solo cercando di recuperare la chiave 'False' – seequ

risposta

5

Potrebbe essere un NAN, INF o NINF fluttuare da qualche parte. Prova questo:

np.isfinite(diff_images).all() 
np.isfinite(b_0).all() 

Se uno o entrambi i rendimenti False, che è probabile che la causa dell'errore di runtime.

+0

Questo solleva Il valore di verità di una matrice con più di un elemento è ambiguo. Usa a.any() o a.all() – Luca

+0

@Luca Spiacente, ho modificato la risposta - Ho dimenticato che avevi a che fare con array multidimensionali per un secondo. :) – rchang

+0

Grazie. Entrambi restituiscono true però:/ – Luca

Problemi correlati