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)