2009-10-26 3 views
1

Je possède deux tableaux numpy. Le premier tableau contient des zéros (qui sont distribués au hasard sur la longueur du tableau), que je voudrais supprimer.Suppression des éléments de tableau en Python tout en gardant la trace de leur position

Mon problème est que je voudrais également supprimer les entrées du deuxième tableau aux positions d'index où les éléments du premier tableau sont zéro. J'ai seulement trouvé une boucle forcée très encombrante. Est-ce que quelqu'un a une méthode "élégante" pour le faire?

Thx!

Répondre

4

Est-ce ce que vous voulez? Je suis un débutant NumPy.

In [1]: import numpy as np 

In [2]: a = np.array([1,2,0,3,0,4]) 

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

In [4]: b[np.where(a)] 
Out[4]: array([1, 2, 4, 6]) 

In [5]: np.where(a) 
Out[5]: (array([0, 1, 3, 5]),) 

In [6]: a[np.where(a)] 
Out[6]: array([1, 2, 3, 4]) 
+1

C'est comme cela que je le fais habituellement, mais il existe une méthode encore plus simple. 'np.extract (a, b)'. Il fait la même chose que 'b [np.where (a)]'. – AFoglia

+0

@AFoglia, merci pour l'introduction de np.extract. C'est vraiment cool. – sunqiang

+0

C'est exactement ce que j'ai cherché, merci! – Dzz

0

Vous pouvez utiliser l'indexation booléenne. x! = 0 vous donne un tableau booléen avec True où x! = 0 false où x == 0. Si vous indexez x ou y avec ce tableau (ie x_nozeros = x [x! = 0]) alors vous obtiendrez seulement les éléments où x! = 0. par exemple:

In [1]: import numpy as np 
In [2]: x = np.array([1,2,0,3,0,4]) 
In [3]: y = np.arange(1,7) 
In [4]: indx = x!=0 
In [5]: x_nozeros = x[indx] 
In [6]: y_nozeros = y[indx] 
In [7]: x_nozeros 
Out[7]: array([1, 2, 3, 4]) 
In [8]: y_nozeros 
Out[8]: array([1, 2, 4, 6]) 
Questions connexes