2009-11-25 46 views
14

como un valor de reemplazo para otro dentro de una operación con matrices, o cómo buscar dentro de una matriz y sustituir un valor por otrosustituir valores en una matriz

por ejemplo:

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

donde puede NaN sustituir por 0. gracias por cualquier respuesta

Respuesta

29

Usted puede hacer esto:

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) devuelve una matriz booleana que es True donde x es NaN. x[ boolean_array ] = 0 emplea fancy indexing para asignar el valor 0 siempre que la matriz booleana sea True.

Para una excelente introducción a la indexación elegante y mucho más, consulte también the numpybook.

+0

NameError: nombre de 'x' no está definido no funcionar – ricardo

+0

@ricardo: Sea X la matriz numpy. – unutbu

+0

hola, excelente respuesta, gracias – ricardo

14

estos días no es la función especial:

a = numpy.nan_to_num(a) 
+0

Acabo de salvar mi tocino mientras hago en el filtro inverso. [procesamiento de imágenes] –

+2

Pero esto implicará una variable temporal con el mismo tipo y forma que '' 'a''', será importante en matrices grandes. – dashesy

+1

@dashesy A partir de la versión 1.13 puede hacerlo en su lugar: a = numpy.nan_to_num (a, copy = False) ... Más información sobre el parámetro 'copiar': si se debe crear una copia de x (Verdadero) o para reemplazar valores en el lugar (falso). La operación in situ solo se produce si la conversión a una matriz no requiere una copia. El valor predeterminado es Verdadero. Nuevo en la versión 1.13. –

0

Aquí es la matriz ejemplo, en la pregunta:

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

También se puede usar numpy.where y numpy.isnan funciones para crear una nueva matriz b:

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

O utilice un in-pla CE Función para modificar directamente el a matriz:

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