2009-11-25 1 views
14

als Ersatzwert in einem Array Wert ersetzen, oder wie in einem Array zu suchen, und einen Wert von einer anderenmit Arrays innerhalb einer Operation für eine anderen

beispielsweise ersetzt werden:

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]]) 

wo es NaN von 0. dank für jede Antwort ersetzen

Antwort

29

Sie können dies tun:

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) gibt ein boolesches Array zurück, das True ist, wo auch immer xNaN ist. x[ boolean_array ] = 0 verwendet fancy indexing, um den Wert 0 überall dort zuzuweisen, wo das boolesche Array True ist.

Für eine gute Einführung in die Phantasie Indizierung und vieles mehr, siehe auch the numpybook.

+0

Nameerror: name 'x' ist nicht nicht – ricardo

+0

@ricardo definiert arbeiten: Sei x Ihr numpy Array. – unutbu

+0

hi, ausgezeichnete Antwort, danke – ricardo

14

in diesen Tagen gibt es die Sonderfunktion:

a = numpy.nan_to_num(a) 
+0

Ich habe gerade meinen Speck in Inverse Filter gespeichert. [image-processing] –

+2

Aber dies wird eine temporäre Variable mit dem gleichen Typ und der gleichen Form wie '' a''' beinhalten, das wird auf großen Matrizen wichtig sein. – dashesy

+1

@dashesy Ab Version 1.13 können Sie vor Ort: a = numpy.nan_to_num (a, kopieren = False) ... Weitere Informationen zum Parameter 'Kopieren': Ob eine Kopie von x (True) zu erstellen oder zu ersetzen Werte an Ort und Stelle (Falsch). Die In-Place-Operation tritt nur auf, wenn das Umwandeln in ein Array keine Kopie erfordert. Standard ist Wahr. Neu in Version 1.13. –

0

Hier ist das Beispiel-Array in der Frage:

import numpy as np 
a = np.where(np.eye(7), np.nan, 1) 

Sie entweder numpy.where und numpy.isnan Funktionen verwenden können, ein neues Array erstellen b:

b = np.where(np.isnan(a), 0, a) 

Oder verwenden Sie eine In-pla ce-Funktion direkt zu modifizieren, um die a Array:

np.place(a, np.isnan(a), 0) # returns None