2013-04-24 20 views
5

mam matrycę i logiczną Vector:Wybierz wiersze w tablicy Numpy 2D z logicznej wektora

>>>from numpy import * 
>>>a = arange(20).reshape(4,5) 
array([[ 0, 1, 2, 3, 4], 
    [ 5, 6, 7, 8, 9], 
    [10, 11, 12, 13, 14], 
    [15, 16, 17, 18, 19]]) 

>>>b = asarray([1, 1, 0, 1]).reshape(-1,1) 
array([[1], 
    [1], 
    [0], 
    [1]]) 

teraz chcę zaznaczyć wszystkie odpowiednie wiersze w tej macierzy, gdzie odpowiedni wskaźnik w wektorze jest równa zero.

>>>a[b==0] 
array([10]) 

Jak mogę to zrobić, aby zwrócić ten konkretny wiersz?

[10, 11, 12, 13, 14] 

Odpowiedz

2

Kształt b jest nieco dziwne, ale czy można spreparować go jako ładniejszy indeksu jest to prosty wybór:

idx = b.reshape(a.shape[0]) 
print a[idx==0,:] 

>>> [[10 11 12 13 14]] 

Można odczytać to jako „wybierz wszystkie wiersze, gdzie indeks wynosi 0, a dla każdego wybranego wiersza należy pobrać wszystkie kolumny ". Twoja oczekiwana odpowiedź powinna być listą list, ponieważ pytasz o wszystkie wiersze spełniające kryteria.

Powiązane problemy