numpy.testing.assert_array_equal#

тестирование.assert_array_equal(фактический, желаемый, err_msg='', verbose=True, *, strict=False)[источник]#

Вызывает AssertionError, если два array_like объекта не равны.

Даны два объекта, подобных массиву, проверяется равенство формы и всех элементов этих объектов (но см. примечания для особой обработки скаляра). Исключение возникает при несоответствии формы или конфликтующих значениях. В отличие от стандартного использования в numpy, NaN сравниваются как числа, утверждение не возникает, если оба объекта имеют NaN в одинаковых позициях.

Рекомендуется обычная осторожность при проверке равенства чисел с плавающей точкой.

Примечание

Когда любой из фактический или желаемый уже является экземпляром numpy.ndarray и желаемый не является dict, поведение assert_equal(actual, desired) идентично поведению этой функции. В противном случае эта функция выполняет np.asanyarray на входных данных перед сравнением, тогда как assert_equal определяет специальные правила сравнения для общих типов Python. Например, только assert_equal можно использовать для сравнения вложенных списков Python. В новом коде рекомендуется использовать только assert_equal, явно преобразуя либо фактический или желаемый к массивам, если поведение assert_array_equal желательно.

Параметры:
фактическийarray_like

Фактический объект для проверки.

желаемыйarray_like

Желаемый, ожидаемый объект.

err_msgstr, optional

Сообщение об ошибке для вывода в случае неудачи.

verbosebool, необязательно

Если True, конфликтующие значения добавляются к сообщению об ошибке.

strictbool, необязательно

Если True, вызывает AssertionError, когда либо форма, либо тип данных объектов array_like не совпадают. Специальная обработка скаляров, упомянутая в разделе Примечаний, отключена.

Добавлено в версии 1.24.0.

Вызывает:
AssertionError

Если фактические и желаемые объекты не равны.

Смотрите также

assert_allclose

Сравните два объекта array_like на равенство с желаемой относительной и/или абсолютной точностью.

assert_array_almost_equal_nulp, assert_array_max_ulp, assert_equal

Примечания

Когда один из фактический и желаемый является скаляром, а другой — array_like, функция проверяет, что каждый элемент array_like равен скаляру. Обратите внимание, что пустые массивы поэтому считаются равными скалярам. Это поведение можно отключить, установив strict==True.

Примеры

Первый assert не вызывает исключение:

>>> np.testing.assert_array_equal([1.0,2.33333,np.nan],
...                               [np.exp(0),2.33333, np.nan])

Утверждение не выполняется из-за численной неточности с числами с плавающей точкой:

>>> np.testing.assert_array_equal([1.0,np.pi,np.nan],
...                               [1, np.sqrt(np.pi)**2, np.nan])
Traceback (most recent call last):
    ...
AssertionError:
Arrays are not equal

Mismatched elements: 1 / 3 (33.3%)
Mismatch at index:
 [1]: 3.141592653589793 (ACTUAL), 3.1415926535897927 (DESIRED)
Max absolute difference among violations: 4.4408921e-16
Max relative difference among violations: 1.41357986e-16
 ACTUAL: array([1.      , 3.141593,      nan])
 DESIRED: array([1.      , 3.141593,      nan])

Используйте assert_allclose или одну из функций nulp (количество значений с плавающей точкой) для этих случаев вместо:

>>> np.testing.assert_allclose([1.0,np.pi,np.nan],
...                            [1, np.sqrt(np.pi)**2, np.nan],
...                            rtol=1e-10, atol=0)

Как упоминалось в разделе «Примечания», assert_array_equal имеет специальную обработку для скаляров. Здесь проверка убеждается, что каждое значение в x равно 3:

>>> x = np.full((2, 5), fill_value=3)
>>> np.testing.assert_array_equal(x, 3)

Используйте strict вызывать AssertionError при сравнении скаляра с массивом:

>>> np.testing.assert_array_equal(x, 3, strict=True)
Traceback (most recent call last):
    ...
AssertionError:
Arrays are not equal

(shapes (2, 5), () mismatch)
 ACTUAL: array([[3, 3, 3, 3, 3],
       [3, 3, 3, 3, 3]])
 DESIRED: array(3)

The strict параметр также гарантирует, что типы данных массива совпадают:

>>> x = np.array([2, 2, 2])
>>> y = np.array([2., 2., 2.], dtype=np.float32)
>>> np.testing.assert_array_equal(x, y, strict=True)
Traceback (most recent call last):
    ...
AssertionError:
Arrays are not equal

(dtypes int64, float32 mismatch)
 ACTUAL: array([2, 2, 2])
 DESIRED: array([2., 2., 2.], dtype=float32)