2014-06-14 26 views
11

mam matrycę jak tenNumpy gdzie() na matrycy 2D

t = np.array([[1,2,3,'foo'], 
[2,3,4,'bar'], 
[5,6,7,'hello'], 
[8,9,1,'bar']]) 

chcę uzyskać indeksy gdzie wiersze zawierające ciąg „bar”

W 1d tablicy

rows = np.where(t == 'bar') 

powinny mi indeksy [0,3], a następnie nadawanie: -

results = t[rows] 

powinien dać mi właściwe wiersze

Ale nie mogę wymyślić, jak sprawić, by działał z tablicami 2d.

+0

Co się stanie zamiast tego? Co próbujesz? – jonrsharpe

+0

Aby sprawdzić, czy tak właśnie stworzyłeś tablicę? Zauważ, że to, co zrobiłeś, daje tablicę * ciągów *. Jeśli chcesz mieszać ciągi i liczby całkowite, będziesz miał tablicę rekordów i będzie zachowywał się inaczej. –

+0

Zrobiłem to jak wyżej i zniknęło dtype = ' Ronnie

Odpowiedz

9

W ogólnym przypadku, gdy wyszukiwanie ciąg może być w dowolnej kolumnie, możesz to zrobić:

>>> rows, cols = np.where(t == 'bar') 
>>> t[rows] 
array([['2', '3', '4', 'bar'], 
     ['8', '9', '1', 'bar']], 
     dtype='|S11') 
9

Trzeba pokroić tablicę do kol chcesz index:

rows = np.where(t[:,3] == 'bar') 
result = t1[rows] 

Powrócisz:

[[2,3,4,'bar'], 
    [8,9,1,'bar']] 
Powiązane problemy