2013-10-01 6 views

Odpowiedz

1

można użyć itertools.ifilter:

from itertools import ifilter 
c = np.array([ e for e in ifilter(lambda x: x[1] in b, a) ]) 
>> array([[3,4], 
      [5,6], 
      [7,4]]) 
+6

Jest to bardzo powolne w przypadku dużych tablic. Podczas pracy z tablicami NumPy preferowane są wektoryzowane idiomy. –

+1

co ci mówi, że OP używa dużych tablic? Używam szeroko Numpy bez pracy przy Big Data. – lucasg

2

[X do X w jeśli x [1] (4,6,)] powinien zrobić to dla przypadku, o którym wspomniałeś.

Edycja: As @georgesl sugeruje, że "idealny sposób" polega na użyciu iteratora przy konstruowaniu tablicy zamiast używania metody numpy.mat w łańcuchu.

+0

To samo zastrzeżenie co do odpowiedzi georgesla: jest to niepotrzebnie powolne, ponieważ nie używa wektoryzowanych operacji NumPy. –

+0

larsmans Tak jak to jest uzasadnione, że nie jest zoptymalizowany pod kątem takich operacji, to nadal jest ważny, jak komentuje @ georgesl. OP nie zawiera żadnych wyraźnych wskazówek dotyczących używania dużych tablic. – techiev2

2

można zrobić:

check = np.logical_or(a[:,1]==4, a[:,1]==6) 
c = a[check,:] 

Można również użyć | do logicznego operatora or:

check = (a[:,1]==4) | (a[:,1]==6) 
10

numpythonic sposobem osiągnięcia tego celu byłoby wykorzystanie in1d, coś jak:

a[np.in1d(a[:, 1], b)] 
Powiązane problemy