2012-09-14 9 views
7

La mia matrice è una matrice 2D ed è numpy.nan valori oltre i valori negativi e positivi:Come posso modificare in modo condizionale i valori in una matrice numpy prendendo in considerazione i numeri nan?

>>> array 
array([[  nan,   nan,   nan, ..., -0.04891211, 
      nan,   nan], 
    [  nan,   nan,   nan, ...,   nan, 
      nan,   nan], 
    [  nan,   nan,   nan, ...,   nan, 
      nan,   nan], 
    ..., 
    [-0.02510989, -0.02520096, -0.02669156, ...,   nan, 
      nan,   nan], 
    [-0.02725595, -0.02715945, -0.0286231 , ...,   nan, 
      nan,   nan], 
    [  nan,   nan,   nan, ...,   nan, 
      nan,   nan]], dtype=float32) 

e voglio sostituire tutti i numeri positivi con un numero e tutti i numeri negativi con un altro numero.

Come posso farlo usando python/numpy?

(Per la cronaca, la matrice è il risultato di geoimage, che voglio per effettuare una classificazione)

+0

Ci sono numeri positivi nell'array, semplicemente non vengono visualizzati nell'anteprima – user528025

risposta

24

Il fatto che avete np.nan nella propria matrice non dovrebbe importare . Basta usare fantasia indicizzazione:

x[x>0] = new_value_for_pos 
x[x<0] = new_value_for_neg 

Se si desidera sostituire il vostro np.nans:

x[np.isnan(x)] = something_not_nan 

Maggiori informazioni sulla fantasia indicizzazione a tutorial e il NumPy documentation.

+0

E stavo litigando con esso per la parte migliore degli ultimi due giorni ... Funziona – user528025

+0

@ user528025 se hai avuto problemi, ti consiglio vivamente leggere alcuni dei documenti a cui ho collegato. E 'abbastanza utile, e presto a goona piace quanto sia facile manipolare 'ndarrays' ... –

+0

Sì, dopo aver realizzato quanto fosse semplice la soluzione ho iniziato a cercare materiale per aiutarmi a capire meglio gli strumenti :) – user528025

3

Prova:

a[a>0] = 1 
a[a<0] = -1 
+1

grazie per la risposta. Anche se era corretto, non l'ho scelto in quanto la risposta di Pierre era più completa – user528025

Problemi correlati