Сравнение двух массивов numpy для равенства, по элементам

Каков самый простой способ сравнить два массива numpy для равенства (где равенство определено как: A = B iff для всех индексов i: A[i] == B[i] )?

Просто использование == дает мне логический массив:

  >>> numpy.array([1,1,1]) == numpy.array([1,1,1]) array([ True, True, True], dtype=bool) 

Нужно ли мне and элементам этого массива определить, равны ли массивы, или есть более простой способ сравнения?

3 Solutions collect form web for “Сравнение двух массивов numpy для равенства, по элементам”

 (A==B).all() 

если все значения массива (A == B) равны True.

Изменить (из ответа dbaupp и комментария yoavram)

Необходимо отметить, что:

  • это решение может иметь странное поведение в конкретном случае: если A или B пуст, а другой содержит один элемент, то он возвращает True . По какой-то причине сравнение A==B возвращает пустой массив, для которого оператор all возвращает True .
  • Другой риск заключается в том, что если A и B не имеют одинаковой формы и не транслируются, тогда этот подход вызовет ошибку.

В заключение, решение, которое я предложил, является стандартным, я думаю, но если у вас есть сомнения относительно формы A и B или вы просто хотите быть в безопасности: используйте одну из специализированных функций:

 np.array_equal(A,B) # test if same shape, same elements values np.array_equiv(A,B) # test if broadcastable shape, same elements values np.allclose(A,B,...) # test if same shape, elements have close enough values 

Решение (A==B).all() очень аккуратно, но для этой задачи есть встроенные функции. А именно array_equal , allclose и array_equiv .

(Хотя некоторые быстрые тесты с использованием timeit похоже, указывают на то, что метод (A==B).all() является самым быстрым, что немного странно, поскольку ему нужно выделить целый новый массив.)

Оценим производительность, используя следующий фрагмент кода.

 import numpy as np import time exec_time0 = [] exec_time1 = [] exec_time2 = [] sizeOfArray = 5000 numOfIterations = 200 for i in xrange(numOfIterations): A = np.random.randint(0,255,(sizeOfArray,sizeOfArray)) B = np.random.randint(0,255,(sizeOfArray,sizeOfArray)) a = time.clock() res = (A==B).all() b = time.clock() exec_time0.append( b - a ) a = time.clock() res = np.array_equal(A,B) b = time.clock() exec_time1.append( b - a ) a = time.clock() res = np.array_equiv(A,B) b = time.clock() exec_time2.append( b - a ) print 'Method: (A==B).all(), ', np.mean(exec_time0) print 'Method: np.array_equal(A,B),', np.mean(exec_time1) print 'Method: np.array_equiv(A,B),', np.mean(exec_time2) 

Вывод

 Method: (A==B).all(), 0.03031857 Method: np.array_equal(A,B), 0.030025185 Method: np.array_equiv(A,B), 0.030141515 

Согласно вышеизложенным результатам, методы numpy кажутся быстрее, чем комбинация оператора == и метода all (), и, сравнивая методы numpy, самым быстрым из них является метод numpy.array_equal .

  • Локальная (?) Переменная, на которую ссылаются перед присваиванием
  • Как зашифровать строку с информацией из txt-файла?
  • Почему переменные значения в Python перечисляет один и тот же объект?
  • Эффективный и точный расчет евклидова расстояния
  • Что означает символ -> (символ стрелки больше, чем стрелка) в сигнатуре метода Python?
  • Как добавить тайм-аут соединения с помощью asyncio?
  • Python 3 pyQt4 обновление GUI с переменными из нескольких модулей / классов
  • Перетаскивание в Tkinter?
  • Рисование прямоугольника или строки с использованием событий мыши в открытом cv с использованием python
  • Супер и понимание Python3 -> TypeError?
  • Использование Python 3.3 в примере книги OpenShift
  •  
    Interesting Posts for Van-Lav

    Как сортировать список в python, сравнивая его с отдельным списком?

    Односторонний тест на знакомство с Wilcoxon с использованием scipy

    Есть ли способ использовать рекурсивный выбор функций с нелинейными моделями с scikit-learn?

    import matplotlib.pyplot зависает

    Как составить список списков

    когда я использую matplotlib в ноутбуке jupyter, он всегда поднимает «matplotlib в настоящее время использует ошибку, отличную от GUI»?

    Принудительное применение / json MIME-тип в представлении (Flask)

    TypeError: элемент последовательности 0: ожидаемая строка, int found

    list @property оформленные методы в классе python

    Python: заменить регулярным выражением

    Google app engine Как считать SUM из datestore?

    Получить код завершения процессов, запущенных с помощью многопроцессорной обработки. Pool.map

    Как я могу использовать break и продолжить в шаблонах Django?

    Исходный код Python для встроенного оператора «in»

    Являются ли IPython независимыми процессами?

    Python - лучший язык программирования в мире.