Quiero hacer algunas pruebas unitarias para mi aplicación y necesito comparar dos matrices. Dado que array.__eq__
devuelve una nueva matriz (por lo que TestCase.assertEqual
falla), ¿cuál es la mejor manera de afirmar la igualdad?
Actualmente estoy usando
self.assertTrue((arr1 == arr2).all())
pero realmente no me gusta
python
unit-testing
numpy
fabricante
fuente
fuente
(np.array([1, 1]) == np.array([1])).all()
, dará TrueRespuestas:
echa un vistazo a las funciones de aserción en
numpy.testing
, por ejemploassert_array_equal
para matrices de coma flotante, la prueba de igualdad puede fallar y
assert_almost_equal
es más confiable.actualizar
Hace unas pocas versiones obtuve numpy,
assert_allclose
que ahora es mi favorito, ya que nos permite especificar tanto el error absoluto como el relativo y no requiere redondeo decimal como criterio de cercanía.fuente
unittest
puede usarlo,self.assertIsNone(np.testing.assert_array_equal(a, b))
ya que devuelveNone
si las matrices son iguales.Creo que se
(arr1 == arr2).all()
ve bastante bien. Pero podrías usar:pero no es exactamente lo mismo.
Una alternativa, casi la misma que su ejemplo es:
Tenga en cuenta que scipy.array es en realidad una referencia numpy.array. Eso hace que sea más fácil encontrar la documentación.
fuente
Encuentro que usar
self.assertEqual(arr1.tolist(), arr2.tolist())
es la forma más fácil de comparar matrices con unittest.Estoy de acuerdo en que no es la solución más bonita y probablemente no sea la más rápida, pero probablemente sea más uniforme con el resto de sus casos de prueba, obtiene toda la descripción del error de la prueba unitaria y es realmente simple de implementar.
fuente
np.nan
, ya quenp.nan != np.nan
elself.assertEqual
intento no podrá dar cuenta de eso.Desde Python 3.2 puedes usar
assertSequenceEqual(array1.tolist(), array2.tolist())
.Esto tiene el valor agregado de mostrarle los elementos exactos en los que difieren las matrices.
fuente
float
tipo. Realmente lo necesitamosassertSequenceAlmostEqual
En mis pruebas uso esto:
fuente
np.linalg.norm(arr1 - arr2) < 1e-6
fuente