Astropy: perbedaan `quantity_allclose` menjadi numpy `allclose`

Dibuat pada 18 Okt 2020  ·  3Komentar  ·  Sumber: astropy/astropy

Keterangan

Untuk nilai tertentu, astropy.units.allclose tidak cocok dengan numpy.allclose

Perilaku yang diharapkan

I/O harus sama, kecuali pertimbangan unit.

Perilaku sebenarnya

Saat membandingkan dua angka di mana array pertama memiliki elemen yang sangat dekat dengan 0 dan array kedua semuanya nol, numpy allclose berfungsi seperti yang diharapkan, tetapi units.allclose mengembalikan False, terlepas dari "rtol"

Langkah-langkah untuk Reproduksi

>>> import numpy as np
>>> np.allclose([1e-17, 0, 0], [0, 0, 0], rtol=1e-5)
True
>>> import astropy.units as u
>>> u.allclose([1e-17, 0, 0] * u.m, [0, 0, 0] * u.m, rtol=1e-5)
False

Detail Sistem

macOS-10.15.7-x86_64-i386-64bit
Python 3.8.2 | dikemas oleh conda-forge | (default, 24 Apr 2020, 07:56:27)
[Dentang 9.0.1]
Numpy 1.18.4
astropi 4.2.dev877+g4eef52a1c
Scipy 1.4.1
Matplotlib 3.2.1

Close? question units

Komentar yang paling membantu

Ini sebenarnya bukan bug, tetapi perbedaan konseptual antara bagaimana allclose dapat beroperasi pada input tanpa unit dan unit penuh. Sebagai catatan docstring dari numpy.allclose :

Jika persamaan berikut adalah True dari segi elemen, maka allclose mengembalikan True.
mutlak(a - b) <= (atol + rtol * mutlak(b))

Dalam numpy.allclose , atol=1e-8 (secara default) karena bisa ada perbandingan yang benar-benar mutlak tanpa harus menskalakan input. Dalam kasus astropy.units.allclose , tidak ada cara alami untuk menyetel atol karena akan bergantung pada unit. Jika Anda melihat tanda tangan panggilan dari dua fungsi, Anda akan melihat bahwa atol=None di astropy.units.allclose . Jika Anda menetapkan atol dalam kasus unit, Anda mendapatkan hasil yang sama:

>>> u.allclose([1e-17, 0, 0] * u.m, [0, 0, 0] * u.m, rtol=1e-5, atol=1e-8*u.m)
True

Semua 3 komentar

Ini sebenarnya bukan bug, tetapi perbedaan konseptual antara bagaimana allclose dapat beroperasi pada input tanpa unit dan unit penuh. Sebagai catatan docstring dari numpy.allclose :

Jika persamaan berikut adalah True dari segi elemen, maka allclose mengembalikan True.
mutlak(a - b) <= (atol + rtol * mutlak(b))

Dalam numpy.allclose , atol=1e-8 (secara default) karena bisa ada perbandingan yang benar-benar mutlak tanpa harus menskalakan input. Dalam kasus astropy.units.allclose , tidak ada cara alami untuk menyetel atol karena akan bergantung pada unit. Jika Anda melihat tanda tangan panggilan dari dua fungsi, Anda akan melihat bahwa atol=None di astropy.units.allclose . Jika Anda menetapkan atol dalam kasus unit, Anda mendapatkan hasil yang sama:

>>> u.allclose([1e-17, 0, 0] * u.m, [0, 0, 0] * u.m, rtol=1e-5, atol=1e-8*u.m)
True

@nstarman Apakah itu akan membantu Anda jika ada catatan eksplisit tentang ini di docstring astropy.units.allclose ?

Itu akan sangat berguna. Penjelasan yang Anda tulis di atas pasti sudah sempurna.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

simontorres picture simontorres  ·  3Komentar

pllim picture pllim  ·  3Komentar

JWDobken picture JWDobken  ·  3Komentar

richardgmcmahon picture richardgmcmahon  ·  3Komentar

pllim picture pllim  ·  3Komentar