2016-11-02 3 views
0

Используя numpy, у меня есть матрица с именем points.Поиск подходящей строки в матрице numpy

points 
=> matrix([[0, 2], 
     [0, 0], 
     [1, 3], 
     [4, 6], 
     [0, 7], 
     [0, 3]]) 

Если у меня есть кортеж (1, 3), я хочу, чтобы найти строку в points, что соответствует этим цифрам (в данном случае индекс строки 2).

Я попытался с помощью np.where:

np.where(points == (1, 3)) 
=> (array([2, 2, 5]), array([0, 1, 1])) 

Каков смысл этого вывода? Может ли он использоваться для поиска строки, где встречается (1, 3)?

+1

Divakar дал хороший ответ, но вы также можете посмотреть на http://stackoverflow.com/questions/30145996/get-row-numbers-of-rows-matching-a-condition-in-numpy – Jakub

ответ

2

Вы просто нужно искать ALL matches вдоль каждой строки, как так -

np.where((a==(1,3)).all(axis=1))[0] 

шаги, связанные с использованием данного образца -

In [17]: a # Input matrix 
Out[17]: 
matrix([[0, 2], 
     [0, 0], 
     [1, 3], 
     [4, 6], 
     [0, 7], 
     [0, 3]]) 

In [18]: (a==(1,3)) # Matrix of broadcasted matches 
Out[18]: 
matrix([[False, False], 
     [False, False], 
     [ True, True], 
     [False, False], 
     [False, False], 
     [False, True]], dtype=bool) 

In [19]: (a==(1,3)).all(axis=1) # Look for ALL matches along each row 
Out[19]: 
matrix([[False], 
     [False], 
     [ True], 
     [False], 
     [False], 
     [False]], dtype=bool) 

In [20]: np.where((a==(1,3)).all(1))[0] # Use np.where to get row indices 
Out[20]: array([2]) 
Смежные вопросы