Saya ingin membuat beberapa unit-test untuk aplikasi saya, dan saya perlu membandingkan dua array. Karena array.__eq__
mengembalikan larik baru (jadi TestCase.assertEqual
gagal), apa cara terbaik untuk menegaskan persamaan?
Saat ini saya menggunakan
self.assertTrue((arr1 == arr2).all())
tapi saya tidak terlalu menyukainya
python
unit-testing
numpy
pembuat
sumber
sumber
(np.array([1, 1]) == np.array([1])).all()
akan menghasilkan BenarJawaban:
periksa fungsi assert di
numpy.testing
, misalnyaassert_array_equal
untuk pengujian persamaan array titik mengambang mungkin gagal dan
assert_almost_equal
lebih dapat diandalkan.memperbarui
Beberapa versi yang lalu diperoleh numpy
assert_allclose
yang sekarang menjadi favorit saya karena memungkinkan kita untuk menentukan kesalahan absolut dan relatif dan tidak memerlukan pembulatan desimal sebagai kriteria kedekatan.sumber
unittest
Anda dapat menggunakannyaself.assertIsNone(np.testing.assert_array_equal(a, b))
karena ia mengembalikanNone
jika arraynya sama.Saya pikir
(arr1 == arr2).all()
terlihat cukup bagus. Tapi Anda bisa menggunakan:tapi itu tidak persis sama.
Alternatifnya, hampir sama dengan contoh Anda adalah:
Perhatikan bahwa scipy.array sebenarnya adalah referensi numpy.array. Itu membuatnya lebih mudah untuk menemukan dokumentasi.
sumber
Saya menemukan bahwa menggunakan
self.assertEqual(arr1.tolist(), arr2.tolist())
adalah cara termudah untuk membandingkan array dengan unittest.Saya setuju ini bukan solusi tercantik dan mungkin bukan yang tercepat tetapi mungkin lebih seragam dengan kasus pengujian Anda yang lain, Anda mendapatkan semua deskripsi kesalahan yang paling lengkap dan sangat mudah untuk diterapkan.
sumber
np.nan
, karenanp.nan != np.nan
danself.assertEqual
upaya tersebut tidak akan dapat menjelaskannya.Sejak Python 3.2 Anda dapat menggunakan
assertSequenceEqual(array1.tolist(), array2.tolist())
.Ini memiliki nilai tambah untuk menunjukkan kepada Anda item yang tepat di mana array berbeda.
sumber
float
bertipe. Kami benar-benar membutuhkanassertSequenceAlmostEqual
Dalam pengujian saya, saya menggunakan ini:
sumber
np.linalg.norm(arr1 - arr2) < 1e-6
sumber