2010-07-16 3 views
5

Très bien, question recrue extrême ici. Dans mon programme, je génère un tableau numpy 2D, dont certaines entrées sont manquantes (pas le type "nan" de nonexistant, mais le type "None", ou NoneType). Je voudrais mettre un masque sur ces entrées, mais je semble avoir quelques difficultés à le faire. Ordinairement, pour masquer plus, disons, toutes les entrées avec la valeur 2, je feraisTrouver des valeurs manquantes dans un tableau numpy

A = np.ma.masked_where (A [A == 2], A)

Dans ce cas, que doesn ne semble pas fonctionner, peu importe ce que j'essaie pour le premier paramètre. Pensées?

Répondre

5

Puisque vous avez -- entrées dans votre tableau, je suppose que cela signifie qu'ils sont déjà masqués:

>>> m = ma.masked_where([True, False]*5, arange(10)) 
>>> print m 
[-- 1 -- 3 -- 5 -- 7 -- 9] 

Donc, je dirais que vos entrées sont masquées et que vous pouvez directement utiliser votre tableau .

Si vous voulez créer un tableau qui ne contient que la valeur non masquée, vous pouvez le faire

>>> m[~m.mask] 
[1 3 5 7] 

m est votre tableau masqué.

Si vous voulez avoir la liste des valeurs masquées, vous pouvez simplement sélectionner les autres valeurs:

>>> m[m.mask] 
[0 2 4 6 8] 

Notez que les valeurs manquantes sont pas Aucun, mais les valeurs d'origine, en général. En fait, un tableau d'entiers ne peut contenir aucun.

Si vous voulez que les indices des valeurs masquées, vous pouvez faire:

>>> numpy.nonzero(m.mask) 

Le documentation de numpy.nonzero() décrit comment doit être interprété son résultat.

+0

Bon point. Après plus d'enquête, je vois que vous avez raison. Les valeurs qui sont réellement le problème semblent être celles que je n'avais pas remarquées auparavant, qui sont en fait "None". Donc, maintenant je vais changer la question à ce qu'elle aurait dû être: comment allez-vous trouver les valeurs "None"? A [A == None] donne juste A [0 ,:] pour une raison quelconque. – user391045

+0

J'ai ajouté plus d'informations dans ma réponse: J'espère que vous trouverez ce dont vous avez besoin! :) – EOL

+0

@ dave-schultz: Si votre retraitement dans votre commentaire ci-dessus est une déclaration plus claire de la question, il serait utile que vous éditiez votre question pour refléter cela. Beaucoup plus de gens liront votre question que votre commentaire ici. – tom10

5

Pour trouver les éléments dans un tableau numpy qui sont None, vous pouvez utiliser numpy.equal. Voici un exemple:

import numpy as np 
import MA 

x = np.array([1, 2, None]) 

print np.equal(x, None) 
# array([False, False, True], dtype=bool) 

# to get a masked array 
print MA.array(x, mask=np.equal(x,None)) 
# [1 ,2 ,-- ,] 
Questions connexes