Питонический способ проверить, находится ли строка в массиве

Это кажется простым вопросом, но я не смог найти хорошего ответа.

Я ищу питонический способ проверить, есть ли 2d numpy массив содержит заданную строку. Например:

myarray = numpy.array([[0,1],
                       [2,3],
                       [4,5]])

myrow1 = numpy.array([2,3])
myrow2 = numpy.array([2,5])
myrow3 = numpy.array([0,3])
myrow4 = numpy.array([6,7])

Учитывая myarray, я хочу написать функцию, которая возвращает True, если я тестирую myrow1, и False, если я тестирую myrow2, myrow3 и myrow4.

Я пробовал ключевое слово in, но не дайте мне результаты, которые я ожидал:

>>> myrow1 in myarray
True
>>> myrow2 in myarray
True
>>> myrow3 in myarray
True
>>> myrow4 in myarray
False

Кажется, проверяется только то, что один или несколько элементов одинаковы, а не все ли элементы одинаковы. Может кто-нибудь объяснить, почему это происходит?

Я могу выполнить этот тест поэлементно, примерно так:

def test_for_row(array,row):
    numpy.any(numpy.logical_and(array[:,0]==row[0],array[:,1]==row[1]))

Но это не очень питонично и становится проблематичным, если в строках много элементов. Должно быть более элегантное решение. Любая помощь приветствуется!

12
задан Emma 3 July 2011 в 05:14
поделиться