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