sostituire i valori in un array
Domanda
come valore sostitutivo per un altro all'interno di un'operazione con array o come cercare all'interno di un array e sostituire un valore con un altro
ad esempio:
array ([[NaN, 1., 1., 1., 1., 1., 1.]
[1., NaN, 1., 1., 1., 1., 1.]
[1., 1., NaN, 1., 1., 1., 1.]
[1., 1., 1., NaN, 1., 1., 1.]
[1., 1., 1., 1., NaN, 1., 1.]
[1., 1., 1., 1., 1., NaN, 1.]
[1., 1., 1., 1., 1., 1., NaN]])
dove può sostituire NaN con 0. grazie per qualsiasi risposta
Soluzione
Puoi farlo:
import numpy as np
x=np.array([[np.NaN, 1., 1., 1., 1., 1., 1.],[1., np.NaN, 1., 1., 1., 1., 1.],[1., 1., np.NaN, 1., 1., 1., 1.], [1., 1., 1., np.NaN, 1., 1., 1.], [1., 1., 1., 1., np.NaN, 1., 1.],[1., 1., 1., 1., 1., np.NaN, 1.], [1., 1., 1., 1., 1., 1., np.NaN]])
x[np.isnan(x)]=0
np.isnan (x)
restituisce un array booleano che è True
ovunque x
è NaN
.
x [boolean_array] = 0
utilizza indicizzare la fantasia True .
Per un'ottima introduzione all'indicizzazione fantasiosa e molto altro, vedi anche il numpybook .
Altri suggerimenti
in questi giorni c'è la funzione speciale:
a = numpy.nan_to_num(a)
Ecco la matrice di esempio nella domanda:
import numpy as np
a = np.where(np.eye(7), np.nan, 1)
Puoi utilizzare numpy.where e numpy.isnan per creare un nuovo array b
:
b = np.where(np.isnan(a), 0, a)
Oppure usa una funzione sul posto per modificare direttamente l'array a
:
np.place(a, np.isnan(a), 0) # returns None