2009-11-25 5 views
14

comme une valeur de remplacement pour une autre dans une opération avec des tableaux, ou comment effectuer une recherche dans un tableau et remplacer une valeur par une autreremplacer les valeurs dans un tableau

par exemple:

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

où il peut remplacer NaN par 0. Merci pour toute réponse

Répondre

29

Vous pouvez le faire:

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) renvoie un tableau booléen Truex est NaN. x[ boolean_array ] = 0 utilise fancy indexing pour affecter la valeur 0 partout où le tableau booléen est True.

Pour une excellente introduction à l'indexation de fantaisie et beaucoup plus, voir aussi the numpybook.

+0

NameError: nom 'x' est pas défini fonctionne pas – ricardo

+0

@ricardo: Soit x votre tableau numpy. – unutbu

+0

Salut, excellente réponse, merci – ricardo

14

ces jours-ci, il y a la fonction spéciale:

a = numpy.nan_to_num(a) 
+0

Juste sauvé mon bacon tout en faisant dans le filtre inverse. [image-processing] –

+2

Mais cela impliquera une variable temporaire avec le même type et la même forme que '' 'a''', cela importera sur les grandes matrices. – dashesy

+1

@dashesy A partir de la version 1.13, vous pouvez le faire: a = numpy.nan_to_num (a, copy = False) ... Plus d'informations sur le paramètre 'copy': Créer une copie de x (True) ou remplacer valeurs sur place (False). L'opération in-situ se produit uniquement si la diffusion vers un tableau ne nécessite pas de copie. La valeur par défaut est True. Nouveauté de la version 1.13. –

0

Voici le tableau d'exemple dans la question:

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

Vous pouvez utiliser numpy.where et numpy.isnan fonctions pour créer un nouveau tableau b:

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

Ou utilisez un in-pla fonction CE de modifier directement le tableau a:

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