Quero fazer alguns testes de unidade para meu aplicativo e preciso comparar dois arrays. Visto que array.__eq__
retorna uma nova matriz (portanto, TestCase.assertEqual
falha), qual é a melhor maneira de afirmar a igualdade?
Atualmente estou usando
self.assertTrue((arr1 == arr2).all())
mas eu realmente não gosto disso
python
unit-testing
numpy
criador
fonte
fonte
(np.array([1, 1]) == np.array([1])).all()
, renderá TrueRespostas:
verifique as funções de declaração em
numpy.testing
, por exemploassert_array_equal
para matrizes de ponto flutuante, o teste de igualdade pode falhar e
assert_almost_equal
é mais confiável.atualizar
Algumas versões atrás, numpy obtido,
assert_allclose
que agora é meu favorito, pois nos permite especificar os erros absoluto e relativo e não requer arredondamento decimal como critério de proximidade.fonte
unittest
você pode usarself.assertIsNone(np.testing.assert_array_equal(a, b))
como ele retornaNone
se os arrays forem iguais.Eu acho que
(arr1 == arr2).all()
parece muito bom. Mas você pode usar:mas não é exatamente o mesmo.
Uma alternativa, quase igual ao seu exemplo, é:
Observe que scipy.array é, na verdade, um numpy.array de referência. Isso torna mais fácil encontrar a documentação.
fonte
Eu acho isso usando
self.assertEqual(arr1.tolist(), arr2.tolist())
é a maneira mais fácil de comparar arrays com unittest.Eu concordo que não é a solução mais bonita e provavelmente não é a mais rápida, mas provavelmente é mais uniforme com o resto de seus casos de teste, você obtém todas as descrições de erros de teste de unidade e é muito simples de implementar.
fonte
np.nan
, poisnp.nan != np.nan
e aself.assertEqual
tentativa não será capaz de explicar isso.Desde Python 3.2 você pode usar
assertSequenceEqual(array1.tolist(), array2.tolist())
.Isso tem o valor agregado de mostrar os itens exatos nos quais as matrizes diferem.
fonte
float
tipo. Nós realmente precisamosassertSequenceAlmostEqual
Em meus testes eu uso isto:
fonte
np.linalg.norm(arr1 - arr2) < 1e-6
fonte