2012-09-14 109 views
7

Mi matriz es una matriz 2D y ha numpy.nan valores además de los valores negativos y positivos:¿Cómo puedo cambiar condicionalmente los valores en una matriz numpy teniendo en cuenta los números 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) 

Y quiero reemplazar todos los números positivos con un número y todos los números negativos con otro número.

¿Cómo puedo hacer eso usando python/numpy?

(Para el registro, la matriz es el resultado de Geoimage, que quiero realizar una clasificación)

+0

Hay números positivos en la matriz, simplemente no se muestran en la vista previa – user528025

Respuesta

24

El hecho de que usted tiene np.nan en su conjunto no debe importar . Sólo tiene que utilizar la indexación de lujo:

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

Si desea reemplazar su np.nans:

x[np.isnan(x)] = something_not_nan 

Más información sobre la indexación de fantasía a tutorial y la NumPy documentation.

+0

Y estuve peleando con ella durante la mayor parte de los últimos dos días ... Funciona – user528025

+0

@ user528025 si tiene problemas, le recomiendo encarecidamente para leer algunos de los documentos a los que me he vinculado. Es bastante útil, y pronto te encantará lo fácil que es manipular 'ndarrays' ... –

+0

Sí, después de darme cuenta de lo simple que era la solución, comencé a buscar material que me ayudara a entender mejor las herramientas :) – user528025

3

Probar:

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

gracias por su respuesta. Aunque fue correcto, no lo elegí porque la respuesta de Pierre fue más completa – user528025

Cuestiones relacionadas