Numpy divide per zero rilevata in true_divide su np.where ()
Quando ho capito np.whereche cerca di evitare la divisione per zero, ricevo ancora l'errore, anche quando p_arr - 0.5dovrebbe essere sempre > 0.
mo = np.where(p_arr > 0.5, -6.93/(p_arr - 0.5), 10)
RuntimeWarning: divisione per zero rilevata in true_divide
mo = np. dove (p_arr> 0,5, -6,93 / (p_arr - 0,5), 10)
Qualche idea sul perché e su come risolverlo? Inoltre, esiste un modo per eseguire il debug correttamente, quindi l'errore mostrerebbe qual era il valore esatto di p_arr?
Alcuni test:
x = np.where(p_arr > 0.5, p_arr, 1)
print(np.all((p_arr - 0.5 != 0))) # FALSE
print(np.all((x - 0.5 != 0))) # TRUE
Risposte
pseudocodice per np.where:
def np_where(chooser, true_opt, false_opt):
out = np.empty(chooser.shape, dtype = true_opt.dtype)
out[~chooser] = false_opt
return out
È importante sottolineare che true_optviene generato prima di chiamare la funzione. Quindi, se qualcosa in esso solleva un errore, l'interprete non può mai chiamare np.where, anche se np.wherenon userebbe mai le parti di true_optciò solleva l'errore.
È possibile eliminare gli divide by zeroerrori, ma non utilizzare np.seterrcome consigliato nell'altra risposta: ciò lo spegnerà per l'intera sessione e potrebbe causare problemi con altri bit di codice. Puoi farlo in questo modo:
with np.errstate(divide='ignore'):
mo = np.where(p_arr > 0.5, -6.93/(p_arr - 0.5), 10)
Per scoprire da dove proveniva l'errore, usa:
np.where(p_arr == 0.5)
Che dovrebbe darti le coordinate in cui hai ricevuto l' divide by zeroerrore