2012-02-15 19 views
13

Mam dwie tablice numpy, npJak filtrować tablicę numpy za pomocą wartości innej tablicy?

a = [1,2,3,4,5] 

oraz szereg filtrów, np:

f = [False, True, False, False, True] 

len(a) == len(f) 

Jak mogę dostać nowy numpy tablicę tylko wartości w którym sam wskaźnik w f jest prawdziwe? W moim przypadku: [2, 5].

Według przyjętego rozwiązania (z różnymi wartościami):

>>> a = numpy.array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 
>>> b = numpy.array([True, False, True, False, True, False, True, False, True, False]) 
>>> a[b] 
array([1, 3, 5, 7, 9]) 
+2

wygląda na to, że b jest listą nie tablicą, b musi być tablicą typu boolean. Spróbuj 'b = np.asarray (b, 'bool')' –

Odpowiedz

22

NumPy obsługuje boolean indexing

a[f] 

ta zakłada, że ​​a i f są numpy tablice zamiast listy Python (jak w pytaniu). Możesz przekonwertować za pomocą f = np.array(f).

+0

To nie działa: zobacz pytanie. –

+2

Upewnij się, że 'b' jest tablicą numpy. Zaktualizowano w odpowiedzi. – YXD

+1

Zmieniłem go zgodnie z twoim rozwiązaniem i skomentowałem w pytaniu ... teraz działa, dziękuję! –

3

Jeśli nie już potrzebne NumPy macierze, oto ze zwykłej listy:

import itertools 
print itertools.compress(a, f) 

do wstępnego 2,7 wersjach Pythona, trzeba toczyć własne (patrz instrukcja):

def compress(data, selectors): 
    return (d for d, s in itertools.izip(data, selectors) if s) 
Powiązane problemy