web-dev-qa-db-fra.com

Sélectionnez les éléments du tableau numpy via le tableau de masque booléen

Je suppose que la réponse est proche, mais je ne le vois pas :-(

J'ai un tableau de masque booléen de longueur n:

a = np.array([True, True, True, False, False])

J'ai un tableau 2D avec n colonnes:

b = np.array([[1,2,3,4,5], [1,2,3,4,5]])

Je veux un nouveau tableau qui ne contient que les valeurs "True", par exemple:

c = ([[1,2,3], [1,2,3]])

c = a * b ne fonctionne pas car il contient aussi "0" pour les fausses colonnes ce que je ne veux pas

c = np.delete(b, a, 1) does not work

Des suggestions? Merci!

29
JohnDoe

Vous voulez probablement quelque chose comme ça:

>>> a = np.array([True, True, True, False, False])
>>> b = np.array([[1,2,3,4,5], [1,2,3,4,5]])
>>> b[:,a]
array([[1, 2, 3],
       [1, 2, 3]])

Notez que pour que ce type d'indexation fonctionne, il doit s'agir d'une ndarray, comme vous utilisiez, pas d'une list, sinon cela interprètera les False et True comme 0 et 1 et vous donnera ces colonnes:

>>> b[:,[True, True, True, False, False]]   
array([[2, 2, 2, 1, 1],
       [2, 2, 2, 1, 1]])
37
DSM

Vous pouvez utiliser le module numpy.ma et utiliser la fonction np.ma.masked_array pour le faire. 

x = np.array ([1, 2, 3, -1, 5])
mx = ma.masked_array (x, masque = [0, 0, 0, 1, 0])

return: masked_array (data = [1, 2, 3, -, 5], mask = [false, false, false, true, false], fill_value = 999999)

0
Negar