Я хочу провести несколько модульных тестов для своего приложения, и мне нужно сравнить два массива. Поскольку array.__eq__
возвращает новый массив (так что TestCase.assertEqual
не удается), как лучше всего утверждать равенство?
В настоящее время я использую
self.assertTrue((arr1 == arr2).all())
но мне это не очень нравится
python
unit-testing
numpy
производитель
источник
источник
(np.array([1, 1]) == np.array([1])).all()
вернет TrueОтветы:
проверьте функции assert
numpy.testing
, напримерassert_array_equal
для массивов с плавающей запятой проверка на равенство может завершиться ошибкой и
assert_almost_equal
более надежна.Обновить
Несколько версий назад было получено numpy,
assert_allclose
которое сейчас является моим любимым, поскольку оно позволяет нам указывать как абсолютную, так и относительную ошибку и не требует десятичного округления в качестве критерия близости.источник
unittest
вы можете использоватьself.assertIsNone(np.testing.assert_array_equal(a, b))
его, когда он возвращает,None
если массивы равны.Думаю,
(arr1 == arr2).all()
выглядит неплохо. Но вы можете использовать:но это не совсем то же самое.
Альтернатива, почти такая же, как в вашем примере:
Обратите внимание, что scipy.array на самом деле является ссылкой на numpy.array. Это упрощает поиск документации.
источник
Я нахожу это с помощью
self.assertEqual(arr1.tolist(), arr2.tolist())
- это самый простой способ сравнения массивов с помощью unittest.Я согласен, что это не самое красивое решение и, вероятно, не самое быстрое, но, вероятно, оно более единообразно с остальными вашими тестовыми примерами, вы получаете все описание ошибок unittest, и его действительно просто реализовать.
источник
np.nan
, такnp.nan != np.nan
иself.assertEqual
попытка не будет в состоянии счета для этого.Начиная с Python 3.2 вы можете использовать
assertSequenceEqual(array1.tolist(), array2.tolist())
.Это имеет дополнительную ценность, показывая вам точные элементы, в которых различаются массивы.
источник
float
тип. Нам действительно нужноassertSequenceAlmostEqual
В своих тестах я использую это:
источник
np.linalg.norm(arr1 - arr2) < 1e-6
источник