2010-11-21 16 views
0

J'ai un tableau 2D numpy et je veux qu'il retourne coloumn c où (r, c-1) (ligne r, coloumn c) est égal à une certaine valeur (int n).Comment extraire des lignes dans un tableau, qui contiennent une certaine valeur? (numpy, scipy)

Je ne veux pas itérer sur les lignes d'écriture quelque chose comme

for r in len(rows): 
    if array[r, c-1] == 1: 
    store array[r,c] 

, parce qu'il ya 4000 d'entre eux et ce tableau 2D est juste l'un des 20 je dois regarder creux.

J'ai trouvé "filtre" mais je ne sais pas comment l'utiliser (aucun document trouvé).

Y at-il une fonction qui fournit une telle recherche?

Répondre

3

J'espère avoir bien compris votre question. Disons que vous avez un tableau a

a = array(range(7)*3).reshape(7, 3) 
print a 
array([[0, 1, 2], 
     [3, 4, 5], 
     [6, 0, 1], 
     [2, 3, 4], 
     [5, 6, 0], 
     [1, 2, 3], 
     [4, 5, 6]]) 

et que vous voulez extraire toutes les lignes où la première entrée est 2. Cela peut se faire comme ceci:

print a[a[:,0] == 2] 
array([[2, 3, 4]]) 

a[:,0] désigne la première colonne du tableau, == 2 retourne un tableau booléen marquant les entrées correspondant, puis nous utilisons advanced indexing pour extraire les lignes respectives.

Bien sûr, NumPy doit parcourir toutes les entrées, mais cela sera beaucoup plus rapide que de le faire en Python.

+0

Cela fait presque ce que je veux. Je veux qu'il retourne les lignes pour lesquelles dans la première colonne est un '2'. Dans votre exemple pour retourner juste array ([[2, 3, 4]]). – Sebastian

+0

OK, je vais mettre à jour ma réponse. –

+0

Est-ce mieux? –

0

Les tableaux Numpy ne sont pas indexés. Si vous avez besoin d'effectuer cette opération spécifique de manière plus efficace que linéaire dans la taille du tableau, vous devez utiliser autre chose que numpy.

+0

Je sais que je dois regarder chaque rangée, mais je ne veux pas le faire avec des boucles. J'espère qu'il y a des fonctions intégrées, qui peuvent faire les choses plus vite que les boucles. – Sebastian

Questions connexes