numpy.isclose (https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.isclose.html) :
abs(a - b) <= (atol + rtol * abs(b))
math.isclose (https://docs.python.org/3/library/math.html#math.isclose) :
abs(a - b) <= max(rtol * max(abs(a), abs(b)), atol)
Numpy์ ๋ฐฉ์ ์์ ๋์นญ์ด ์๋๊ณ atol
๋ฐ rtol
๋งค๊ฐ ๋ณ์๋ฅผ ์ฐ๊ด์ํต๋๋ค. ๋ ๋ค ๋์ ๊ฒ (IMO)์
๋๋ค.
๋ค์์ Numpy๊ฐ ๋ ์ซ์๋ฅผ ๋์ผํ๊ฒ "์๋ชป"ํ์ํ๋ ์ํฉ์ ๋๋ค.
a = 0.142253
b = 0.142219
rtol = 1e-4
atol = 2e-5
# true because atol interferes with the rtol measurement
abs(a - b) <= (atol + rtol * abs(b))
Out[24]: True
# correct result, rtol fails
abs(a - b) <= max(rtol * max(abs(a), abs(b)), atol)
Out[29]: False
์ฌ๊ธฐ์ ๋ ํ๋์ ๋์นญ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
a = 0.142253
b = 0.142219
rtol = 1e-4
atol = 1.9776e-05
# relative to b
abs(a - b) <= (atol + rtol * abs(b))
Out[73]: False
#relative to a
abs(a - b) <= (atol + rtol * abs(a))
Out[74]: True
# math one has no problems with this
abs(a - b) <= max(rtol * max(abs(a), abs(b)), atol)
Out[75]: False
ํ์ด์ฌ ์ํ ๋ฒ์ ์ ๋ฐฉํ์ผ๋ก ๋ณด์ ๋๋ค. Numpy๊ฐ ์ด๊ฒ์ ์ฌ์ฉํ๊ธฐ ์์ํด์ผํฉ๋๊น? Numpy ๋ฒ์ ์ ์ฌ์ฉํ๋ฉด ์ด๋ค ์ด์ ์ด ์์ต๋๊น?
imho๋ฅผ ๋ณ๊ฒฝํ๊ธฐ์๋ ๋๋ฌด ๋ฆ์์ต๋๋ค.
์ด๊ฒ์ ๋ชจ๋ numpy์์ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํจ์ ์ค ํ๋์
๋๋ค ( assert_allclose
). ์ ์ผํ ๊ฒฝ๋ก๋ ๋ค๋ฅธ ์ด๋ฆ์ ์ ํํ๋ ๊ฒ์
๋๋ค.
๋๋ ํ์ฌ ๊ตฌํ์ด ๋ฒ๊ทธ์ฒ๋ผ ๋ณด์ธ๋ค๊ณ ๊ณ ๋ฐฑํ๋ค. ์ฐธ๊ณ ์ฌ์ฉํ์ฌ ํด๋น max(abs(a), abs(b))
๋์ abs(b)
๊ธฐ์กด์ ํ
์คํธ๋ฅผ ์ค๋จํ์ง ์์ต๋๋ค, ๊ทธ๊ฒ์ ๋จ์ง์ ๊ฒฝ์ฐ ๊ทธ์ ์กฐ๊ฑด์ ์ํ abs(a) > abs(b)
.
์ ์ด๋ ์ด๊ฒ์ ๋ด์ฅ๊ณผ ์ผ์นํ์ง ์๋๋ค๋ docstring์ ๊ฒฝ๊ณ ๊ฐ ํ์ํฉ๋๋ค.
์ด๊ฒ์ ์ถ๊ฐํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น?
from numpy.__future__ import isclose
๋ง๋ถ์ฌ์, ๊ทธ๊ฒ์ ๋์ ๋ฒ์ ๊ด๋ฆฌ์ ๋ํ ์์ด๋์ด ์ผ ์ ์์ต๋๋ค ...
์ค๋ช ์ ์ํด ๊ฐ์ ธ ์ค๊ธฐ๋ ์ค์ ๋ก isclose๋ฅผ ๊ฐ์ ธ ์ค์ง ์์ง๋ง ์๋ก์ด ์๋ฏธ ์ฒด๊ณ๋ฅผ ํ์ฑํํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ชจ๋๋ก ํผ์ง ๊ฒ์ ๋๋ค.
์์ด๋์ด๋ ์ฌ๋๋ค์ด ์ฌ๋ฐ๋ฅธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋๋ก ํ์ฉํ๋ ๋์์ ๊ธฐ์กด ์ฝ๋๋ฅผ ๊นฐ ํ์๊ฐ ์๋ค๋ ๊ฒ์ ๋๋ค.
, ๊ฐ์ ธ ์ค๊ธฐ๋ ์ค์ ๋ก isclose๋ฅผ ๊ฐ์ ธ ์ค์ง ์์ง๋ง ์๋ก์ด ์๋ฏธ๋ฅผ ํ์ฑํํฉ๋๋ค.
๋๋ ์ด๊ฒ์ ์์
ํ์ง ์๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ ๊ธด ์ด๋ฆ์ ์ ํ mathlike_ufunc
๋ค๋ฃฐ ์์๋, S remainder
๋ฟ๋ง ์๋๋ผ.
from __future__ import print_function
์ค์ ๋ก print_function
์ ์ญ์ ์์ฑํฉ๋๋ค.
์ค์ ๋ก from __future__ import *
์คํ์ผ์ ๊ฐ์ ธ ์ค๊ธฐ๋ ์ฌ๊ธฐ์ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค. ํ์ด์ฌ์์๋ ํ์ผ ๋ณ ์์ค์์ _syntax_์ ์ํฅ์ ๋ฏธ์น๋ฉฐ numpy์์ ๋น์ทํ ์์
์ ์ํํ๋ ๊ฒ์ ๊น๋ค๋ก์ธ ๊ฒ์
๋๋ค.
๋ฐ๋ณต๊ธฐ ์์ธ๋ ๊ตฌ๋ฌธ ๋ณ๊ฒฝ์ด ์๋๋๋ค. ํธ์ถ ๋ชจ๋์ ๋ค์ ์คํ์ด์ค๋ฅผ ๊ฒ์ฌํ๋ ค๋ฉด ์์ C ๋ชจ๋ ๋ง ์์ผ๋ฉด๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋์ ์บ์ํ์ฌ ๊ฐ์ ธ ์ค๊ธฐ ์๊ฐ ๋ง ๋๋ฆฌ๊ฒ ํ ์๋ ์์ต๋๋ค.
๋น์ ๋ง์ด ๋ง๊ณ true_division
์ ๋ถ๋ช
ํ isclose์ ์ ์ฌํฉ๋๋ค.
์ด๊ฒ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๊ธฐ๋ฅ์ ๊ด๋ฆฌํ๊ธฐ ์ํด with
๋ฌธ์ ์ฌ์ฉํ๋ ๋์ # 9444์ ๋ฌธ์ ๋ฅผ ํผํ ์์๋ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค.
math.isclose
์ ์ ์์๋ก @ ChrisBarker-NOAA๋ฅผ CCํฉ์๋ค.
์ด๊ฒ์ ๋งค์ฐ ์ฌ์ํ ๋ฌธ์ IMO์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก atol
๋ฐ rtol
๋ ํ
์คํธ๊ฐ ํต๊ณผ ๋ ๋๊น์ง ์กฐ์ํ์ฌ ์ ํํ๋ฉฐ, ๋ชฉํ๋ ํ์ฉ ์ค์ฐจ๋ณด๋ค ํจ์ฌ ํฐ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ๋ ๊ฒ์
๋๋ค. @charris๊ฐ ์ ์ํ ๊ฒ์ฒ๋ผ rtol
๋ถ๋ถ์ โโ์ํํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ ์๋ ์์ง๋ง,์ด ์์ ์กฐ์ ์ ์ํด ์คํ ๋ด๋ถ ๊ฒ์ฌ ํธ๋ฆญ์ ๋์ด๋ผ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ isclose
๊ฐ ์ข
์ข
assert_allclose
๋๋ ๋ค์ํ ํ์ฌ ํ
์คํธ ๋์ฐ๋ฏธ์ ์ํด ๊ฐ์ ์ ์ผ๋ก ํธ์ถ๋๋ค๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
__future__
์คํ์ผ ๊ฐ์ ธ ์ค๊ธฐ ์ฌ์ฉ์ ๋ํด StackOverflow์ ์์ฒญํ์ต๋๋ค. https://stackoverflow.com/questions/29905278/using-future-style-imports-for-module-specific-features-in-python
TLDR : ๊ฐ๋ฅํ์ง๋ง ์ฝ๊ฑฐ๋ ๊นจ๋ํ์ง๋ ์์ต๋๋ค.
์คํ ์ธํธ๋ก ์คํ ์ ์์ด๋ฅผ์ํ ๊ฒ์ด ์๋๋ผ ํจ์์ ๋ฐํ ๊ฐ์ ๋ณ๊ฒฝํ๊ธฐ์ํ ์ผ๋ฐ์ ์ธ ์ ์ฑ ์ผ๋ก ์ ์๋ฉ๋๋ค. ๋ฌธ์ ๋ ์์น์ ์ผ๋ก ์ด๊ฒ์ด ๋ณ๊ฒฝ๋์ด์ผ ํ๋๊ฐ์ ๋๋ค. ๋๋ต์ด '์'๋ผ๋ฉด ๊ด๋ฒ์ํ ์ฌ์ฉ์ ๊ฐ์ํ ๋ ์ฌ์ฉ ์ค๋จ ๊ธฐ๊ฐ์ ์ต์ํ ๋ช ๋ ์ด๋์ด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. Python์ ๊ณผ๊ฑฐ ๋ชจ๋์ ํฌํจํ์ง ์์์ง๋ง ์์๊ฐ์๋ ๊ฒฝ์ฐ API ์์ ์ฑ์ ๊ฐ์ ํ๊ธฐ์ํ ํ๋์ ์ต์ ์ ๋๋ค.
๋ค๋ฅธ ๋ฐฉ๋ฒ์ isclose(...,symmetric=True)
๋๋ assert_allclose(symmetric=True)
์ต์
์ผ๋ก ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค. ์ฌ๊ธฐ์ ๊ธฐ๋ณธ๊ฐ์ ํ์ฌ ์ํฉ ์ธ False
์
๋๋ค.
๋๋ ์ด๊ฒ์ด rtol
๋ฐ atol
๊ฐ์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ์ง ์์ ๋ ์ฌ์ํ ๋ฌธ์ ๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค. @njsmith๊ฐ ์ธ๊ธ ํ๋๋ก ๋จ์ ํ
์คํธ๋ฅผ ํต๊ณผํ๋๋ก ์กฐ์ ํ๋ฉด๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ๋๋ก๋ ์ค๋ฅ๊ฐ 1 % ( rtol=0.01
) ๋ด์ ์๋ค๊ณ ๋งํ ์ ์์ต๋๋ค.
์ด ๊ฒฝ์ฐ rtol
์ธก์ ์ ๊ดํ ์ต์
์ ๊ฒฝ์ฐ ์ค๋ฅ๋ 100 %์
๋๋ค ( rtol * abs(b)
๊ฐ atol
๊ฐ๊น์์ง๋ฉด atol + rtol * abs(b) ~= 2 * rtol * abs(b)
).
์ผ๋ถ ๊ฐ์ ~ 2 % ์ค๋ฅ๋ก ํต๊ณผ ํ ์ ์์ต๋๋ค.
atol = 1e-8 #default
rtol = 0.01 # 1%
b = 1e-6
a = 1.0199e-6 # ~ 2% larger comapared to b
abs(a - b) <= (atol + rtol * abs(b))
True
@charris ์ ์์ด๋์ด๋ฅผ ๊ตฌํํ๋ฉด์ด ํน์ ๊ฒฝ์ฐ๊ฐ ๋งค์ฐ ์ฝ๊ฐ ๋ ๋๋น ์ง ์ ์์ต๋๋ค. ๋น๊ต๋ฅผ ํจ์ฌ ๋ ์ํํ๊ธฐ ๋๋ฌธ์ ๋๋ค.ํ์ง๋ง ๋์นญ ๋ฌธ์ ๋ฅผ ์ ๊ฑฐํ๊ณ ์ค์ ๋ก ์ด์ ๋ฒ์ ๊ณผ ํธํ๋๋ฏ๋ก ์ฌ์ ํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
IMO๋ Numpy๊ฐ Math ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋์ ๊ฒ์ด์ง๋ง, ๋ณ๊ฒฝ์ด ๋๋ฌด ํ๊ดด์ ์ด๊ณ ๋๋ถ๋ถ์ ์ฌ์ฉ์์๊ฒ ์ค์ํ์ง ์์ ์ ์์์ ์ดํดํฉ๋๋ค. isclose
์ฝ์ด๊ฐ์ ๋ณ๊ฒฝํ๋ ์ต์
์ ๋ง๋๋ ๊ฒ์ด ์ ์ฉํฉ๋๋ค.
@njsmith : ๋ฐ๋ ค์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ฝ๊ฐ์ ์ญ์ฌ : ๋ด๊ฐ stdlib์ ๋ํด isclose๋ฅผ ์ ์ํ์ ๋ ์ฐ๋ฆฌ๋ ํ์คํ numpy๋ฅผ ์ ํ ๊ธฐ์ ๋ก ๋ณด์์ต๋๋ค. ๋๋ง ์์๋ค๋ฉด ํธํ์ฑ์ ์ํด ํธํ ๊ฐ๋ฅํ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ ์ ์์ต๋๋ค :-).
ํ์ง๋ง ๋๋จธ์ง ์ปค๋ฎค๋ํฐ ์๊ฐ์ ํ์ด์ฌ์ "์ฌ๋ฐ๋ฅธ"์ผ์ํ๋ ๊ฒ์ด ๋ ์ค์ํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๊ธด ํ ๋ก ์ด ์ด์ด์ก์ต๋๋ค. ์ ๋ PEP์์ ๋๋ถ๋ถ์ ์์ ์ ํฌ์ฐฉํ๋ ค๊ณ ๋ ธ๋ ฅํ์ต๋๋ค.
๋ค์์ numpy์ ๋ํ ์ฐธ์กฐ์ ๋๋ค.
https://www.python.org/dev/peps/pep-0485/#numpy -isclose
์ด ํ ๋ก ์์์ ๋์ผํ ์์ ์ด ๋ง๋ค์ด ์ก์์ ์ ์ ์์ต๋๋ค.
๊ฒฐ๊ตญ ์ธ ๊ฐ์ง ํต์ฌ ์ฌํญ์ด ๋์์ต๋๋ค.
1) ๋์นญ ์ ๊ทผ ๋ฐฉ์์ ์ต์ํ์ ๋๋ผ์์ ์ด๋ํฉ๋๋ค.
2) ์ธ์์ ํฌ๊ธฐ์ ๋ํ ๊ฐ์ ์ํ์ง ์๋๋ก ๊ธฐ๋ณธ ์ ๋ ํ์ฉ ์ค์ฐจ๋ ์๋ง๋ 0์ด์ด์ผํฉ๋๋ค.
3) "์ฝํ"ํ ์คํธ์ "๊ฐํ"ํ ์คํธ์ ์ฐจ์ด๋ ์์๋๋ ์ฌ์ฉ ์ฌ๋ก์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ํ์ฉ ์ค์ฐจ๋ก ์ฌ์ฉ๋ ๋ ๋ฌด๊ดํ์ต๋๋ค.
๊ฒฐ๊ตญ ์ฐ๋ฆฌ๊ฐ math.isclose๋ฅผ์ํ "์ต๊ณ ์"์๋ฃจ์ ์ ์๊ฐํด ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๊นจ๊ธฐ์ ์ถฉ๋ถํ ๋งํผ "๋ ๋์"๊ฐ์? ๋๋ ๊ทธ๋ ๊ฒ ์๊ฐํ์ง ์๋๋ค.
๋ถํํ๋ ๋ง์ numpy (๋ฐ python)์๋ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ง์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ง๋ง ํ์ฌ ๋ ผ์๊ฐ ๋ง์ง ์์ ์ํ์์ ์ด๋ฌํ ๊ฒ๋ค์ ๋ํด ๋ง์ ์ฐจ์ ์ฑ ์ด ์์ต๋๋ค. ์ด๊ฒ์ ์ ์ ๋์๊ด์ ์์๋๋ (ํ์ํ) ๊ฒ์ด๋ฉฐ, ์ฐ๋ฆฌ๋ ์ง๊ธ ๊ทธ๊ฒ๊ณผ ํจ๊ป ์ด์์ผํฉ๋๋ค.
@njsmith ๊ฐ ๋ง์ต๋๋ค-np.isclose ()์ ์ฌ์ฉ์ ์๊ฒฉํ FP ์ค๋ฅ ๋ถ์์ ์ํด ์ค์ ๋ ํ์ฉ ์ค์ฐจ๊ฐ ์์ง๋ง ์คํ๋ ค np.isclose () ์์ฒด๋ก ์ค๋ฅ๋ฅผ ์๋ํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ ํฐ ๋ฌธ์ ๋ ๊ธฐ๋ณธ atol
๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฆ, ์ธ์๊ฐ ์์ 1์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค. ์ด๋ ๋งค์ฐ ์๋ชป๋ ๊ฐ์ ์ผ ์ ์์ผ๋ฉฐ, ํ
์คํธ๋ฅผ ํต๊ณผํ๋ฉด ์๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์
๋๋ค. , ์ฌ์ฉ์๊ฐ ๋์น ์ฑ์ง ๋ชปํ ์ ์์ต๋๋ค.
In [85]: np.isclose(9.0e-9, 1.0e-9)
Out[85]: True
์์ผ!
์, atol
์์ธ์
๋๋ค.
In [86]: np.isclose(9.0e-9, 1.0e-9, atol=0.0)
Out[86]: False
๋ฐ๋ผ์ ์์ผ๋ก ๋์๊ฐ ๊ธธ์ ๊ฐ๋ ๊ฒ์ ์ข์ ์๊ฐ ์ผ ๊ฒ์ ๋๋ค.
๋๋ ํค์๋ ์ธ์ ์์ด๋์ด๋ฅผ ์ข์ํฉ๋๋ค. __future__ ๋ฑ์ ์๋ง์ผ๋ก ๋ง๋๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๊ฐ๋จ ํด ๋ณด์ ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํ๊ณ ๊ถ๊ทน์ ์ผ๋ก ๋ค์ด ์คํธ๋ฆผ ๊ธฐ๋ณธ ์ฌ๋ฌ ๋ฒ์ ์ ๋ณ๊ฒฝํ ๊ฒ์ธ์ง ๊ฒฐ์ ํ ์ ์์ต๋๋ค.
@bashtage ์ ์ ์์ ์ ์ํ๊ณ ์ถ์ต๋๋ค.
"" "
๋ค๋ฅธ ๋ฐฉ๋ฒ์์ด ์ต์
์ isclose (..., symmetric = True) ๋๋ assert_allclose (symmetric = True) ์ต์
์ผ๋ก ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค. ์ฌ๊ธฐ์ ๊ธฐ๋ณธ๊ฐ์ ํ์ฌ ์ํฉ ์ธ False์
๋๋ค.
"" "
์ ํจ์ ์ด๋ฆ๋ณด๋ค ๋ ๋์ ์ต์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉฐ ํฅํ ์ฌ์ฉ ์ค๋จ ๋ฐ ๊ธฐ๋ณธ๊ฐ ๋ณ๊ฒฝ (๋๋ ๊ทธ๋ ์ง ์์)์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
(๊ฐ๋ ฅํ) ๋์นญ ํ
์คํธ ์ธ์๋ atol
๊ธฐ๋ณธ์ ์ผ๋ก 0์ผ๋ก ์ค์ ๋์ด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด๋ฅผ ๊ฐ์ํ ๋, ๋์์ง๋ ์์ง๋ง symmetric
๋ณด๋ค ๋ ๋์ ๋งค๊ฐ ๋ณ์ ์ด๋ฆ์ด ํ์ํ ์ ์์ต๋๋ค.
์-๊ทธ๋ฆฌ๊ณ assert allclose()
์ธ์๋ numpy์ ๋ค๋ฅธ ๊ณณ์์ isclose()
๊ฐ ํธ์ถ๋์ง ์๋์ง ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ง์ ์ค๋จ ๊ฒฝ๊ณ ๋ฅผ ์
๋ ฅํ๊ณ
๋ณํฉํ๊ธฐ ์ ์ ์ ๊ฑฐํ์ญ์์ค. ์ฐ๋ฆฌ๋ ๊ณ์ํด์
๊ธฐ์กด ์ฝ๋๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝํ๋ผ๋ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ
๋์นญ = ๊ฑฐ์ง; ๊ธฐ๋ณธ๊ฐ์ด๋์ด์ผํ๋ค๊ณ ๋งํ ์ด์ ๊ฐ ์์ต๋๋ค.
๊ฒฝ๊ณ ๊ฐ ์์ด๋ ๊ณง ๋ณ๊ฒฝ๋ฉ๋๋ค.
assert_allclose
์๋ ์ถ๊ฐํด์ผํฉ๋๊น, ์๋๋ฉด ๊ทธ๋ฅ ์กฐ์ฉํ ๋ณ๊ฒฝํด์ผํฉ๋๊น? ์ฌ๋๋ค์ด ๊ฒฝ๊ณ ๋ฅผ ์์ ๊ธฐ ์ํด ๋ชจ๋ ํ
์คํธ๋ฅผ ์
๋ฐ์ดํธํ๋๋กํ๋ ๊ฒ์ ํ์ฉ ์ค์ฐจ ๊ฐ์๋ฅผ ์์ ํ๊ธฐ ์ํด ํ
์คํธ๋ฅผ ์
๋ฐ์ดํธํ๋๋กํ๋ ๊ฒ๊ณผ ์ค์ ๋ก ๋ค๋ฅด์ง ์์ต๋๋ค.
@xoviat @ eric-wieser assert_allclose
๋ํ ์ด์ ๋ฒ์ ๊ณผ ํธํ๋์ง ์๋ ๋ณ๊ฒฝ ์ฌํญ๋์์ ์ ์์ผ๋ฉฐ, ๋๋ฌด ์ง์ฅ์์ฃผ๋ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ ์์ต๋๋ค. ์ง์ ์ค๋จ ๊ฒฝ๊ณ ๋ฅผ ํ์ ํ ์์น๋ฅผ ๋์น ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด?
์ด๊ฒ์ ์ฌ์ ํ โโ๊ทน์์์ ๋ํ ๋ง์ ๊ณ ํต์ฒ๋ผ ๋ค๋ฆด ๊น๋ด ๋๋ ค์
๋์๊ฒ ์ด๋.
๊ธฐ๋ณธ์ ์ผ๋ก atol์ด 0์ด ์๋ ๊ฒ์ ์ฐ์ฐ์ด ์๋๋๋ค. ์ป๊ธฐ ์ํด ํ์ํฉ๋๋ค
์์ ๊ฒฐ๊ณผ์ ๋ค์์ด ํฌํจ ๋ ๋ชจ๋ ํ
์คํธ์ ๋ํ ํฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ ๋์
์ ํํ 0.
assert_allclose์ ๋ํ ๋ณ๊ฒฝ์ ํ์ํ์ง ์์ต๋๋ค.
๋ด๋ถ์ ์ผ๋ก ์ด์ ๋์์ ์ฌ์ฉํฉ๋๋ค.
IMO์ ์กฐ์ฉํ ๋ณ๊ฒฝ์ ๋์ฐํฉ๋๋ค! ์ง์ ์ค๋จ ๊ฒฝ๊ณ ๋
์ฌ๋๋ค์ ๊ฒฐ๊ตญ ๋ํ ํ ํ๋กฌํํธ์ ํ๋๊ทธ๋ฅผ ์
๋ ฅ ํ ํ์๊ฐ ์์ต๋๋ค.
์๋ก์ด ํ๋์ ์ป์ผ์ญ์์ค.
IMO์ ์กฐ์ฉํ ๋ณ๊ฒฝ์ ๋์ฐํฉ๋๋ค!
๋์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ด์ผํฉ๋๋ค. ๋๋ฆฌ ์ฌ์ฉ๋๋ ํจ์์ ์ง์ ์ค๋จ ๊ฒฝ๊ณ ๋ ์ฌ์ฉ์ (์ ์ด๋ ์ค์ ๋ก ์ ์ง ๊ด๋ฆฌ๋ฅผ ์ํํ๋ ์ฌ์ฉ์)๊ฐ ๋ณ๊ฒฝํ๋๋ก ๊ฐ์ ํฉ๋๋ค.
@charris๊ฐ ์ ์ํ ์ด๋ป ์ต๋๊น? ์ด๊ฒ์ ๋ํ atol != 0.0
๋ ๋ฐ์ํ ์์๋ ๋์ ์ผ๋ค์ ๋ํ ๊ฒฝ๊ณ ๋ก ์ฑ์์ง ์์๋ ๋ฌธ์ ๊ณต๊ฐ์ ํ๋ณด ํ ์ ์์ต๋๋ค.
์ฌ๋๋ค์๊ฒ ๋ณ๊ฒฝ ์ฌํญ์ ์๋ฆฌ์ง ์๊ณ ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
ํ๋. ๋ด๊ฐ ๊ทธ ๋ฐฉ๋ฒ์ ์๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๊ฒฝ๊ณ ์
๋๋ค.
์ ๋ง ์ข์ ๊ฒ์ ํ๋๊ทธ๋ฅผ ์ฝ์
ํ๋ ์๋ํ ๋ ๋ฆฌํฉํ ๋ง ๋๊ตฌ์
๋๋ค.
์ด์ ์ฝ๋๋ก. ๊ทธ๋ฐ ๋ค์ '์ ์ง ๊ด๋ฆฌ'๋ ์ฌ์ฉ์์
์ํธ; 5 ๋ถ์ ์์
.
์ฃ์กํฉ๋๋ค. ์ ํ๋๊ทธ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
@charris๊ฐ ์ ์ํ ์ด๋ป ์ต๋๊น?
๊ทธ ์ ์ (https://github.com/numpy/numpy/issues/10161#issuecomment-349384830)์ด ๊ฐ๋ฅํด ๋ณด์ ๋๋ค.
์ฌ๋๋ค์๊ฒ ๋ณ๊ฒฝ๋ ํ๋์ ๋ํด ์๋ฆฌ์ง ์๊ณ ๋์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๊ณ ์น๋ ๊ฒ์ด ์๋๋๋ค. ์ด๊ฒ์ ์๋ฏธ ๋ก ์ ๋ฒ์ ๋ฌธ์ ์์ ๋ฐฉ๊ธ ๋ ผ์ ๋ ๋ชจ๋ ๋ณ๊ฒฝ์ ๋น์ฉ / ํธ์ต์ ๊ดํ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํ ์คํธ ๊ธฐ๋ฅ์์ ๋ณ๊ฒฝํ๊ฑฐ๋ ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํ์ง ์๋ ๊ฒฝ์ฐ์ ๋๋ค. ํ์ฌ ๋์์ ๋ฒ๊ทธ๊ฐ ์๋๋ผ๋ ์ ์ ์ ์ํ์ญ์์ค (์๋ง๋ ์ฐจ์ ์ฑ ์ผ ์ ์์).
๋ช
ํํ๊ฒ ๋งํ๋ฉด isclose์ ๋ํ ๋ณ๊ฒฝ์ ์ ์ํ์ง๋ง assert_allclose๊ฐ ์๋๋๋ค.
์ถ์ฒ๋ฅผ ์ดํด๋ณด๋ฉด ๊ทธ ๋ณํ๋ ํ๊ดด์ ์ผ ๊ฒ์
๋๋ค.
๊ทธ๋ฌ๋ ์ด์ ์ ์ฌ์ ํ โโ๋๋ฌด ์์ต๋๋ค. ๋๋ ์๋ฌด๋ ์๊ฐํ์ง ์๋๋ค
๊ทธ๋๋ ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ๋ ๊ฐ์ฒด, ๋ง์ต๋๊น?
๋๋ ์๋ฌด๋ ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋ฐ๋ํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ง์ต๋๊น?
ํ์คํ์ง ์์ต๋๋ค. ์ธ๋ถ ์ฌํญ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. @charris ์ ์ ์์๋ ํ๋๊ทธ๊ฐ ํ์ํ์ง ์์ ์ ์์ผ๋ฉฐ์ด๋ฅผ ๋์ ํ๋ ํ๋๊ทธ๋ ๋ฐฐ์ด์ ๋ํด ์ฝ๊ฐ ์๋ฌธ์ ์ฌ์ง๊ฐ ์์ต๋๋ค.
In [1]: import math
In [2]: math.isclose(0, 1e-200)
Out[2]: False
๊ตฌ์ฒด์ ์ธ ๋๊ธฐ์ ์ฌ์ฉ ์ฌ๋ก์์ด ํ๋๊ทธ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋ฐ๋ํฉ๋๋ค. ์ ์ฉํ ๋ฆฌํธ๋จธ์ค ํ ์คํธ : ์ด๋ณด ๊ฐ๋ฐ์๊ฐ์ด ํ๋๊ทธ๊ฐ ์กด์ฌํ๋ ์ด์ ๋ฅผ ๋ฌป๋๋ค๋ฉด ์ด๋ป๊ฒ ์ค๋ช ํ์๊ฒ ์ต๋๊น?
์ด๋ป๊ฒ ์ค๋ช ํ์๊ฒ ์ต๋๊น?
math.isclose
ํธ์ถ์ ๋ฒกํฐํํ๋ ค๋ฉด symmetric=True
ํ๋๊ทธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.์ค์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ ์ํฉ์ ๋ ์ฐพ๊ณ ์์ต๋๋ค.
์๋ง ์ฌ๊ธฐ์ ํด๊ฒฐ๋๋ ์ ์ผํ ๋ฌธ์ ๋ ์ด๋ณด์๋ฅผ ๋ง๋๋ ๊ฒ์
๋๋ค.
๋ถ๋ ์์์ ์ ํ๋์ ๋ํด ๋ ๋ง์ด ์๊ฐํ์ญ์์ค. @rgommers์ ์๋
์๋ชป๋ ๊ฒ ๊ฐ์ง๋ง ์ ๋ง ์์
๋ฒํธ? IMO๋ math.isclose ๊ตฌํ์ด ๋ ๋ซ์ง ๋ง
๊ทธ๊ฒ์ ๋ํ ํฉ์๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ถํํ๋ ์ค์ ๋ก
์ซ์๊ฐ "๊ฐ๊น์ด"์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ์ํ ๋จ์ผ ํฌ๊ธฐ ์๋ฃจ์
์
๋๋ค. ๊ทธ๋ฌ๋
๋ค๋ฅธ ์ฌ๋์ ์๋ต์ ๊ธฐ๋ฐ์ผ๋ก (ํ๋ฆฐ ๊ฒ์ด ์๋๋๋ค!), ์ ๋ง
์์ผ๋ก API์ ๋ํ ๋ชจ๋ ๋ณ๊ฒฝ. ์ทจํ ์์๋ ์ ์ผํ ์กฐ์น๋
์๋ง๋ ๋ฌธ์ ์
๋ฐ์ดํธ ์ผ ๊ฒ์
๋๋ค.
์ด์ ์ ๊น๋ฐ์ด ๊ด์ฐฎ์ ๊ฒ์ด๋ผ๊ณ ์๊ฐ ํ์ต๋๊น?)
ํ์คํ math.isclose
์ ๋น๊ตํ๊ณ ์ํ๋ ๊ฒฝ์ฐ rtol ๋ฐ atol์ ์ค์ ํ์ฌ ๋์ผํ ๋ฒกํฐ ๋์์ ์ป๋ ๋ฐฉ๋ฒ์ ๋ฌธ์ํํ๋ ๋ฉ๋ชจ๋ ๊ด์ฐฎ์ ๊ฒ์
๋๋ค.
๋ํ ๋ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ค๋ฉด @charris ๋
ํ์ฌ๋ณด๋ค ๋ ๊ด๋ํ๋ค.
๋ชจ๋ ํ
์คํธ. ๋๋ ์์ง๋ํฉ๋๋ค (์ด ๊ฒฝ๊ณ ๋ฅผ ๋ฐฉ์ถ ํ ์์๋ ์ข์ ์์ด๋์ด๊ฐ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐ
๊ฒฝ๊ณ ๋ ํ ๋ฒ๋ง ๋ฐ์ํด์ผ ํจ) isclose๊ฐ ๋ฐ์ํ๋ ์ํฉ์ด์๋ ๊ฒฝ์ฐ
์ด์ ์๋ ๊ทธ๋ ์ง ์์์ ๋ ์ซ์๋ฅผ "๊ฐ๊น์ด"๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค. ๊ทธ๊ฒ์ ๋ง์ด๋์๋ณด๋ค ์กฐ์ฉํํ์ง์ํค๋
์ํฅ์๋ฐ์ ๋ ๋๊ตฌ๋ ์๊ณ ์์ต๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ ๋
ผ์ํ๋ ๊ฒ์ ๋ํด ์ฝ๊ฐ์ ์ค๋ช
์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. math.isclose
๋ค๋ฅด๊ฒ ๋ง๋๋ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
atol
๋ํ ๋ค๋ฅธ ๊ธฐ๋ณธ๊ฐrtol
์ ๋ค๋ฅธ ์ ์๋๋ ์ฐ๋ฆฌ๊ฐ ์ฒซ ๋ฒ์งธ ๋ฌธ์ ์ ๋ํด`math.isclose์ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋ฌธ์ํํ๋ ๊ฒ ์ธ์๋ ์๋ฌด๊ฒ๋ ํ ์ ์๋ค๊ณ ์๊ฐํ๋ค.
๋ ๋ฒ์งธ ๋ฌธ์ ๋ ๊ธฐ๋ณธ๊ฐ์ด False
symmetric
์ธ์๋ฅผ ์ถ๊ฐํ์ฌ ํด๊ฒฐํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. ์ด์ ์ฐ๋ฆฌ๋ ๋ฌธ์์ ์ธ ์ ์์ต๋๋ค. _ " np.isclose(x, y, symmetric=True, atol=0)
๋ math.isclose(x, y)
"_์ ๋ฒกํฐํ ๋ ๋ฒ์ ์
๋๋ค. ์ ์๊ฒ๋ ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ํด๊ฒฐํ๋ ค๊ณ ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฌ๊ธฐ์์ ์ธ ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค.
isclose
ํธ์ถ์ ์ค๋จํ๊ณ ์ฌ์ฉ์๊ฐ ๊ฒฝ๊ณ ์์ด ์ด์ ๋์์ ๊ฐ์ ธ ์ค๋๋ก isclose(..., symmetric=False)
๋ฅผ ์์ฑํ๋๋กํฉ๋๋ค ( allclose
์ ์ ์ฌ ํจ). ๋๋ ์ด๊ฒ์ด ๋๋ฌด ๋ง์ ์ฝ๋๋ฅผ ์น์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง, ๊ทธ ๊ฒฐ๊ณผ๋ ํฐ ์ด๋์ ์ป์ง ๋ชปํ์ฌ ์ฝ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค. assert_close
๋ ๋ด๋ถ์ ์ผ๋ก isclose(..., symmetric=False)
๋ฅผ ํธ์ถํ๋๋ก ๋ณ๊ฒฝ๋๋ฏ๋ก ํด๋น ์ฌ์ฉ์๋ ์ํฅ์๋ฐ์ง ์์ต๋๋ค.assert_close
symmetric
์ธ์๋ ํ์ํฉ๋๋ค. ์ด๊ฒ์ ๋ค์ด ์คํธ๋ฆผ์์ ์์ฒญ๋ ์ดํ์ด ๋ ๊ฒ์
๋๋ค.์ด ์ค 1 ๋ฒ ์ต์ ์ ๋ฐ๋ ํ ์ ์๋ค๊ณ ์๊ฐํ์ง๋ง ๋๋จธ์ง๋ ์ค๋จ ํ ๋งํ ๊ฐ์น๊ฐ์๋ ๊ฒ ๊ฐ์ง ์์ต๋๋ค.
ํธ์ง : 2๋ ๋์์ด ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ์๋ง ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ ํ์ฉ ๋ ์ ์์ผ๋ฉฐ ํจ์ฌ ๋ ์๋ ๋ฝ์ต๋๋ค.
@ eric-wieser ์ธ ๋ฒ์งธ ์ฐจ์ด์ ์ด ์์ต๋๋ค. atol
์ rtol
๊ฐ ๊ฒฐํฉ๋๋ ๋ฐฉ์์
๋๋ค. ( math.isclose
๋ max
, numpy.isclose
๋ +
). ์ฆ, atol
๋๋ rtol
๊ฐ 0์ด ์๋ ๊ฒฝ์ฐ math.isclose
ํธ์ถ์ numpy.isclose
ํธ์ถ๊ณผ ์ผ์น์ํค๋ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
๊ทธ๋๋ ์ฌ์ฉ์๊ฐ ๋ณผ ์์๋ API๋ฅผ ์ถ๊ฐ ํ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ์ต์
2๋ฅผ ์ ํธํ์ต๋๋ค. ๋๋ ์ฌ์ ํ ๊ทธ ์ต์
์ ์ ํธํฉ๋๋ค.
numpy๊ฐ ์๋์ผ๋ก ์ ๊ณตํ๋ ์ถ๊ฐ ๊ท์
๋ฆฌํฉํ ๋ง ๋๊ตฌ (entry_points์ ์ถ๊ฐ๋จ)๋
๊ธฐ์กด ํ๋ก์ ํธ๋ฅผ ์์ ํฉ๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ ๋ง์ ๋ฐ๋ฅด๋ฉด
์ด ์ต์
์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ ํธํ์ง ์์ต๋๋ค.
๋๋ ๊ทธ๋ ์ง ์์ผ๋ฉฐ 3 ๋ฒ์ด๋ 4 ๋ฒ ์ต์
์ ์ฐฌ์ฑ ํ ์ ์ด ์์ต๋๋ค. ์
๋ํ ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ ๋๊น์ง ๊ธฐ๋ฅ ๋์ ๋ณ๊ฒฝ์ ์ ํธํ์ง ์์ต๋๋ค.
4 ๊ฐ ์ด์์ ์ฃผ์ ๋ฆด๋ฆฌ์ค์ ๋ํด ๋ฐฉ์ถ๋์์ต๋๋ค.
๋ค๋ฅธ ์ฌ๋๋ค์ด (๊ทธ๋ค์ด ๊ฐ์ง๊ณ ์๋) ์ต์
2์ ๋์ํ์ง ์๋๋ค๊ณ ๊ฐ์ ํ๋ฉด, ๋๋
์ต์
1์ ์ ํธํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ค๋ฅธ ์ฌ๋๋ค (ํนํ @njsmith)์ ์ ํธํ์ง ์์ต๋๋ค.
์ฌ๊ธฐ์์ ์ ๊ณต ํ ์ต์
์ค ํ๋์
๋๋ค. ์ ์ด๋ ๊ทธ๊ฒ์ ๋ด ์๊ฐ์
๋๋ค.
@njsmith ๋ง์ง ์์ต๋๋ค. ํ๋๊ทธ๋ก ํจ์ ๋์์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์ธ ๋ฒ์งธ ์ฐจ์ด๋ฅผ ํธ๋ ์จ์ด๋ธ๋ก ์ ์ด _ "rtol์ ๋ค๋ฅด๋ค"_
"" "
์ค์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ ์ํฉ์ ๋ ์ฐพ๊ณ ์์ต๋๋ค.
"" "
๋๋์ ๋์ ๊ฑธ๊ฒ ์ต๋๋ค. (์ด๊ฒ ๋ฌด์จ ๋ป์ธ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.) atol์ด ํ
์คํธ๋ฅผ ํจ์ฌ ๋ ๋ฏผ๊ฐํ๊ฒ ๋ง๋ค๊ธฐ ๋๋ฌธ์ ํต๊ณผํด์๋ ์๋๋ ํ
์คํธ๊ฐ ์์ต๋๋ค. ์์ด์ผํฉ๋๋ค.
ํ์ฌ ๊ตฌํ์๋ ์ธ ๊ฐ์ง "๋ฌธ์ "๊ฐ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
1) ๋์นญ์ด ์๋๋๋ค.
2) atol์ 0๊ณผ ๋น๊ตํ ์์๋ ๊ฒฝ์ฐ์๋ ๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค (ํผํ ์ ์์).ํ์ง๋ง ์ฝ 2 ๋ฐฐ ์ ๋์ ํ์ฉ ์ค์ฐจ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค. ๋๋ atol์ด ํฌ๋ฉด ํจ์ฌ ๋ ๋ง์ ์์ผ๋ก ์์ ํ ๊ฒฝ์ฐ ๊ทธ๋ด ์ ์์ต๋๋ค. ํฌ๊ธฐ ๊ฐ.
3) atol์ 0์ด ์๋๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ๋๋ค .-- ์ค์ ๋ก ์ด๊ฒ์ด ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค (ํนํ ๋ ๊ฐ์ง๋ฅผ ๋ชจ๋ ์ถ๊ฐํ๋ ํ์ฌ ์๊ณ ๋ฆฌ์ฆ์์) ์๋๋ ํ ์คํธ ํต๊ณผ๋ก ์ฝ๊ฒ ์ด์ด์ง ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ฝ๊ฐ ๊ฒ์ผ๋ฅด๋ค-์ฐ๋ฆฌ๋ ๊ธฐ๋ณธ ํ์ฉ ์ค์ฐจ๋ก ํ ์คํธ๋ฅผ ์์ฑํ๊ณ ํต๊ณผํ๋ฉด ๋๋ฌ๋ค๊ณ ์๊ฐํฉ๋๋ค. (๋ด๊ฐ ๊ทธ๊ฒ์ด ์๋ํ๋ ๋ฐฉ๋ฒ์ด๋ผ๋ ๊ฒ์ ๊นจ๋ฌ์์ ๋, ๋๋ y ์ฝ๋๋ก ๋์๊ฐ์ ๊ทธ ์ค ๋ช ๊ฐ๋ฅผ ์ฐพ์์ต๋๋ค-์์ค!
์ด ์ค๋ ๋์ ๋๊ตฐ๊ฐ๋ "๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ๋ญ๊ฐ ์ง๋ผ ์ ์์ต๋๋ค.
isclose (1e-200, 0.0)
๊ธฐ๋ณธ์ ์ผ๋ก False๋ฅผ ๋ฐํํฉ๋๋ค. ๋์ํ์ง ์์ต๋๋ค-์, ๋๋์ง ๋ง ์ฌ์ฉ์๊ฐ ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ์๊ฐํ๋๋ก ๊ฐ์ํ๋ ๋ฐ๋ฉด ํ์ฌ ๊ตฌํ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์ต๋๋ค.
[8]์์ : np.isclose (1e-20, 1e-10)
์ถ๋ ฅ [8] : ์ฐธ
์ ๋ง? ํ๋๋ MAGNITUDE์ TEN ORDERS๊ฐ ๋ค๋ฅธ ๊ฒ๋ณด๋ค ํฌ๊ณ ๋ค์ True ????
๋ด ์์ ์ atol์ด 0์ด ์๋๋ฉด 0๊ณผ ๋น๊ตํ๋ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์๋ ๋ ๋๋ผ์ด ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ์ง๋ง ์์ ์ซ์๋ก ์์ ํ ๋ ํจ์ฌ ๋ ์ํํ๊ณ ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ค๋ ๊ฒ์ ๋๋ค (์์ ์ค์ ๋ก๋ ํฌ๊ธฐ 1๋ณด๋ค ์์ ๊ฒ์).
๊ทธ๋ฆฌ๊ณ 1e8๋ณด๋ค ํฐ ์ซ์๋ก ์์ ํ๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ atol๋ ๋ถ์ ์ ํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ (2)์ ๊ฒฐํฉํ๋ฉด ๊ธฐ๋ณธ atol์ด ๋๋ผ์ด ๋ฐฉ์์ผ๋ก ์๋ ํ์ฉ ์ค์ฐจ ํ ์คํธ๋ฅผ ๋ง์น ์ ์์์ ์๋ฏธํฉ๋๋ค.
๊ทธ๋์ : ์๋์ค, ๊ทธ๊ฒ์ ๋ฒ๊ทธ๊ฐ ์๋๋ฉฐ "๊นจ์ง"๊ฒ๋ ์๋์ง๋ง ๊ฝค ์ฐจ์ ์ฑ ์ด๋ฏ๋ก ๋ ๋์ ๊ตฌํ์ผ๋ก ๋์๊ฐ ์์๋ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
๋๋ ํ๋๊ทธ ์ ๊ทผ ๋ฐฉ์์ ์ข์ํ์ง๋ง ๋ง์์ด ๋ฐ๋๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฌธ์ ๋ ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ง ์๊ณ ์ด๋ ์์ ์์ ๊ธฐ๋ณธ ํ๋๊ทธ๋ฅผ ๋ณ๊ฒฝํ์ง ์๋ ํ ๊ฑฐ์ ๋ชจ๋ ์ฌ๋๋ค์ด "์ด์ "์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ฒ ๋ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๋๋ค. ๊ฑฐ์ ์์ํ. ๊ทธ๋ฆฌ๊ณ ์ ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ๋น๋ ํ ์ ์๋์ง์ ๋ํ ๋ง์ ์ข์ ์ฃผ์ฅ์ด์์์ต๋๋ค.
๊ทธ๋์ ์๋ง๋ ์๋ก์ด ์ด๋ฆ์ ๊ฐ์ง ์๋ก์ด ๊ธฐ๋ฅ์ด ํ์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ๋๋ค์ด ์๋ก์ด ๊ฒ์ ์ฌ์ฉํ๋๋ก ์ฅ๋ คํ๋ ๋ฌธ์์ ์ถ๊ฐ ํ ์ ์๊ณ , ์ฌ๋๋ค์ด ์๋ก์ด ๊ฒ์ ์ฌ์ฉํ ๋ ์ด๋ค ์์ ์์ ๊ฒฝ๊ณ ๋ฅผ ์ถ๊ฐ ํ ์ ์์ง๋ง, ์ฐ๋ฆฌ๋ ๋๊ตฌ์ ์ฝ๋๋ ๊นจ๋จ๋ฆฌ์ง ์์ ๊ฒ์ ๋๋ค.
๋๊ตฌ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ข์ ์ด๋ฆ์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๊น ????
์ด์ฉ๋ฉด np.math.isclose์ ์น๊ตฌ๋ค? ๋ชจ๋ฅด๊ฒ ์ด์.
๊ทธ๋ฌ๋ฉด np.remainder
์ฐจ์ด๋ ํด๊ฒฐ๋๊ณ from numpy import math
์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ์ฝ๊ฒ ๋ฒกํฐํ ํ ์ ์์ต๋๋ค.
๊ทธ๋์ ์ ๋ np.math
๋ชจ๋์์ +1
๋ฉ๋๋ค.
10 ๋ ๋์ ๊ทธ๋ ๊ฒ ์๋ํ๋ ๋ค๋ฅธ ๊ธฐ๋ฅ๊ณผ ์ฝ๊ฐ ๋ค๋ฅธ ๋์์ ๊ฐ์ง ์๋ก์ด ๊ธฐ๋ฅ์ ๋์ ํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ๋งค์ฐ ์ข์ง ์์ ์๊ฐ์ ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ฌธ์๋ก ์ ์ ํ๊ฒ ํด๊ฒฐํ ์์๋ ๋ฌธ์ ๋ ๊ฑฐ์ ์์ต๋๋ค. ๊ทธ๋์ ์๋ก์ด ๊ธฐ๋ฅ์์ -1. ๊ทธ๋ฆฌ๊ณ ์์ ํ ์๋ก์ด ์๋ธ ๋ชจ๋์์๋ ํ์คํ -1์ ๋๋ค.
์ ๋ง? ํ๋๋ MAGNITUDE์ TEN ORDERS๊ฐ ๋ค๋ฅธ ๊ฒ๋ณด๋ค ํฌ๊ณ ๋ค์ True ????
๋น์ ์ ๊ธฐ๋๊ฐ ์ฐธ์ธ์ง ๊ฑฐ์ง์ธ์ง๋ ์ ์ ์ผ๋ก ๋ฌธ๋งฅ์ ๋ฌ๋ ค ์์ต๋๋ค. ๊ทธ๊ฒ์ด [0, 1)์ ์ฐ์ ๋ถํฌ์์ ๋์จ ์ซ์์ ๋ํ ๊ฒ์ด๋ผ๋ฉด ์, ์๋ง๋ True๋ฅผ ๊ธฐ๋ํ ๊ฒ์ ๋๋ค. ์ฌ์ฉ์๋ ์ ๋ / ์๋ ํ์ฉ ์ค์ฐจ์ ํจ์๊ฐ ์ค์ ๋กํ๋ ์ผ์ ์ดํดํด์ผํฉ๋๋ค. ๊ทธ๊ฒ์ด ๋ฐ๋ก ๋ฌธ์์ ๋ชฉ์ ์ ๋๋ค.
symmetric_isclose()
์ (๋) ์ฝ๊ฐ ์ฅํฉํ์ง๋ง ์ ๋์๋ ๋ถ์พํ์ง ์์ต๋๋ค.
2017 ๋ 12 ์ 10 ์ผ ์คํ 8:09์ Ralf Gommers [email protected] ์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
๋ค๋ฅธ ๋์๊ณผ ์ฝ๊ฐ ๋ค๋ฅธ ๋์์ผ๋ก ์๋ก์ด ๊ธฐ๋ฅ์ ์๊ฐํฉ๋๋ค.
10 ๋
๋์ ๊ทธ๋ ๊ฒ ์๋ํ๋ ๊ธฐ๋ฅ์ ์ผ๋ฐ์ ์ผ๋ก
์๊ฐ.
๋๋ ์ข์ํ์ง ์์ต๋๋ค.ํ์ง๋ง ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ์ฌ๋๋ค์ ์ฝ๋๋ฅผ ๊นจ๋ ๊ฒ์ ๋ ๋์ฉ๋๋ค.
numpy๋ฅผ ๊ฐ์ ํ์ง ์๋ ๋จ์ํ ๊ฒ ์ธ์ ๋ค๋ฅธ ์์ด๋์ด๊ฐ ์์ต๋๊น?
์ด ๊ฒฝ์ฐ ์ ๋๋ก ๋ ์์๋ ๋ฌธ์ ๋ ๋ง์ง ์์ต๋๋ค.
๋ฌธ์๋ก ํด๊ฒฐ๋์์ต๋๋ค.
๋์ํ์ง ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ด ์ค์ํฉ๋๋ค.
๋งค๊ฐ ๋ณ์๋ฅผ ์กฐ์ ํ ์์๋ ๋ฐฉ๋ฒ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋์นญ ๋น๊ต.
๊ทธ๋ฆฌ๊ณ ์์ ํ ์๋ก์ด ์๋ธ ๋ชจ๋์์๋ ํ์คํ -1์ ๋๋ค.
๋๋. numpy์์ด ์ํ ๋ชจ๋์ ๋ค๋ฅธ ๊ฒ์ด์๋ ๊ฒฝ์ฐ
์ ์ฉํ ๋ฑ๊ฐ๋ฌผ์ numpy์ ๋ค์ ์คํ์ด์ค์ ์ถ๊ฐ ํ ์ ์์ต๋๋ค.
๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ฒ๋ผ.
์ ๋ง? ํ๋๋ MAGNITUDE์ TEN ORDERS๊ฐ ๋ค๋ฅธ ๊ฒ๋ณด๋ค ํฝ๋๋ค.
์ง์ค????
๋น์ ์ ๊ธฐ๋๊ฐ ์ฐธ์ธ์ง ๊ฑฐ์ง์ธ์ง๋ ์ ์ ์ผ๋ก ๋ฌธ๋งฅ์ ๋ฌ๋ ค ์์ต๋๋ค.
๋ฐ๋ก ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ atol์ "ํฉ๋ฆฌ์ ์ธ"๊ธฐ๋ณธ๊ฐ์ด ์์ต๋๋ค.
[0, 1)์ ์ฐ์ ๋ถํฌ์์ ๋์จ ์ซ์์ ๋ํ ๊ฒฝ์ฐ
์, ์๋ง๋ True๋ฅผ ๊ธฐ๋ํ ๊ฒ์
๋๋ค.
๊ทธ๋ฌ๋ isclose๋ ์๋์ ์ธ ๋น๊ต๋ก ๊ด๊ณ ๋ฉ๋๋ค.
์๋์ฑ์ ์์ ํ ์ฌ๋ผ์ง๊ณ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ๊ทธ๊ฒ์ ๋ํด ์๊ฐํ ํ์์์ด.
๊ทธ๊ฒ ๋ด ์์ ์
๋๋ค. ๊ธฐ๋ณธ๊ฐ์
์๋ฆฟ์ 1์ ๊ฐ์ด์ด์ผํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์
๋๋ค.
๋ง๋ฅ์ธ.
์ด๊ฒ์ ๋ ๋์๊ฒ ๋ด๋ ค๊ฐ๋๋ค-๊ฑฐ์ง ์์ฑ ๋๋ ๊ฑฐ์ง ์์ฑ์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ
์คํธ์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์์ ์คํ์ ํจ์ฌ ๋ ๋์ฉ๋๋ค.
(์ : ํต๊ณผํด์๋ ์๋๋ ํ ์คํธ)
์ฌ์ฉ์๋ ์ ๋ / ์๋ ๊ณต์ฐจ์
ํจ์๋ ์ค์ ๋กํฉ๋๋ค.
๋ฌผ๋ก ์
๋๋ค.ํ์ง๋ง ํจ์์๋ ํฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ๊ฐ๊ณผ
์ดํดํ๊ธฐ ์ฌ์ด ๊ฐ๋ ฅํ ์๊ณ ๋ฆฌ์ฆ.
๋๋ ๋ฌธ์๋ฅผ ๊ฐ์ ํ๊ณ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ๋๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ๋์นญ์ ๋ถ์กฑ์ "isclose (a, b)๋ a๊ฐ b์ ๊ฐ๊น๋ค๋ ๊ฒ์ ์๋ฏธํ์ง๋ง ๋ถ๋ ์์์ ์ ์ ๋ ์ ๋ฐ๋๊ฐ ๋ค์ํ๊ธฐ ๋๋ฌธ์ ํญ์ b๊ฐ a์ ๊ฐ๊น์ด ๊ฒฝ์ฐ๋ ์๋๋๋ค. b๋ ์์ ๊ฒฐ๊ณผ์ด๊ณ a๋ ์ค์ ๊ฒฐ๊ณผ ์ฌ์ผํฉ๋๋ค. " ์ด๊ฒ์ ํ ์คํธ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๋์นญ ํจ์ ์ผ์ด์ค๋ ์ค์ ๋ก ์ ๋นํํ๊ธฐ๊ฐ ์กฐ๊ธ ๋ ๋ณต์กํฉ๋๋ค. ๋๋์ ์ ํฌํจํ๋ ์๋ ์ค์ฐจ๋ ๋์นญ์ด ์๋๋๋ค.
๋๋ ์ข์ํ์ง ์์ต๋๋ค.ํ์ง๋ง ๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ์ฌ๋๋ค์ ์ฝ๋๋ฅผ ๊นจ๋ ๊ฒ์ ๋ ๋์ฉ๋๋ค. numpy๋ฅผ ๊ฐ์ ํ์ง ์๋ ๋จ์ํ ๊ฒ ์ธ์ ๋ค๋ฅธ ์์ด๋์ด๊ฐ ์์ต๋๊น?
์ ํจ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ ํจ์๊ฐ์๋ ๊ฒ๋ณด๋ค ๋ซ๋ค๋ ๊ฐ์น ํ๋จ์ ์ด๋ฏธ ํต๊ณผํ๊ณ ์์ต๋๋ค. imho๊ฐ ์๋๋๋ค. ์ธ ๊ฐ์ง ์ต์ :
2๋ ์ ๋ฐ์ ์ผ๋ก 3๋ณด๋ค ๋์ ์ ํ์ด๋ฏ๋ก numpy๋ฅผ "๋ ๋์"๊ฒ์ผ๋ก ๋ง๋ญ๋๋ค. ๋น์ ์ ๋ํ์ด atol / rtol์ด ๋จ์ผ ๊ธฐ๋ฅ์ ๊ตญํ๋์ง ์๋๋ค๋ ๊ฒ์ ๋ฌด์ํ๊ณ ์์ต๋๋ค. ๊ทธ๋์ ๋ค์์ ์๋กญ๊ณ ์ฝ๊ฐ "๋ ๋์" assert_allclose
? ์ด๊ฒ์ ๋ฌธ์ ์ ์ฉ์ ๊ฒฝ์ฐ๋ฅผ ๋์ฑ ๋ช
ํํ๊ฒํฉ๋๋ค.
์ด๊ฒ์ ๋งค์ฐ ์ฌ๊ฐํ ๊ฒฐํจ์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฝ๋ ํ
์คํธ์ ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค. ์ข์ง ์์ต๋๋ค. numpy.isclose ๋ฐ ๊ธฐ๋ณธ atol๋ก ํ
์คํธ๋๋ ๋ฌ์ ๋ฌด์์ด๋ ๋ณด๋ด์๊ฒ ์ต๋๊น? ๋๋ ๋ ๋ฒ ์๊ฐํ ๊ฒ์
๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ๋ฌธ์์์ ์ด๋ฌํ ํจ์ ์ ๋์ ๋๊ฒ ๋ง๋ค์ด์ผํฉ๋๋ค.
๋ณ์นญ ํจ์๋ฅผ ์ถ๊ฐํ๋ฉด ์ฌ์ฉ์์๊ฒ ๊ฐ์ํ์ง ์๋ ํ ์ฝ๋๋ฒ ์ด์ค๊ฐ ๋ณต์กํด์ง๋๋ค (๋ฐ์ํ์ง ์์).
๋๋ ๋์นญ์ด ์ฌ์ํ๋ค๋ ๋ฐ ๋์ํ์ง๋ง ์ฐ๋ฆฌ๋ ์ฌ์ ํ ๊ทธ๊ฒ์ ๊ณ ์ณ์ผํฉ๋๋ค. ๊ทธ๋๋ก๋๋ฉด ์ค์ ํจ์ ์์ ์ฌ์ฉ์์์ฃผ์๊ฐ ์ฐ๋งํด์ง ์ ์์ต๋๋ค.
@rgommers ๋ ๋ค์
"" "
์ ํจ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ ํจ์๊ฐ์๋ ๊ฒ๋ณด๋ค ๋ซ๋ค๋ ๊ฐ์น ํ๋จ์ ์ด๋ฏธ ํต๊ณผํ๊ณ ์์ต๋๋ค. imho๊ฐ ์๋๋๋ค.
"" "
๊ธ์, ๋๋ math.isclose
์ ๋ํด ์๊ฐํ๊ณ ํ ๋ก ํ๋ ๋ฐ ๋ง์ ์๊ฐ์ ๋ณด๋๊ณ , ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ๊ฒ๋ค ์ค์์ numpy ๊ตฌํ์ ์ดํด ๋ณด๋ ๊ฒ์ผ๋ก ์์ํ์ต๋๋ค. ๊ทธ๋ ์ต๋๋ค. ์ ๋ ๊ทธ ์ ๊ทผ ๋ฐฉ์์ด ๋ ๋ซ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋์ด ํ ๋ก ์์ ๊ทธ๊ฒ์ด ๊ฑฐ์ ํฉ์๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋ ๋์ ์๊ณ ๋ฆฌ์ฆ / ์ธํฐํ์ด์ค๋ฅผ numpy๋ก ๊ฐ์ ธ ์ค๋ฉด ๋ ์ข์ต๋๋ค.
์๋ง๋ numpy์์ ์ด์ ๊ธฐ๋ฅ๊ณผ ์ ๊ธฐ๋ฅ์ ๋ชจ๋ ๊ฐ๋ ๊ฒ์ด ๋จ์ํ ์ด์ (์๋ง ๋ ์ ๋ฌธ์ํ ๋) ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ๋๋ ๊ฒ๋ณด๋ค ๋ซ์ง ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ฌผ๋ก , ๊ทธ๊ฒ์ ์์ ํ ํ๋นํ ์์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ ๋ ๊ทธ ๋ ผ์๋ฅผํ์ง ์์ผ๋ ค ๊ณ ํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ์ฝ๋ฉํธ๋ "10 ๋ ๋์ ๊ทธ๋ ๊ฒ ์๋ํด์จ ๋ค๋ฅธ ๊ธฐ๋ฅ๊ณผ ์ฝ๊ฐ ๋ค๋ฅธ ๋์์ผ๋ก ์๋ก์ด ๊ธฐ๋ฅ์ ๋์ ํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ๋งค์ฐ ์ข์ง ์์ ์๊ฐ์ ๋๋ค." ํ ๋ก ์ ์ข ๋ฃํ๋ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค. ๋ด ์์ ์ ์๋ก์ด ๋ฐฉ๋ฒ์ด ๊ทธ๋งํ ๊ฐ์น๊ฐ์๋ ๊ฒ๋ณด๋ค "์ถฉ๋ถํ ๋ซ๋ค"๋ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ถ๋ช ํ ํฉ์ํ์ง ๋ชปํ ๊ฒ์์ด ํน์ ์ต์ ์ด "๋ ๋์"์ง ์๋์ง "์ถฉ๋ถํ ๋ ๋์์ง"์ ๋๋ค.
๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ๋๋ ๊ฐ์ธ์ ์ผ๋ก ๊ทธ๊ฒ์ด ๋ณํ์ ๊ฐ์น๊ฐ ์๋ค๊ณ ์ค์ค๋ก ํ์ ํ์ง ๋ชปํ์ง๋ง ๋๋ ํ ๋ก ํ๊ณ ์ถ์ต๋๋ค.
์ฌ๊ธฐ์ ํต์ฌ์ ์ ๋ถ๋ถ์ ๋ํ ๋ช ๊ฐ์ง ๊ฐ์ ์ ๋๋ค. ๋๋ ๊ทธ๋ค์ด ์ณ์์ง ํ์คํ ์ ์ ์์์ง ๋ชจ๋ฅด๊ฒ ์ง๋ง :
1) np.isclose ()์ ๊ฐ์ฅ ํฐ ์ฌ์ฉ์ ํ ์คํธ๋ฅผ์ํ ๊ฒ์ ๋๋ค-๋น์ ์ ๋๋ต์ ๋น์ ์ด ๊ธฐ๋ํ๋ ๊ฒ์ ์ถฉ๋ถํ ๊ฐ๊น์ต๋๊น? -์ด๊ฒ์ np.assert_all_close๋ฅผ ํตํ๊ฑฐ๋ ๋ ์ง์ ์ ์ผ๋ก pytest ํ ์คํธ์์ ๋๋ ....
2) ๋๋ถ๋ถ์ ์ฌ๋๋ค์ ๋๋ต์ด ์ผ๋ง๋ ์ข์์ง ๊ฒฐ์ ํ๊ธฐ ์ํด ์๊ฒฉํ ๋ถ๋ ์์์ ์ค๋ฅ ๋ถ์๊ณผ ๊ฐ์ ์์ ์ ์ํํ์ง ์์ต๋๋ค. ์คํ๋ ค ๊ฐ์ ์๋ํ๊ณ ์คํจํ๋ฉด ๊ฒฐ๊ณผ๋ฅผ๋ณด๊ณ ๊ทธ๊ฒ์ด ์ค์ ๋ก ์ค๋ฅ์ธ์ง ๋๋ ํ ์คํธ์ ํ์ฉ ์ค์ฐจ๋ฅผ ์กฐ์ ํด์ผํ๋์ง ๊ฒฐ์ ํฉ๋๋ค.
3) ๋๋ถ๋ถ์ ์ฌ๋๋ค์ (2)์์ ๊ธฐ๋ณธ ํ์ฉ ์ค์ฐจ๋ก ํ๋ก์ธ์ค๋ฅผ ์์ํ๊ณ ํ ์คํธ๊ฐ ์คํจํ ๊ฒฝ์ฐ์๋ง ํ์ฉ ์ค์ฐจ๋ฅผ ์กฐ์ ํฉ๋๋ค.
4) ์ฌ๋๋ค์ ๋ฌธ์๋ฅผ ์ฝ์ง ์์ต๋๋ค (์ด๊ธฐ "๋ด๊ฐ ์ด๊ฒ์ ์ด๋ป๊ฒ ๋ถ๋ฅด๋๊ฐ"๋จ๊ณ๋ฅผ ๋์ด์)-์ ์ด๋ ๊ทธ๋ค์ด ํผ๋์ค๋ฌ์ด ํ๋์ ๋ฐ๊ฒฌ ํ ๋๊น์ง๋ ๋ง์ ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ทธ๋ค์ ๋ค์ด๊ฐ์ ํผ๋์ ํด์ํ๊ธฐ ์ํด ์ด๋ค ๊ฒ์ด ์ค์ ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๋ ค๊ณ ํ ๊ฒ์ ๋๋ค . ๊ทธ๋ฌ๋ (3)์ ์ฐธ์กฐํ์ญ์์ค. ํ ์คํธ๊ฐ ์คํจํ์ง ์์ผ๋ฉด ๋ฌธ์๋ฅผ๋ณด๊ณ ์ด์ ๋ฅผ ์ดํดํ์ง ๋ชปํฉ๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ด numpy๊ฐ ๋ math.isclose์ ์ ์ฌํ FP ๊ทผ์ ์ฑ ํ ์คํธ๋ฅผ ํตํด "๋ ๋์ ๊ฒ"์ด๋ผ๋ ๊ฒฐ๋ก ์ ์ด๋ฅด๊ฒํฉ๋๋ค.
์ ๋ ๋์ ๋ฌธ์๊ฐ ์ข์ ์์ด๋์ด์ง๋ง ์ถฉ๋ถํ์ง ์์์ง.
์๋ง๋ ๋ด๊ฐ ์์ ํ ํ๋ ธ์ ์๋ ์๊ณ , ๋๋ถ๋ถ์ ์ฌ๋๋ค์ ๋ฌธ์๋ฅผ์ฃผ์ ๊น๊ฒ ์ฝ๊ณ ๋๋ถ๋ถ์ ์๊ฐ ๋์ ๋ฌธ์ ์ ๋ํด rtol๊ณผ atol์ ์ ์คํ๊ฒ ์ ํํฉ๋๋ค.ํ์ง๋ง ์ ๋ ์๊ณ ์์ต๋๋ค. ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์๊ณ ์์ต๋๋ค.
: bikeshed : (์ด๋ฐ, ์๋ํ์ง ์์์ต๋๋ค. ๋ฉ์ง ์ด๋ชจํฐ์ฝ์ด ์์ต๋๋ค)
relatively_close
๋๋ rel_close
?
์ถ๊ฐ "์ฌ๋ฏธ์๋"์ฃผ๋ฆ : assert_allclose๋ ์ค์ ๋ก atol = 0์ ์ฌ์ฉํฉ๋๋ค.
๊ธฐ๋ณธ. ์ฐ๋ฆฌ๊ฐ ๊ณ ์น ์ ์๋์ง ํ ๋ก ํ๋ ๋ ๋ค๋ฅธ ์ ์ฒด ์ค๋ ๋๊ฐ ์์ต๋๋ค.
๊ทธ ๋ถ์ผ์น. (๋ด ํด๋ํฐ์์ ์ฝ๊ฒ ์ฐพ์ ์ ์์ต๋๋ค.)
2017 ๋ 12 ์ 11 ์ผ 14:58์ "Chris Barker" [email protected]์ด ์์ฑํ์ต๋๋ค.
@rgommers https://github.com/rgommers ์์ฑ :
"" "
์ด๋ฏธ ์ฌ๊ธฐ์์ ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฐ์น ํ๋จ์ ํต๊ณผํ๊ณ ์์ต๋๋ค.
์๋ก์ด ๊ธฐ๋ฅ์ด์๋ ๊ฒ๋ณด๋ค ๋ซ์ต๋๋ค. imho๊ฐ ์๋๋๋ค.
"" "
๊ธ์์, ์ ๋ ๋ง์ ์๊ฐ์ ์๊ฐํ๊ณ ํ ๋ก ํ์ต๋๋ค.
math.isclose, ๊ทธ๋ฆฌ๊ณ numpy ๊ตฌํ๋ถํฐ ์ดํด ๋ณด์์ต๋๋ค.
๋ค๋ฅธ ์ฌ๋ ์ค์์. ๊ทธ๋ ์ต๋๋ค. ์ ๋ ๊ทธ ์ ๊ทผ ๋ฐฉ์์ด ๋ ๋ซ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ ์๊ฐํ๋ค
์ด ํ ๋ก ์์ ๊ทธ๊ฒ์ ๊ฝค ๋ง์ ํฉ์์์ต๋๋ค.๊ทธ๋ฆฌ๊ณ ๋ ๋์ ์๊ณ ๋ฆฌ์ฆ / ์ธํฐํ์ด์ค๋ฅผ numpy๋ก ๊ฐ์ ธ ์ค๋ฉด ๋ ์ข์ต๋๋ค.
์๋ง๋ ๋น์ ์ ์ด์ ๊ณผ ์, ๋ ๋์ ๊ธฐ๋ฅ์ ๋ชจ๋ ๊ฐ์ง๊ณ ์์์ ์๋ฏธํฉ๋๋ค.
numpy๋ ๋จ์ํ ์ค๋๋ ๊ฒ์ ๋ ๋๋ ๊ฒ๋ณด๋ค ๋ซ์ง ์์ต๋๋ค (์๋ง๋
๋ฌธ์ํ ๋จ) ๊ธฐ๋ฅ. ๋ฌผ๋ก , ๊ทธ๊ฒ์ ์์ ํ ์ ํจํ ํฌ์ธํธ์ด์ง๋ง
๊ทธ ํ ๋ก ๊ณผ "์๊ฐ
๋ค๋ฅธ ๊ธฐ๋ฅ๊ณผ ์ฝ๊ฐ ๋ค๋ฅธ ๋์ ๋ง์๋ ์๋ก์ด ๊ธฐ๋ฅ
10 ๋ ๋์ ๊ทธ๋ ๊ฒ ์๋ ํ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ๋งค์ฐ ์ข์ง ์์ ์๊ฐ์ ๋๋ค. "
ํ ๋ก ์ ์ข ๋ฃํ๋ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค. ๋ด ์์ ์ ์๋ก์ด ๋ฐฉ๋ฒ์ด
๊ทธ๋งํ ๊ฐ์น๊ฐ์๋ ๊ฒ๋ณด๋ค "์ถฉ๋ถํ๋ค". ์ฐ๋ฆฌ๊ฐ ๋ถ๋ช ํ ๊ฐ์ง๊ณ ์์ง ์์ ๊ฒ
ํฉ์๋์ด ํน์ ์ต์ ์ด "์ถฉ๋ถํ ๋ ๋์์ง"์ ๋๋ค.
"๋ ๋์"์ง ์ฌ๋ถ.๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ๊ทธ๊ฒ์ด ๊ฐ์น๊ฐ ์๋ค๊ณ ์ค์ค๋ก ํ์ ํ์ง ๋ชปํ์ต๋๋ค.
๋ณ๊ฒฝํ์ง๋ง ํ ๋ก ํ๊ณ ์ถ์ต๋๋ค.์ฌ๊ธฐ์ ํต์ฌ์ ์ ๋ถ๋ถ์ ๋ํ ๋ช ๊ฐ์ง ๊ฐ์ ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ํ ์ ์๋์ง ๋ชจ๋ฅด๊ฒ ์ด์
๊ทธ๋ค์ด ์ฌ๋ฐ๋ฅธ์ง ํ์คํ ์์ง๋ง :1.
np.isclose ()์ ๊ฐ์ฅ ํฐ ์ฌ์ฉ์ ํ ์คํธ๋ฅผ์ํ ๊ฒ์ ๋๋ค.
๋น์ ์ด ๊ธฐ๋ํ๋ ๊ฒ์ ์ถฉ๋ถํ ๊ฐ๊น์ต๋๊น? -์ด๊ฒ์ np.assert_all_close๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋๋ค.
๋ ์ง์ ์ ์ผ๋ก, pytest ํ ์คํธ์์ ๋๋ ....
2.๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ ์๊ฒฉํ
๋ต๋ณ์ด ์ผ๋ง๋ ์ข์์ง ๊ฒฐ์ ํ๊ธฐ์ํ ๋ถ๋ ์์์ ์ค๋ฅ ๋ถ์
์์๋ฉ๋๋ค. ์คํ๋ ค ๊ฐ์ ์๋ํ๊ณ ์คํจํ๋ฉด
๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๊ณ ์ค์ ๋ก ์ค๋ฅ์ธ์ง ๋๋ ์กฐ์ ํด์ผ ํ๋์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
ํ ์คํธ์ ํ์ฉ ์ค์ฐจ.
์ด๊ฒ์ atol๊ณผ
rtol์ด ๋ณํฉ๋๊ณ ํ ์คํธ๊ฐ ๋์นญ์ธ์ง ์ฌ๋ถ.๋ง์ ์ฌ๋๋ค์ด (2)์์ ํ๋ก์ธ์ค๋ฅผ ์์ํฉ๋๋ค.
๊ธฐ๋ณธ ๊ณต์ฐจ, ํ ์คํธ๊ฐ ์คํจํ ๊ฒฝ์ฐ์๋ง ๊ณต์ฐจ๋ฅผ ์กฐ์ ํ์ญ์์ค.์ด๊ฒ์ ๊ธฐ๋ณธ atol์ด ๋งค์ฐ ์ํํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
ํต๊ณผํด์๋ ์๋๋ ๊ฑด ์ ๋ง ๋์ ์ผ์ ๋๋ค.์ฌ๋๋ค์ ๋ฌธ์๋ฅผ ์ฝ์ง ์์ต๋๋ค (์ด๊ธฐ "๋ด๊ฐ ์ด๊ฒ์ ์ด๋ป๊ฒ ๋ถ๋ฅด๋๊ฐ"๋ฅผ ๋์ด์)
๋จ๊ณ)-์ ์ด๋ ํผ๋์ค๋ฌ์ด ํ๋์ ๋ฐ๊ฒฌํ๊ธฐ ์ ๊น์ง๋
๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ค์ ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๋ ค๊ณ
ํผ๋. ๊ทธ๋ฌ๋ (3) ์ฐธ์กฐ-ํ ์คํธ๊ฐ ์คํจํ์ง ์์ผ๋ฉด ๊ทธ๋ค์
์ด์ ๋ฅผ ์ดํดํ๋ ค๋ฉด ๋ฌธ์๋ฅผ ์ดํด๋ณด์ญ์์ค.์ด ๋ชจ๋ ๊ฒ์ด ๋๋ฅผ numpy๊ฐ "๋ ์ข์"๊ฒ์ด๋ผ๋ ๊ฒฐ๋ก ์ ์ด๋ฅด๊ฒํฉ๋๋ค.
๋ ๋ง์ math.isclose-like FP ์น๋ฐ ์ฑ ํ ์คํธ.์ ๋ ๋์ ๋ฌธ์๊ฐ ์ข์ ์์ด๋์ด์ง๋ง ์ถฉ๋ถํ์ง ์์์ง.
์๋ง๋ ๋ด๊ฐ ์์ ํ ํ๋ ธ์ ์๋ ์๊ณ , ๋๋ถ๋ถ์ ์ฌ๋๋ค์ ๋ฌธ์๋ฅผ์ฃผ์ ๊น๊ฒ ์ฝ๊ณ
๋๋ถ๋ถ์ ๊ฒฝ์ฐ rtol๊ณผ atol์ ์ ์คํ๊ฒ ์ ํํ์ญ์์ค.
ํ์ง๋ง ์ ๋ ์ ํ์ 6 ๋ช ์ ์ ๊ฐ
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ์๊ฒ๋์์ต๋๋ค.: bikeshed : (์ด๋ฐ, ์๋ํ์ง ์์์ต๋๋ค. ๋ฉ์ง ์ด๋ชจํฐ์ฝ์ด ์์ต๋๋ค)
์๋ง๋ relative_close ๋๋ rel_close?
โ
๋น์ ์ด ์ธ๊ธ ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/numpy/numpy/issues/10161#issuecomment-350886540 ๋๋ ์์๊ฑฐ
์ค
https://github.com/notifications/unsubscribe-auth/AAlOaNquy47fsOkvBlxcSa-Mxyhgdimlks5s_bORgaJpZM4Q2J-P
.
3183 ํธ ๋ง์ ์ด์ธ์?
assert_allclose๋ ์ค์ ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก atol = 0์ ์ฌ์ฉํฉ๋๋ค.
ํฅ๋ฏธ ๋กญ์ต๋๋ค. ๊ธฐ๋ถ์ด ์ข์์ง๋๋ค.
์ด๊ฒ์ ๋ ์ฌ์ด์ ์ฐจ์ด์ ์ ๋ํ ๊ณผ๊ฑฐ ํ ๋ก ์ ํ๋ฆฟํ ๊ธฐ์ต์ ๋ ์ด๋ฆฌ๊ณ ์์ต๋๋ค.
์๋
ํ์ธ์,
๋ด thermo, fluids ๋ฐ ht ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ numpy์ assert_allclose๋ฅผ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉํ๋ฏ๋ก ๊ด๋ จ๋ ๋ช ๊ฐ์ง ์๊ฐ์ ์ฌ๊ธฐ์์ ๊ณต์ ํ๊ณ ์์ต๋๋ค. ์ด ์ค๋ ๋๋ ๋์ ์ฐจ์ด๋ฅผ ๋งค์ฐ ๋๋ผ์ด ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒํ๋ฉฐ, ๋์นญ ๋ถ์กฑ ๋ฐ / ๋๋ atol๊ณผ rtol ๋ฐ ๊ธฐ๋ณธ atol (assert_allclose์๋ ์์ , ์์). ๊ทธ๋์ ๋ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ๊ทธ๊ฐ ์๋์ง ํ์ธํ๊ณ assert_allclose์ ๋งค์ฐ ์กฐ์กํ ๊ตฌํ์ ํดํน ํ ๋ค์ ํ
์คํธ๋ฅผ ์์๋ก ์ฌ์ฉํ๋๋ก ๋ณ๊ฒฝํ์ต๋๋ค.
assert_allclose์ ์ฌ์ฉ์ด ๋ํ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ฐ๋ณ์ ์ผ๋ก ์ ํํ ๊ฐ์ ๋น๊ตํ๊ณ ํจ์ ๊ฒฐ๊ณผ์ ๋ํด assert_allclose๋ฅผ ๋งค๊ฐ ๋ณ์๋ก ํธ์ถํ๋ ํ ์คํธ๋ฅผ ์ํํฉ๋๋ค. ๋๋ ๋ชจ๋ ์ข ๋ฅ์ ํฌ๊ธฐ์ int์ float๋ฅผ ๋น๊ตํฉ๋๋ค. ๋๋ rtol ๋๋ atol์ ์ ํํ๋ ๋ฐ ์๋์ ์ผ๋ก ๊ฑฐ์ ๊ณ ๋ คํ์ง ์์์ผ๋ฉฐ, atol์ ์ถ๊ฐํ๊ฑฐ๋ rtol์ ๋ ์๊ฒฉํ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ assert_allclose๋ฅผ ๊ฐ๊ฐ 13159, 1178 ๋ฐ 4243 ๋ฒ ํธ์ถํฉ๋๋ค.
๊ทธ๋์ ๋ณ๊ฒฝ์ํ๊ณ ํ ์คํธ ํ ์คํธ๋ฅผ ์คํํ์ต๋๋ค. ์๋ก์ด ๋ฒ๊ทธ ๋ ํ ์คํธ ์คํจ๋ฅผ ์ฐพ์ง ๋ชปํ๋ค๊ณ ๋งํ๊ฒ๋์ด ๋งค์ฐ ๊ธฐ์ฉ๋๋ค. ๋ด๊ฐ ์ฐพ์ ์์๋ ์ ์ผํ ํ ์คํธ ์คํจ๋ assert_allclose์ ๊ตฌํ์ด์์ต๋๋ค.
์ด์ด ์ข์ง ์์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์๋ค๋ ๊ฒ์ ์๊ณ ์์ผ๋ฉฐ assert_allclose ๋๋ isclose์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ค๋ฅธ ํจ์๋ฅผ ํตํด์๋ symmetric
ํ๋๊ทธ๋ฅผ ํตํด์๋ math.allclose์ ๋์์ ๋ณต์ ํ assert_allclose ๋ชจ๋๊ฐ ์๋ค๋ฉด ๊ฐ์ธ์ ์ผ๋ก ํ
์คํธ๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๋ ํธํ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๊ทธ๊ฒ์ด ๋๊ตฐ๊ฐ์๊ฒ ํ ์ผ์ด ๋ง๊ณ ์์ง PR๋ ์์ ์์ ์๊ณ ์์ต๋๋ค. ๋น๋ก ํ ๋ฒ์ด๋ผ๋์ด ๊ฒฐํจ์ ๋ํด ๋ด ์ฝ๋๋ฅผ ํ์ธํ ์์์ด ๊ธฐ์ฉ๋๋ค!
2017 ๋
12 ์ 11 ์ผ ์คํ 5:01, Nathaniel J. Smith [email protected]
์ผ๋ค :
์.
๊ฐ์ฌํฉ๋๋ค. statsmodel ์์ ๊ฐ
๊ธฐ๋ณธ๊ฐ atol โ 0.0 ์ด์ธ์ ๊ฒ์ ์ํํฉ๋๋ค.
์ด๊ฒ์ด 2 ๋
๋ง๋ค ๋ฐ์ํ๋ค๋ ์ฌ์ค์ ์ฐ๋ฆฌ๊ฐ
๋ง์นจ๋ด ๊ทธ๊ฒ์ ๋ํด ๋ญ๊ฐ๋ฅผํฉ๋๊น?
์๋ง๋ ๊ทธ๋ ์ต๋๋ค. ์์ ์ฌ๋ง๊ท์ด์ง๋ง ๋๋ก๋ ๊ทธ ์์ ์ฑ๊ฐ์ฌ์ผ๋ก ์ธํด
์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ.
๊ทธ๋ฆฌ๊ณ assert_allclose์ atol ๊ธฐ๋ณธ๊ฐ์ด 0์ด๋ผ๋ ๊ฒ์ ๋ง์กฑํฉ๋๋ค.
(๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ํ์ฉ ๊ฐ๋ฅํ ์ต์
์ด๋ผ๋ ์ ์ ๋ท๋ฐ์นจํฉ๋๋ค.
์ด๊ฒ์ด ์ต์ ์ ์ ํ์ด๋ผ๋ ๋ฐ ๋์) ์ฐ๋ฆฌ ์ค ๋ง์ ์ฌ๋๋ค์ด
unittest๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ํ
์คํธ์์ ์ง์ np.all_close๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ๋ Ralf, ์ฐ๋ฆฌ๊ฐ ๋ณํ๋ฅผํ๋ค๋ฉด, ์ฐ๋ฆฌ๋ ์ธ ๊ฐ์ง ๋ชจ๋๋ฅผ ๋ฐ๊พธ๊ณ ์ถ์ ๊ฒ์
๋๋ค.
๋ฐ์ ํ๊ฒ ๊ด๋ จ๋ ํจ์ :-(. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ๊ทธ๊ฒ๋ค์ ๋ง๋ค ์์๋ ๊ธฐํ๋ฅผ์ค๋๋ค.
๋ ์ผ๊ด๋ ๋ณด๋์ค?
py2-3 ์ ํ์ด ์ ์งํ๋์ง๋ ์์์ง๋งํด์ผ ํ ์ผ์ด ์์ต๋๋ค.
์ด๋ค ์์ ์์ "์ฌ๋ง๊ท๋ฅผ ์ ๋ฆฌํ๋ ๊ฒ์ ๊ด์ฐฎ์ต๋๋ค"๋ฒ์ ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ๋งํ๋ค :-)
์ค์ ๋ก is_close
๋ฅผ atol=0
์ ์ํ ๋ฒ์ ์ผ๋ก ์ฎ๊ธฐ๋ ๋ค๋ฅธ ์ต์
์ด ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ None
๋ก ๋ณ๊ฒฝํ๊ณ atol=0
์๋ํฉ๋๋ค ; True
๋ชจ๋ ๋ฐํํ๋ฉด; ์ผ๋ถ False
์ด๋ฉด ํ์ค atol
๋ค์ ์๋ํ๊ณ ๊ฒฐ๊ณผ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์ง์ ์ค๋จ ๊ฒฝ๊ณ ๊ฐ ๋ฐ์ํ๊ณ "์ด์ "๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋ฉ๋๋ค.
์ฌํ๊ฒ๋ ๋์นญ๊ณผ atol์ ๋์์ ์ํ ํ ์๋ ์์ต๋๋ค. ์๋ํ๋ฉด ์๋ก ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๊ธฐ ๋๋ฌธ์
๋๋ค (์ฆ, ํญ์ ๋ ๊ฒฝ์ฐ๋ฅผ ๋ชจ๋ ์คํํด์ผํ๋๋ฐ, ์ฝ๊ฐ ๋ง์ด ๋ณด์). ๊ทธ๋ฌ๋ ๋๋ ๋์นญ์ด ๋ถ์กฑํ ๊ฒ๋ณด๋ค atol
๊ธฐ๋ณธ๊ฐ์ ํจ์ฌ ๋ ์ซ์ดํฉ๋๋ค.
๋๋ ์ด๋ค ๊ธฐ๋ฅ๋ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์ ํธํ์ง ์๋๋ค.
์ด์ ๋์์ ์ฌ์ฉํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ
๋ณ๊ฒฝ์ด ์๋ฃ๋๋ฉด ์๋ ๋ฆฌํฉํ ๋ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ์๋๋๋ค
์ง๊ธ์ ํ์ ์์๋.
py3k ์ ํ์ ์ฐ๋ฆฌ๊ฐ ๋ค์ํ๊ณ ์ถ์ ๊ฒ์ด ์๋๋๋ค.
์ญํ ๋ชจ๋ธ์ด ์๋๋๋ค. ์ ๋ฆฌ๋ฅผ ํ๋์ ํฐ ๋ฆด๋ฆฌ์ค๋ก ๋กค๋งํ๋ ๊ฒ์ ์ข์ง ์์ต๋๋ค.
IMO์ ์ ๊ทผํ์ญ์์ค.
py2-3 ์ ํ์ด ์ ์งํ๋์ง๋ ์์์ง๋ง "์ฌ๋ง๊ท๋ฅผ ์ ๊ฑฐํด๋ ๊ด์ฐฎ์ต๋๋ค"๋ฒ์ ์ด ์ธ์ ๊ฐ๋ ์๋ค๊ณ ํ ์ ์์ต๋๋ค. :-)
๊ทธ๋ฅ ํน๋ณํ ๋ฒ์ ๋ฒํธ ์ฃผ์ ๋ณ๊ฒฝ ํ์ธ์ ํ ์์๋์ด ์ผ๋ฐ์ ์ธ ์๊ฐ์ ํด๊ฒฐํ๊ธฐ : ์ผ๋ฐ์ ์ธ ๊ท์น์ด์ด ๊ณ ํต์ ๋ฐ์ ๋ค์ผ ์์๋ ์์ค์ ๋ฐฉ์ง ๋ช ํํ ์ ํ ๊ณํ์ด๊ณ ์ฅ์ ์ด๋ฅผ ์ ๋นํํ๊ธฐ์ ์ถฉ๋ถํ ๊ฒฝ์ฐ, ์ฌ๋ง๊ท์ ์ ๋ฆฌ ๊ด์ฐฎ์ด๋ค ์์ก ๋น์ฉ. ์ฌ๊ธฐ์ ํต์ฌ์ ์ฐ๋ฆฌ๊ฐ "๊ท์น์ ๋ฐ๋๋์ง"๊ฐ ์๋๋ผ ์ฌ์ฉ์์๊ฒ ๋ฏธ์น๋ ์ํฅ์ ๋ฐ๋ผ ํ๋จํด์ผํ๋ค๋ ๊ฒ์ ๋๋ค. (๋น์ ์ด ํ๋ ค ํด์ง๊ธฐ๋ฅผ ์ํ๋ค๋ฉด, ์ฐ๋ฆฌ๋ deontologists๊ฐ ์๋๋ผ ๊ฒฐ๊ณผ ์ฃผ์์ ์ ๋๋ค.) ๋ฐ๋ผ์ ํน์ ๋ฒ์ ์ "์ด๊ฒ์ ๋ฌผ๊ฑด์ ๊นจ๋จ๋ฆฌ๋ ๊ฒ"์ด๋ผ๊ณ ์ ์ธํ๋ ์ ์ผํ ์ด์ ๋ ์ฌ์ฉ์๊ฐ ์ผ์ ํจ์ฌ ๋ ์ฝ๊ฒ ์ฒ๋ฆฌ ํ ์ โโ์๋๋ก ๋ง๋๋ ๊ฒ์ ๋๋ค. IMO๋ ๋ณ๊ฒฝ ์ฌํญ์ ํจ๊ป ๋กค์ ํ์ฌ ์ป์ ์์๋ ์ด์ ์ ์ผ๋ฐ์ ์ผ๋ก ์ ํ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ (๊นจ์ง ์ฝ๋๋ ์์๋ ์ฝ๋์ ๋๋ค.) ์กด์ฌํ๋๋ผ๋ ๋น์ฉ / ํธ์ต ๋ถ์์ "์๋์ค"์์ "๋ก ํ์์ฃผ๋ ๊ฒฝ์ฐ๋ ๋งค์ฐ ๋๋ญ ๋๋ค. ์".
atol์ 0์ด ์๋๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ๋๋ค. ์ค์ ๋ก ์ด๊ฒ์ด ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค (ํนํ ํ์ฌ ๋ ๋ค ์ถ๊ฐํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฝ์ฐ). ์๋๋ ํ ์คํธ ํต๊ณผ๋ก ์ฝ๊ฒ ์ด์ด์ง ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. lazy-๊ธฐ๋ณธ ํ์ฉ ์ค์ฐจ๋ก ํ ์คํธ๋ฅผ ์์ฑํฉ๋๋ค. ํต๊ณผํ๋ฉด ์๋ฃ๋์๋ค๊ณ ์๊ฐํฉ๋๋ค. (๋ด๊ฐ ๊ทธ๊ฒ์ด ์๋ํ๋ ๋ฐฉ๋ฒ์ด๋ผ๋ ๊ฒ์ ๊นจ๋ฌ์์ ๋, ๋๋ y ์ฝ๋๋ก ๋์๊ฐ์ ๊ทธ ์ค ๋ช ๊ฐ๋ฅผ ์ฐพ์์ต๋๋ค-์์ค!
statsmodel ์์ ๋ atol์ ๊ธฐ๋ณธ๊ฐ์ ๋ํด ์ ์ค๋ช ํฉ๋๋ค. 0.0์ด ์๋ ๊ฒ์ ์ํํฉ๋๋ค. [...] ์ฐ๋ฆฌ ์ค ๋ง์ ์ฌ๋๋ค๊ณผ ๋ ๋ง์ ์ฌ๋๋ค์ด unittest๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ํ ์คํธ์์ ์ง์ np.all_close๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
"๋ค๋ฅธ ํจํค์ง์์ ์ผ๊ด์ฑ์ ๋์ด๊ธฐ ์ํด ์ฌ์ฉ์ ์ฝ๋๋ฅผ ๊นจ์ผํฉ๋๋ค."๋ ๋น์ฉ / ์ด์ต ์ฒ๋์์ ๊ทธ๋ค์ง ์ข์ ์ ์๋ฅผ๋ฐ์ง ๋ชปํฉ๋๋ค. "Numpy ๋ด๋ถ์๋ ํผ๋ ์ค๋ฌ์ธ๋ฟ๋ง ์๋๋ผ ์ฌ์ฉ์ ์ฝ๋์์ ์กฐ์ฉํ ๋ฒ๊ทธ๋ก ์ง์ ์ฐ๊ฒฐ๋๋ ๋ฐฉ์์ผ๋ก ํผ๋์ค๋ฌ์ด ๋ถ์ผ์น๊ฐ ์์ผ๋ฉฐ,์ด๋ฅผ ์์ ํ ์ ์์ต๋๋ค."๊ฐ ํจ์ฌ ๋ ๋งค๋ ฅ์ ์ ๋๋ค. ๋๋ ์์ง ์ค์ค๋ก ์๊ฒฌ์ ์ ํ์ง ์์์ง๋ง ์ฌ๊ธฐ์ ์ง์ ์ ์ป๊ณ ์ถ๋ค๋ฉด ์ด๊ฒ์ด ๋ด๊ฐ ์ถ์งํ ๊ฒ์ ๋๋ค.
๊ณต์ฑ :
โโโ๋๋ rtol ๋๋ atol์ ์ ํํ๋ ๋ฐ ์๋์ ์ผ๋ก ๊ฑฐ์ ๊ณ ๋ คํ์ง ์์์ต๋๋ค.
์ํจ์ ๊ฑฐ์ ์ถ๊ฐํ์ง ์์
-ํ์กฐ๊ฐ-
$๋ assert_allclose๋ฅผ ๊ฐ๊ฐ 13159, 1178, 4243 ๋ฒ ํธ์ถํฉ๋๋ค.
-ํ์กฐ๊ฐ-
์๋ก์ด ๋ฒ๊ทธ ๋ ํ ์คํธ ์คํจ๋ฅผ ์ฐพ์ง ๋ชปํ์ต๋๋ค .
"" "
์ข์ ์์์ด์ง๋ง assert_allclose์ atol ๊ธฐ๋ณธ๊ฐ์ 0์
๋๋ค. ๊ณผ
์ด๋ ์ด์ :-)
@njsmith ๋ ๋ค์
"๋ค๋ฅธ ํจํค์ง์์ ์ผ๊ด์ฑ์ ๋์ด๊ธฐ ์ํด ์ฌ์ฉ์ ์ฝ๋๋ฅผ ๊นจ์ผํฉ๋๋ค."
๋๋์ด ์ค๋ ๋์ ๋๊ตฌ๋ ๊ทธ๊ฒ์ ์นํธํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. โ ๋๋ ํ์คํ์ง ์์ต๋๋ค. ๋๊ตฌ๋ ์นํธํ๋ ์ ์ผํ ์ผ๊ด์ฑ์ ๊ด๋ จ๋ numpy ํจ์ ๊ฐ์ ์ผ๊ด์ฑ์ ๋๋ค.
"Numpy ๋ด๋ถ์๋ ํผ๋ ์ค๋ฌ์ธ๋ฟ๋ง ์๋๋ผ ์ฌ์ฉ์ ์ฝ๋์์ ์กฐ์ฉํ ๋ฒ๊ทธ๋ก ์ง์ ์ด์ด์ง๋ ๋ฐฉ์์ผ๋ก ํผ๋์ค๋ฌ์ด ๋ถ์ผ์น๊ฐ ์์ผ๋ฉฐ,์ด๋ฅผ ์์ ํ ์ ์์ต๋๋ค."
๊ทธ๊ฒ์ด ๋ด๊ฐ ์ ์ด๋ ์นํธํ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ ๋๋ถ๋ถ์ ๋ค๋ฅธ ์ฌ๋๋ค์ ์๊ฐํฉ๋๋ค.
๋ฌธ์ ๋ ๋ค์ ์ค ํ๋์์ด ํด๊ฒฐํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๊นจ๋จ๋ฆฌ๋ ๊ฒ์ ๋๋ค. ์ด๋ ์ง์ ์ค๋จ์ฃผ๊ธฐ์๋ ๋ถ๊ตฌํ๊ณ ์ด๊ฒ์ด ์ถฉ๋ถํ ์ฌ๊ฐํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
๋๋
์ ํ๋๊ทธ ๋๋ ํจ์ ๋ง๋ค๊ธฐ.
์๋ก์ด ๊ธฐ๋ฅ์ด ๋ ๊นจ๋ํ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด์ ์ฝ๋๋ ์ํ๋๋งํผ ๋ณ๊ฒฝ๋์ง ์๊ณ ์ ์ฝ๋๊ฐ ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๊ฒ์ ๋ฐ ๋ฐ๊พธ๊ธฐ (๋๋ ํธ์ถ๋ก ๋ช ๋ฒ ๊ฐ์ ธ ์ค๊ธฐ)๋ฅผ ํตํด ํ ๋ฒ์ ํ๋์ ํ์ผ์ ์ฝ๊ฒ ์ ํ ํ ์ ์์ต๋๋ค.
(๋๋ ๋น์ ์ด ํ ์คํธ ์ฝ๋์์ ์์ญ์ด ํจ์น numpy์กฐ์ฐจ ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค ....)
์ฐ๋ฆฌ๋ ์ด๋ฏธ ๊ฐ์ง๊ณ ์์ต๋๋ค :
allclose
assert_allclose
assert_almost_equal
assert_approx_equal
assert_array_almost_equal
assert_array_almost_equal_nulp
assert_array_max_ulp
์ด ๋ชฉ๋ก์ ๋ ๋ง์ ์ต์ ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ค์ ๋ก ์ค์ ์ฌ์ฉ์์๊ฒ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ค ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
๊ธ์, ๋๋ math.isclose์ ๋ํด ์๊ฐํ๊ณ ํ ๋ก ํ๋ ๋ฐ ๋ง์ ์๊ฐ์ ๋ณด๋๊ณ , ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ๊ฒ๋ค ์ค์์ numpy ๊ตฌํ์ ์ดํด ๋ณด๋ ๊ฒ์ผ๋ก ์์ํ์ต๋๋ค. ๊ทธ๋ ์ต๋๋ค. ์ ๋ ๊ทธ ์ ๊ทผ ๋ฐฉ์์ด ๋ ๋ซ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ ๋ ๊ทธ๋ฌ๊ณ ์ ๋ numpy.testing
์ ๋ฉ์ธ ๋ฉ์ธํ
์ด๋ ์ค ํ๋์์ต๋๋ค. ์ด๊ฒ์ ๊ฑฐ์ ์๋ก์ด ๋ฌธ์ ๊ฐ ์๋๋๋ค. ๋๋ฌธ์๋ก ๋น์ ์ด ์ณ๋ค๊ณ ์ฃผ์ฅํ๋ ๊ฒ์ ๊ทธ๋ ๊ฒ๋์ง ์์ต๋๋ค.
์๋ง๋ numpy์์ ์ด์ ๊ธฐ๋ฅ๊ณผ ์ ๊ธฐ๋ฅ์ ๋ชจ๋ ๊ฐ๋ ๊ฒ์ด ๋จ์ํ ์ด์ (์๋ง ๋ ์ ๋ฌธ์ํ ๋) ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ๋๋ ๊ฒ๋ณด๋ค ๋ซ์ง ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๋ฌผ๋ก , ๊ทธ๊ฒ์ ์์ ํ ํ๋นํ ์์ ์ด์ง๋ง ์ ๋ ๊ทธ ๋ ผ์๋ฅผํ์ง ์์ผ๋ ค ๊ณ ๋ ธ๋ ฅํ์ต๋๋ค.
์ฌ์ค, ๊ทธ๊ฒ์ด ๋ด๊ฐ ์๋ฏธํ๋ ๋ฐ๊ฐ ๋ถ๋ช ํด์ผํฉ๋๋ค.
"10 ๋ ๋์ ๊ทธ๋ ๊ฒ ์๋ํด์จ ๋ค๋ฅธ ๊ธฐ๋ฅ๊ณผ ์ฝ๊ฐ ๋ค๋ฅธ ๋์์ ๊ฐ์ง ์๋ก์ด ๊ธฐ๋ฅ์ ๋์ ํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ๋งค์ฐ ์ข์ง ์์ ์๊ฐ์ ๋๋ค."
์๋์, ๋๋ฌด ์์ฃผ ๋ฌด์๋๊ฑฐ๋ ์ถฉ๋ถํ ๊ฐ์ค์น๊ฐ ๋ถ์ฌ๋์ง ์์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๋ฐ์์ด ์ค์ ๋ฌธ์ ๋ฅผ ์ง์ ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ์๋ ๋ง์ ํต์ฌ ๊ฐ๋ฐ์๋ค์๊ฒ ๋ถ๋ช ํด ๋ณด์ ๋๋ค.์ด ๋ฐฐ๊ฐ @njsmith , @pv , @charris ๋ฐ ์ ์๊ฒ์ ํญํดํ๋ค๋ ํ๋จ์ ๋ด๋ฆฌ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ ์ด๊ฒ์ ๋ค์ ํด์ฑํ๋ ๊ฒ์ ๋ํด ๋ฏธ๋ฆฌ ์ฌ๊ณผํ์ง๋ง assert_allclose
์ ์ฌ๋ฐ๋ฅธ ํ๋์
๋๋ค (๋๋ ์ ์ด๋ ๊ทธ๊ฒ์ ๊ฐ๊น์ต๋๋ค). ๊ทธ๋ฌ๋ isclose
๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ง์ ํ ๊ฒ์ฒ๋ผ ์ ๋์ ์ธ ๊ด์ฉ์ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ฌ๋๋ค์ ๋ฌธ์ ์ ๋น ๋จ๋ฆด ์ ์์ต๋๋ค. ์ด ํ๋์ ๋ํด ์ฌ๋๋ค์๊ฒ ๊ฒฝ๊ณ ํ๊ธฐ ์ํด np.isclose
๋ฌธ์ ํ์ด์ง์ ํฐ ๋นจ๊ฐ์ ์์๋ฅผ ๋ฃ๋ PR ์ ์ถ์ ๊ณ ๋ ค ์ค์
๋๋ค. ์ด๋ป๊ฒ ๋ค๋ฆฌ๋์?
๋ค์ ํด์ฑ ํ ๊ฒ์ ๋ํด ๋ฏธ๋ฆฌ ์ฌ๊ณผ ๋๋ฆฌ์ง๋ง assert_allclose ๋
์ฌ๋ฐ๋ฅธ ํ๋ (๋๋ ์ ์ด๋ ๊ทธ๊ฒ์ ๊ฐ๊น๊ฒ). ๊ทธ๋ฌ๋ isclose๋
๋ค๋ฅธ ์ฌ๋๋ค์ฒ๋ผ ์ ๋์ ์ธ ๊ด์ฉ์ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์
์ ๋ช
ํ. ํฐ ๋นจ๊ฐ ์์๋ฅผ ์ฌ๋ ค ๋๊ธฐ ์ํด PR ์ ์ถ์ ๊ณ ๋ คํ๊ณ ์์ต๋๋ค.
์ด ๋์์ ๋ํด ์ฌ๋๋ค์๊ฒ ๊ฒฝ๊ณ ํ๋ np.isclose ๋ฌธ์ ํ์ด์ง. ์ด๋ป๊ฒ
๊ทธ ์๋ฆฌ?
+1
๋๋ ๋ฌธ์๊ฐ ๋ ๋์์ผํ๋ค๋ ํฉ์๊ฐ์๋ค.
๊ฐ์ฌ,
-CHB
โ
๋น์ ์ด ์ธ๊ธ ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/numpy/numpy/issues/10161#issuecomment-351182296 ๋๋ ์์๊ฑฐ
์ค
https://github.com/notifications/unsubscribe-auth/AA38YDw4sdhRWYmeeyr4met1RCwWsjMQks5s_uBmgaJpZM4Q2J-P
.
๋ฌธ์ ๊ฐ์ ์์ง์งํ์ง๋ง ์ ์ ๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๋์์ด๋์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
.. ๊ฒฝ๊ณ :: ๊ธฐ๋ณธ
atol
์
1๋ณด๋ค ํจ์ฌ ์ ์ต๋๋ค.
์ฒซ์งธ,์ด ๊ฒฝ๊ณ ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ค์ด ์๋๋๋ค. 1e-8
๋ณด๋ค ์์ ์ซ์๋ฅผ 0์ผ๋ก ์ฒ๋ฆฌํ๋ ค๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ atol
_is_๊ฐ ์ ํฉํฉ๋๋ค. ์ด๊ฒ์ ์๋ ๊ณต์ฐจ๋ก๋ ๋ถ๊ฐ๋ฅํ๋ฏ๋ก ์ ๋ ๊ณต์ฐจ๊ฐ ์กด์ฌํฉ๋๋ค. ๋ฐ๋๋ก, 1e-8
๋ณด๋ค ์์ ์ซ์๋ฅผ ์๋ฏธ์๋ ๊ฒ์ผ๋ก ์ทจ๊ธํ๋ ค๋ ๊ฒฝ์ฐ ๊ธฐ๋ณธ atol
_๋ ์ ์ ํ์ง ์์ต๋๋ค _. ํ๋์ ํฌ๊ธฐ๊ฐ ๋ชจ๋ ๊ฒ์ ์ ํฉํ๋ค๊ณ ๊ฐ์ ํ์ง ๋ง์ญ์์ค.
๋ฐ๋ผ์ @xoviat ๋ ๊ฐ์ฅ ๊น์ ์กด๊ฒฝ์ฌ์ ๊ฐ์ง๊ณ ๊ทํ์ ์ฃผ๊ด์ ์ธ ์ง์ ์ ๊ฐ๋ ฅํ ๋ฐ๋ํฉ๋๋ค.
...
assert_allclose
_is_ ์ฌ๋ฐ๋ฅธ ๋์์ ๋๋ค (๋๋ ์ ์ด๋ ์ด์ ๊ฐ๊น์ต๋๋ค).
ํ์ฌ ๋ฌธ์์ ๋ฌธ์ ์ ์ _what_ atol
์ (๋ฅผ) ์ค๋ช
ํ๋ ๊ฒ์ ๋งค์ฐ ํ๋ฅญํ์ง๋ง _why_๋ ์ค๋ช
ํ์ง ์์์ ์ฌ์ฉ์๊ฐ ๊ธฐ๋ณธ๊ฐ์ ๋ณ๊ฒฝํด์ผํ๋์๊ธฐ๋ฅผ ์ดํดํ์ง ๋ชปํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. .
๋๋ ๋ค์๊ณผ ๊ฐ์ ๋ด์ฉ์ ์ ์ํฉ๋๋ค.
" atol
์ 0์ด ์๋ ์์ ๊ฐ์ ์ค์ ํ๋ฉด 0์ ๋งค์ฐ ๊ฐ๊น์ด ์ซ์๋ฅผ ์ฌ์ค์ 0๊ณผ ๋์ผํ๊ฒ ์ฒ๋ฆฌ ํ ์ โโ์์ต๋๋ค. ๋ฐ๋ผ์ atol
์ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ๊ธฐ์ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค. ๊ฒฝ์ฐ. ์ ํ atol
๋ณด๋ค ํฐ ์ ์๋๋ก atol
์๋ฏธ์๋ (์ ๋ก ๊ตฌ๋ณ)๋ก ๊ณ ๋ คํ๊ณ ,๋ณด๋ค ์์ ์ซ์ atol
๋น์ ์ด ๋ฌด์ํ ์๋ก ๊ฐ์ฃผ๋ฉ๋๋ค (0๊ณผ ๋์ผ). "
๋ง์ง๋ง์ผ๋ก isclose
๋ฐ allclose
์ ๋
์คํธ๋ง์ ๋์ผํ ๋ฉ๋ชจ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ด๊ฒ์ ์ ์ ์์
๋๋ค. ๋ฐ๋๊ฐ ๋ง๋๊ฐ.
๊ฑด๋ฐฐ.
PR์ ๋ํ ๋ฆฌ๋ทฐ ํผ๋๋ฐฑ์ ๋จ๊ฒจ์ฃผ์ธ์. ํนํ ๊ทํ์ ์ ์์ ๋๋ฌด ์ฅํฉํ IMO์ ๋๋ค.
๋ด๊ฐ ๋๋ฌด ์ง์ฆ ๋๋ฉด ๋ฏธ์ํฉ๋๋ค. ์์ง ํฉ์๊ฐ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค.
@xoviat : ๋ฌธ์ ์์ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ด๊ฒ์ด ๋ค์ ๋์ฌ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ๋๋ ๊ฑฐ์ ํ๋๋ก ์ค๊ณ๋ NEP์ ๋ฏธ๋ ๋ฒ์ ์ผ๋ก์ด ํ ๋ก ์ ๋๋ด๋ ค๊ณ ํฉ๋๋ค .- ์ ์๊ณผ ๊ฑฐ์ ์ด์ ๋ฅผ ์์ฝํฉ๋๋ค. ๊ธฐ๋ก์ ์ํด-์ด์ ๋ฌธ์ ๊ฐ ์ฝ๊ฐ ์ฌ๋ผ์ก๊ธฐ ๋๋ฌธ์.
py2 / 3 ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ์ฌ ์ฃ์กํฉ๋๋ค-numpy์์ ์ฌ๋ง๊ท๋ฅผ ์ ๋ฆฌํ ์ง ์ฌ๋ถ๋ ๋ค๋ฅธ ์ฅ์์ ์๊ฐ์ ๋ํ ํ ๋ก ์ ๋๋ค.
isclose()
์ด ๋ฌธ์ (๋ฐ ๊ธฐํ ์ฐธ์กฐ)๋ numpy.isclose()
๋ฐ ์น๊ตฌ๋ค์ด ์ต์ ์ด ์๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๊ณ atol์ ๋ํด ๋
ผ์์ ์ฌ์ง๊ฐ์๋ ๊ธฐ๋ณธ๊ฐ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๋ค์ํ ๊ด๋ จ ํจ์์ ๊ธฐ๋ณธ๊ฐ์ด ์๋ก ๋ค๋ฅด๋ค๋ ๊ด์ฐฐ ๊ฒฐ๊ณผ์
๋๋ค. ์ด๋ก ์ธํด ์ ์ฒด์ ์ผ๋ก ์ฌ์ฉ์์๊ฒ ํผ๋์ด ์๊ธฐ๊ณ ์ต์
์ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ atol
๊ฐ ์ค์ ์ ๋ํด ์๊ฐํ์ง ์๋ ๊ฒฝ์ฐ ์ค ํ์ง ํ
์คํธ๊ฐ ๋ฐ์ํฉ๋๋ค.
ํนํ stdlib : math.isclose()
์ ๊ตฌํ์ ๋ ๋์ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ธฐ๋ณธ๊ฐ์ ์ ๊ณตํฉ๋๋ค. ๋์นญ ํ
์คํธ์ด๊ณ rtol๊ณผ atol์ ํผํฉํ์ง ์์ผ๋ฉฐ ๊ธฐ๋ณธ atol์ 0.0์
๋๋ค.
์ํฉ์ด ์ด์์ ์ด์ง ์๋ค๋ ๋ฐ๋ ๊ฑฐ์ ํฉ์๊ฐ ์ด๋ฃจ์ด์ก์ง๋ง ์ด์ ๋ํด ๋ฌด์์ด๋ ํ ๋งํผ ๋์๋ค๋ ํฉ์๋ ์์ต๋๋ค.
์ง์ ์ค๋จ ๊ธฐ๊ฐ๊ณผ ๊ฒฝ๊ณ ๊ฐ ์๋๋ผ๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ ๋ฌธ์ ๋ก ์ธํด ์ผ๋ฐ์ ์ผ๋ก ๊ฑฐ๋ถ๋์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ํ ์คํธ์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ฏ๋ก ์ต์ํ ํฐ ์ฑ๊ฐ ์๊ฒ๋ฉ๋๋ค.
์ด๊ฒ์ ๊ธฐ์กด ์ฝ๋๋ฅผ ๊นจ๋จ๋ฆฌ์ง ์์ง๋ง ์ถ์ ํ๊ณ ํผ๋์ค๋ฌ์ด API๋ก ์์ํ ์ง์๋ฉ๋๋ค.
TLDR : ๊ฐ๋ฅํ์ง๋ง ์ฝ๊ฑฐ๋ ๊นจ๋ํ์ง๋ ์์ต๋๋ค. ์๋ฌด๋ ์ด๊ฒ์ ์ถ๊ตฌํ๊ณ ์ถ์ง ์์ ๊ฒ ๊ฐ์์ต๋๋ค.
์ด ์ต์ ์ ๊ด์ฌ์ ๋ ์์๋ ์ ์ผํ ์ต์ ์ผ๋ก ๋ณด์์ง๋ง ํ ๋ก ์ ์ฐธ์ฌํ ํต์ฌ ๊ฐ๋ฐ์๋ ์ง์ํ์ง ์์์ต๋๋ค.
์ด๊ฒ์ "์์ "ํ๋ ๊ฐ์ฅ ๊นจ๋ํ ๋ฐฉ๋ฒ์ math.isclose
์์ ์ฌ์ฉ ๋ ๊ฒ๊ณผ ๊ฐ์ ์๋ก์ด ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก np.rel_close()
[๋๋ ๋ค๋ฅธ ์ด๋ฆ]์ ์ถ๊ฐํ๋ ๊ฒ์
๋๋ค. ์๋ก์ด ๊ธฐ๋ฅ์ ํฅํ ์ฝ๋์ ์ฌ์ฉํ "๊ถ์ฅ"๊ธฐ๋ฅ์ผ๋ก ๋ฌธ์ํ๋ฉ๋๋ค. ํฅํ ์ด์ ๋ฒ์ ์ ์ง์ ์ค๋จ ๊ฒฝ๊ณ ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ๊ฐ๋ฅํ ๊ฒ์
๋๋ค.ํ์ง๋ง์ด ์์ ์์ ๊ทธ๋งํ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํ๋ ์ฌ๋์ ์๋ฌด๋ ์์์ต๋๋ค.
๋ฆฌํฉํ ๋ง ๋๊ตฌ๋ฅผ ๊ตฌ์ถํ์ฌ ๋์ฒด ํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด๋ฒ ํ ๋ฒ์ ๋๊ฐ ๊ทธ๋ ๊ฒํ ๊น์?
์ด๋ก ์ธํด ๊ฐ๊น์ด ๋ฏธ๋์ ๋ ๊ฐ์ ๋งค์ฐ ์ ์ฌํ ๊ธฐ๋ฅ์ด ์์ฑ ๋ ๊ฒ์ ๋๋ค. "10 ๋ ๋์ ๊ทธ๋ ๊ฒ ์๋ ํ ๋ค๋ฅธ ๊ธฐ๋ฅ๊ณผ ์ฝ๊ฐ ๋ค๋ฅธ ๋์์ ๊ฐ์ง ์๋ก์ด ๊ธฐ๋ฅ์ ๋์ ํ๋ ๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ๋งค์ฐ ์ข์ง ์์ ์๊ฐ์ ๋๋ค."
์์ ์ด๋์ผ๋ก๋ ๊ฐ์น๊ฐ ์์ง๋ง ๋ ๋์ ๋ฌธ์๊ฐ ์ ๋ฆฌ๋์ด ์์ผ๋ฉฐ ์ฌ๊ธฐ์์ ์ํ๋ฉ๋๋ค. # 10214
์์ง ํ ๊ฐ์ง ์ง๋ฌธ์ด ๋จ์ ์์ต๋๋ค.
@njsmith ๋ ๋ค์
"" "
์ฐ๋ฆฌ๋ ์ด๋ฏธ ๊ฐ์ง๊ณ ์์ต๋๋ค :
assert_allclose
assert_almost_equal
assert_approx_equal
assert_array_almost_equal
assert_array_almost_equal_nulp
assert_array_max_ulp
์ด ๋ชฉ๋ก์ ๋ ๋ง์ ์ต์
์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ค์ ๋ก ์ค์ ์ฌ์ฉ์์๊ฒ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ค ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
"" "
์๋ก์ด ๊ฒ์ ์ถ๊ฐํ๋ ๊ฒ์ด ๊ด์ฐฎ์ ์์ด๋์ด๋ผ๋ ๋ป์ ๋๊น?
๋ํ ๋ค์ ์ฌํญ์ ์ฐธ๊ณ ํ์ญ์์ค.
์ด๋ค ๋๋ถ๋ถ์ ๋จ์ธ์ด๋ฉฐ ๋จ์ธ์ ํ์ฐ์ ๋จ์ ํ ์คํธ ์ํคํ ์ฒ์ ๋ถ์์ฉ์ ๋๋ค.
์ฐ๋ฆฌ ์ค ๋ง์ ์ฌ๋๋ค์ด ๋ค๋ฅธ ํ ์คํธ ์ํคํ ์ฒ (์ : pytest)๋ก ์ด๋ํจ์ ๋ฐ๋ผ ์ด์ค ์ ์ ํ์์ฑ์ด ์ฌ๋ผ์ง๋๋ค.
๋ฐ๋ผ์ numpy.testing
๋ก ๋ฌด์์ ํ ๊ฒ์ธ๊ฐ๋ numpy ์ฝ์ด๋ก ๋ฌด์์ ํ ๊ฒ์ธ๊ฐ์๋ ๋ณ๊ฐ์ ์ง๋ฌธ์
๋๋ค.
์ฐ๋ฆฌ ์ค ๋ง์ ์ฌ๋๋ค์ด ๋ค๋ฅธ ํ ์คํธ ์ํคํ ์ฒ (์ : pytest)๋ก ์ด๋ํจ์ ๋ฐ๋ผ ์ด์ค ์ ์ ํ์์ฑ์ด ์ฌ๋ผ์ง๋๋ค.
์ฌ์ค ์ด๊ฒ์ ๊ทธ ์์ฒด๋ก ์ํํฉ๋๋ค. ํ
์คํธ๋ assert_allclose(...)
์์ assert np.allclose(...)
๋ก ๋ณ๊ฒฝ ๋ ์ ์์ผ๋ฉฐ ์กฐ์ฉํ ๋ ์๊ฒฉ ํด์ง๋๋ค. ์ด๋ ๋์ ์ผ์
๋๋ค.
์ ์ฉํ ์คํจ ๋ฉ์์ง๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ pytest ํ๊ฒฝ์์ assert_allclose
์ ์ฌ์ฉํฉ๋๋ค.
def test_shs():
a = [0.1, 0.2, 0.3, 0.4]
b = [0.2, 0.3, 0.3, 0.4]
> np.testing.assert_allclose(a,b)
E AssertionError:
E Not equal to tolerance rtol=1e-07, atol=0
E
E (mismatch 50.0%)
E x: array([ 0.1, 0.2, 0.3, 0.4])
E y: array([ 0.2, 0.3, 0.3, 0.4])
assert np.allclose()
์ฌ์ฉ ๋๋น
def test_shs():
a = [0.1, 0.2, 0.3, 0.4]
b = [0.2, 0.3, 0.3, 0.4]
> assert np.allclose(a, b)
E assert False
E + where False = <function allclose at 0x7f20b13c9840>([0.1, 0.2, 0.3, 0.4], [0.2, 0.3, 0.3, 0.4])
E + where <function allclose at 0x7f20b13c9840> = np.allclose
pytest_assertrepr_compare
๊ตฌํํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ง๋ง ํจ์ ํธ์ถ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๋ชจ๋ฅด๊ฒ ๊ณ pytest๊ฐ ํธ์ถํ๋ ์์น๋ฅผ ํ์
ํ ์ ์์ต๋๋ค.
@ eric-wieser : ์์ฑ :
"์ค์ ๋ก ์ด๊ฒ์ ๊ทธ ์์ฒด๋ก ์ํํฉ๋๋ค. ํ ์คํธ๋ assert_allclose (...)์์ np.allclose (...)๋ฅผ ์ฃผ์ฅํ๋๋ก ๋ณ๊ฒฝ ๋ ์ ์์ผ๋ฉฐ ์กฐ์ฉํ ๋ ์๊ฒฉ ํด์ง๋๋ค. ์ด๊ฒ์ ๋์ ์ผ์ ๋๋ค."
๋ด ์์ ์ ๋ชจ๋ ์ฌ๋์ด ์ด์ค ์ ์ ํ ์คํธ์ ์ฌ์ฉํ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ๋ ๊ฒ์ "๋์ ์์ด๋์ด"์ด๋ฏ๋ก isclose () ๋ฐ allclose ()์ ๊ธฐ๋ณธ๊ฐ์ด ํ ์คํธ์ ์ ํฉํ ์ง ์ฌ๋ถ์ ๋ํด ์ ๊ฒฝ ์ฐ์ง ์๋ ๊ฒ์ด ์ด์์ ์ ๋๋ค. ํ์คํํด์ผํฉ๋๋ค.
์๋ก์ด ๊ฒ์ ์ถ๊ฐํ๋ ๊ฒ์ด ๊ด์ฐฎ์ ์์ด๋์ด๋ผ๋ ๋ป์ ๋๊น?
์๋์, ๊ฑฐ์ ๋์ผํ ํ ์คํธ๋ฅผ ํํํ๋ ์ฝ๊ฐ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ด๋ฏธ ๊ฐ์ง๊ณ ์๋ค๋ ์ ์ ๊ฐ์ํ ๋ ๋ถํํ๋ ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ ์์ง ๋ค๋ฅธ ์ถ๊ฐ ์ฌํญ์ ์์ ์ฐจ ๋ฆฌ๊ฑฐ๋ ์ดํดํ์ง ๋ชปํ ๊ฒ์ ๋๋ค.
๋ํ ๋ค์ ์ฌํญ์ ์ฐธ๊ณ ํ์ญ์์ค.
์ด๋ค ๋๋ถ๋ถ์ ๋จ์ธ์ด๋ฉฐ ๋จ์ธ์ ํ์ฐ์ ๋จ์ ํ ์คํธ ์ํคํ ์ฒ์ ๋ถ์์ฉ์ ๋๋ค.
์ฐ๋ฆฌ ์ค ๋ง์ ์ฌ๋๋ค์ด ๋ค๋ฅธ ํ ์คํธ ์ํคํ ์ฒ (์ : pytest)๋ก ์ด๋ํจ์ ๋ฐ๋ผ ์ด์ค ์ ์ ํ์์ฑ์ด ์ฌ๋ผ์ง๋๋ค.
๊ทธ๊ฒ๋ค์ ์ด์ค ์ ์ผ๋ก ์์ฑ๋์ง๋ง AFAICT๋ ๋ชจ๋ ํจ์๊ฐ ์ค์ ๋ก "๊ฑฐ์ ๊ฐ์"์ด๋ผ๋ ๋ค๋ฅธ ์ ์๋ฅผ ์ธ์ฝ๋ฉํฉ๋๋ค. (๋๋ ์๊ฐํ๋ค. ์ผ๋ถ ๊ตฌ๋ณ์ด ๋๋ฌด ๋ชจํธํด์ ๊ทธ๊ฒ์ด ์ง์ง์ธ์ง ์๋์ง ๋งํ ์ ์๋ค.)
์๊ณ ๋ฆฌ์ฆ ๋ฐ / ๋๋ ๊ธฐ๋ณธ๊ฐ ๋ณ๊ฒฝ :
์ง์ ์ค๋จ ๊ธฐ๊ฐ๊ณผ ๊ฒฝ๊ณ ๊ฐ ์๋๋ผ๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ ๋ฌธ์ ๋ก ์ธํด ์ผ๋ฐ์ ์ผ๋ก ๊ฑฐ๋ถ๋์์ต๋๋ค. ์ด๋ฌํ ๊ธฐ๋ฅ์ ํ ์คํธ์์ ๋๋ฆฌ ์ฌ์ฉ๋๋ฏ๋ก ์ต์ํ ํฐ ์ฑ๊ฐ ์๊ฒ๋ฉ๋๋ค.
๋๋ ํ์คํ ๊ทธ๋ฐ ๋ฃ์ดํ์ง ์์ ๊ฒ์ ๋๋ค. ์ ์๊ฒ๋ ์ด๊ฒ์ด ๋น์ฉ์ ์ ๋นํํ๊ธฐ์ ์ถฉ๋ถํ ์ด์ ์ ์ ์ฌ์ ์ผ๋ก ๊ฐ์ง ์์๋ ์ ์ผํ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ๋๋ ๊ทธ๋ค์ด ๊ทธ๋ ๊ฒ ํ
์๋ฅผ ๋ค์ด, ๋๊ตฐ๊ฐ ๋ํ๋์ "๋ด๊ฐ ์ ์ํ ๋ณ๊ฒฝ ์ฌํญ์ 3 ๊ฐ์ ํฐ ํ๋ก์ ํธ์ ์๋ํ๋๋ฐ, ๊ทธ ๊ฒฐ๊ณผ 10,000 ๊ฐ์ ํ ์คํธ ์ค 12 ๊ฐ์ ์ถ๊ฐ ์คํจ๊ฐ ๋ฐ์ํ์ผ๋ฉฐ ๊ทธ ์ค 12 ๊ฐ ์ค 8 ๊ฐ๋ ์ด์ ์ ์จ๊ฒจ์ ธ ์๋ ์ค์ ์กฐ์ฉํ ๋ฒ๊ทธ์์ต๋๋ค. ๋์ ๊ธฐ๋ณธ๊ฐ "... ๊ฝค ์ค๋๋ ฅ์ด ์์ต๋๋ค. ํนํ ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ข์ ๋ฒ์์ ๊ฒฝ๊ณ ๋ฅผ ํ ์์๋ ๊ธฐ์ ์ ๋ฅ๋ ฅ์ด์๋ ๊ฒฝ์ฐ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋๋ ์ค์ ์์น๊ฐ ๊ทธ๋ ๊ฒ ํธ์์ ์ด์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ๋๊ตฐ๊ฐ๊ฐ ํ์ธํ๊ธฐ ์ ๊น์ง๋ ๋๊ฐ ์ ์ ์์ต๋๋ค.
2017 ๋
12 ์ 18 ์ผ ์์์ผ ์คํ 3:57, Nathaniel J. Smith <
[email protected]> ์์ฑ :
์๋, ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ
๋ถํํ๋ ๊ฑฐ์ ๋์ผํ ํ ์คํธ๋ฅผ ํํํ๋ ์ฝ๊ฐ ๋ค๋ฅธ ๋ฐฉ๋ฒ
๋๋ถ๋ถ์ ์ฌ์ฉ์๋ ๋ ๋ค๋ฅธ ์ถ๊ฐ ์ฌํญ์ ์์ ์ฐจ ๋ฆฌ๊ฑฐ๋ ์ดํดํ์ง ๋ชปํ ๊ฒ์ ๋๋ค.
์, ํ ๊ฐ์ง ํฐ ์ฐจ์ด์ ์ด ์์ต๋๋ค.
๋ญ๊ฐ ๋ค๋ฅด๊ณ ๋ถ๋ ์์์ ์ ๋ณ๋์ผ๋ก
์ฐจ์ด๊ฐ ์ค์ ํ ์ ์์ต๋๋ค.
์๋ก์ด ์๋์ ๊ทผ์ ์ฑ ํจ์๋ ๋ณธ์ง์ ์ผ๋ก ๋์ผํ ์์
์ ์ํํ์ง๋ง
์ข ๋ ์ ํด๋ด". ๋ชฉํ๋ ์๋ก์ด ๊ฒ์ ์ฌ์ฉํ๋๋ก ๊ถ์ฅํ๋ ๊ฒ์
๋๋ค.
์ค๋๋ ๊ฒ ๋์ ์ (๊ทธ๋ฆฌ๊ณ ๊ฒฐ๊ตญ ์ค๋๋ ๊ฒ์ ๋น๋ ํ ์๋ ์์ต๋๋ค).
์์งํ ๊ทธ๊ฒ ์์ด๋์ด์ ๋ํ ๋
ผ์์ธ์ง, ๋ฐ๋์ธ์ง๋ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๊ทธ๋ฌ๋.
์๋ฅผ ๋ค์ด ๋๊ตฐ๊ฐ ๋ํ๋์ "์ ์ ์ํ ๋ณ๊ฒฝ ์ฌํญ์ 3 ๋
10,000 ๊ฐ์ ํ ์คํธ ์ค 12 ๊ฐ์ ์ถ๊ฐ ์คํจ๊ฐ ๋ฐ์ํ์ต๋๋ค.
12, 8 ๊ฐ๋ ์ค๋๋ ์ ๋น์ ์ํด ์จ๊ฒจ์ ธ ์๋ ์ค์ ์กฐ์ฉํ ๋ฒ๊ทธ์์ต๋๋ค.
๊ธฐ๋ณธ๊ฐ "... ๊ฝค ์ค๋๋ ฅ์ด ์์ต๋๋ค. ํนํ ์ด๊ฒ์
์ข์ ๋ฒ์์ ๊ฒฝ๊ณ ๋ฅผ ํ ์์๋ ๊ธฐ์ ์ ๋ฅ๋ ฅ์ด์๋ ๊ฒฝ์ฐ.
์ค์ ์์น๋ ๊ทธ๋ฆฌ ํธ์์ ์ด์ง ์์ ๊ฒ ๊ฐ์ง๋ง
๋๊ฐ ์๊ณ ์๋์ง ํ์ธํฉ๋๋ค.ํ , ๋ด ์ฝ๋ ๊ธฐ๋ฐ์๋ 10,000 ๊ฐ๊ฐ ์๋ ์ฝ 1500 ๊ฐ์ ํ ์คํธ๊ฐ ์์ต๋๋ค.
์ฌ๊ฒฉ. ๋ค๋ฅธ ๊ฒ์ด ์๋ค๋ฉด ๋ฒ๊ทธ ๋๋ ๋ถ๋ํ ํ ์คํธ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ๋๋ ๋ ๋ง์ ๊ฒ์ ์ป์ผ์ญ์์ค
์์ฌ!
๋ชจ๋ ์๋ ,
๋๋ฃ๊ฐ์ด ๋ฌธ์ ์ ์ง๋ฉด ํ ํ ์ฌ๊ธฐ์ ์ฐจ์ํ๊ณ ์ถ์์ต๋๋ค.
_ ๋ฉด์ฑ ์กฐํญ : "ํ์ฅ์ค์์ ๋ถ"์ ์ธ์น๊ณ ์ธํ๋ฆฌ ๋๋จธ๋ก ๋์ง๊ธฐ ์ ์๋ ๋ ผ๋ฆฌ์ ๋ํด ๋ง์ด ์๊ฐํ์ง ์์์ต๋๋ค. ๋ถ๋๋ฌ์ด ํด์๋ฅผ ๋ง๋ค์ ์ผ๋ฉด ์น์ ํด์ฃผ์ธ์.
๋์๊ฒ์ด ๋ชจ๋ ๊ฒ์ ๊ณ ์ ์ ์ธ ์ํคํ ์ฒ / ๋์์ธ "์นํจ ์ค ์๊ทธ"๋ฌธ์ -์๋ฏธ๋ก ๋ ๊ตฌํ๊ณผ ๋งค์ฐ ๋น์ทํ๊ฒ ๋ค๋ฆฝ๋๋ค. ๋ชจ๋ ๋ฒ๊ทธ๊ฐ ์ฝ๋ ๋ด์ ์กด์ฌํ๋ ๊ฒ์ ์๋๋ฉฐ ๋๋ก๋ ์๋ฏธ ์ฒด๊ณ ๋ด์ ์กด์ฌํฉ๋๋ค. ์ด๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฐํจ์ด ์์์ ๋ฐ๊ฒฌํ๊ธฐ ์ํด์๋ง ์๋ฒฝํ๊ฒ ๊ตฌํ๋๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ ํฌ๊ฒ ๋ค๋ฅด์ง ์์ต๋๋ค. ๋ฒ๊ทธ๋ ์ฝ๋์ ์์ง ์๊ณ ์๊ณ ๋ฆฌ์ฆ์ ์์ง๋ง ์ด๋ ์ชฝ์ด๋ ์ฌ์ ํ ๋ฒ๊ทธ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก์ด ํ ๋ก ์ "๋ฒ๊ทธ๊ฐ ์๋๋ผ ๊ธฐ๋ฅ"์ด๋ผ๋ ๊ณ ์ ์ ์ธ ๋๋ด์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ๋ฌผ๋ก , "์ ํ"์ ๊ทธ์ ๊ทธ๋ ์ต๋๋ค. ๊ทธ๋ฌ๋ IMHO๋ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ก ์ ๊ทผ๊ฑฐ์ ๋์ ๋ํ๋ ๋๋ค. ์๋ฏธ๋ก ์ด ๊ตฌํ ๋ ๊ทธ๋๋ก ์ ํ๋๋ฉด ๊ตฌํ์ ๋ชจ๋ ๋ฉ์ง๊ณ ํ ๋ก ์ ๋์ ๋๋ค.
๊ทธ๋์ isclose()
์ "์ํ๋"๋ฐ / ๋๋ "์์ ๋"์๋งจํฑ์ ๋ฌด์์
๋๊น? ์ด๊ฒ์ ์๊ฐํ๋ฉด, ๋๋ ์ฌ์ฉ์๊ฐ ์ ์ํ๋ ์๋งจํฑ์ ์๋ ดํ๊ฒ ๋จ์ต๋๋ค. ์ฆ, ์ฌ์ฉ์๊ฐ ์๋งจํฑ์ ์ ์ ํ ์ ์์ด์ผํฉ๋๋ค. "๋ซ๊ธฐ"์ ์ ์.
๊ธฐ๋ณธ๊ฐ๊ณผ ๊ด๋ จํ์ฌ ์ด๊ฒ์ ๊ถ๊ทน์ ์ผ๋ก ์๋ฏธ ์ฒด๊ณ๋ฅผ ๊นจ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋ชป๋ ์ ํ์ ์ํํฉ๋๋ค. 0์ด ์๋ ๊ธฐ๋ณธ๊ฐ์ด abs(a - b) == 0
๋ ํฉ๋ฆฌ์ ์ธ ๋์์ ์ ๊ณตํ๊ธฐ ์ํด _only_ ์ ํ ๋์๋ค๋ฉด ์ด๊ฒ์ ํ์คํ ์๋ชป๋ ํด๊ฒฐ์ฑ
์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ์ด ํน์ ์ํ๋ ์๋ฏธ ์ ํน์ ์ผ์ด์ค์ด๋ฏ๋ก ํน์ ์ผ์ด์ค๊ฐ ๋ ๋์ ๊ฒ์
๋๋ค. diff๊ฐ 0 ์ผ ๋ "close"์ ์ ์์๋ "wiggle room"์ด ์์ต๋๋ค. ์์ฒด ์ ์ํ๋ ์ฝ๋ ์คํค์
๋๋ค. ์ฆ, _close_๊ฐ ์๋๋ผ _exact_์
๋๋ค. ์ฌ๊ธฐ์ "close"๋ ์ ํํ ๊ฐ๊ณผ์ ์๋์ ์ธ ํธ์ฐจ์
๋๋ค. . (_ ์ฐธ๊ณ : _ ํน์ ์ผ์ด์ค ์กฐ๊ฑด์ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์๋ ์๊ณ ๊ทธ๋ ์ง ์์ ์๋ ์์ต๋๋ค.)
+
๋ max
max
_does_๊ฐ ์๋ ํฉ๊ณ๋ฅผ ์ฌ์ฉํ๋ ๊ตฌํ์ผ๋ก ์ธํด rel_tol
๋ฐ a_tol
์ ํผํฉ ๋๋ "๊ทธ๋ฆผ์"๋ ์์ ํจ์ ์๋ฏธ๋ฅผ ์์์ํต๋๋ค. "close"์ ๋ํ ์ฌ์ฉ์์ ์ ์๋ "relative"์ "absolute"์ ์๋ฏธ๋ฅผ ์๋ง์ผ๋ก ๋ง๋ค ๋ฏ๋ก ์ฌ์ํ์ง ์์ ๋ฐฉ์์ผ๋ก ๋ฌถ์ฌ ์์ต๋๋ค. ์์ ์๋ฏธ ๋ง ๊ณ ๋ คํ๋ฉด์ด ์ธก๋ฉด์ _is_ ๋ฒ๊ทธ์
๋๋ค. ์๋ฅผ ๋ค์ด ์ค๋ช
ํฉ๋๋ค.
์ฌ๊ธฐ ๋ ์ฌ์
์ ์ ๋ง ์์ต๋๋ค -
์์ a-b
๋ฐ <=
์์ |a-b| <= f(a, b, atol, rtol)
. ๋บ์
์ ์ญ ๊ตํ ์ ์ด์ง๋ง |a - b|
์ ๊ทธ๋ ์ง ์์ง๋ง ์ ์์ ๋ฐ๋ผ ๊ตํ ์ ์
๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ๋ง์ผ๋ก๋ f(a, b, atol, rtol)
์ ๊ตํ์ ํํํ๊ธฐ์ ์ถฉ๋ถํ์ง ์์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์๋ ๊ฐ๋ ฅํ๊ณ ์ฝํ ๋
ผ์์ด ์์ต๋๋ค.
|a - b|
์ ์งํํ์ง ์์ ์ ์์ต๋๋ค f(a, b, atol, rtol)
ํ๋ก๊ทธ๋๋ฐ, f(a, b, atol, rtol)
์ ๋ง ์๋๋๋ค์ ์ง๋ฌธ์ด์ง๋ง isClose(a, b, atol, rtol)
. ์ฌ๊ธฐ์ |a - b|
๊ณ์ฐ์ isClose() := |a-b| <= f(a, b, atol, rtol)
ํจ์์ ๋ํด ๋ด๋ถ์ ์ผ๋ก ์ํ๋ฉ๋๋ค. ์ด๊ฒ์ ๋ด๋ถ์ด๊ณ a
๋ฐ b
๊ฐ ์ ๋ฌ๋๊ธฐ ๋๋ฌธ์ |a-b|
๊ฐ ๊ตํ ํ์ด ๋๋ ค๋ฉด isClose()
์์ด์ผํฉ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ |a-b|
์ commutativity๋ ๋ชจ๋ ์๋ฏธ๋ฅผ ์์ต๋๋ค.<=
์๋๋ผ <
์ด๋ฏ๋ก ๋น๊ต์ ๋๋ฑ ๋ถ๋ถ์ ๋ํด |a-b| = f(a, b, atol, rtol)
๋ฅผ ์๋ฏธํ๋ f(a, b, atol, rtol)
_must_ ์ญ์ ๊ตํ ์ ์ด์ด์ผํฉ๋๋ค (๋ด ์๊ฐ์๋?). ๊ทธ๋ ์ง ์๋ค๋ ๊ฒ์ ์์ ํ๋ฑ์ด _never_ true (์ด๋ฅผ ์ถฉ์กฑํ๋ a
& b
์ด ์์)์ด๊ฑฐ๋ ์์ ๋ถํ๋ฑ ์ธ <
๊ฐ ์ค์ ๋ก ์๋ฏธ ๋ก ์ ์ผ๋ก ์ ์ ๋์์ฃ ?์ด๊ฒ์ ์ ๋ถ ๋๋ ์ผ๋ถ์ ๋ํด ๋น์ ์ดํ๋ (๋๋ํ์ง ์๋) ๊ฒ์ ์์ ํ ๋ณ๊ฐ์ ์ง๋ฌธ์ ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@njsmith : ๋ฐ๋ ค์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
์ฝ๊ฐ์ ์ญ์ฌ : ๋ด๊ฐ stdlib์ ๋ํด isclose๋ฅผ ์ ์ํ์ ๋ ์ฐ๋ฆฌ๋ ํ์คํ numpy๋ฅผ ์ ํ ๊ธฐ์ ๋ก ๋ณด์์ต๋๋ค. ๋๋ง ์์๋ค๋ฉด ํธํ์ฑ์ ์ํด ํธํ ๊ฐ๋ฅํ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ ์ ์์ต๋๋ค :-).
ํ์ง๋ง ๋๋จธ์ง ์ปค๋ฎค๋ํฐ ์๊ฐ์ ํ์ด์ฌ์ "์ฌ๋ฐ๋ฅธ"์ผ์ํ๋ ๊ฒ์ด ๋ ์ค์ํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ๊ธด ํ ๋ก ์ด ์ด์ด์ก์ต๋๋ค. ์ ๋ PEP์์ ๋๋ถ๋ถ์ ์์ ์ ํฌ์ฐฉํ๋ ค๊ณ ๋ ธ๋ ฅํ์ต๋๋ค.
๋ค์์ numpy์ ๋ํ ์ฐธ์กฐ์ ๋๋ค.
https://www.python.org/dev/peps/pep-0485/#numpy -isclose
์ด ํ ๋ก ์์์ ๋์ผํ ์์ ์ด ๋ง๋ค์ด ์ก์์ ์ ์ ์์ต๋๋ค.
๊ฒฐ๊ตญ ์ธ ๊ฐ์ง ํต์ฌ ์ฌํญ์ด ๋์์ต๋๋ค.
1) ๋์นญ ์ ๊ทผ ๋ฐฉ์์ ์ต์ํ์ ๋๋ผ์์ ์ด๋ํฉ๋๋ค.
2) ์ธ์์ ํฌ๊ธฐ์ ๋ํ ๊ฐ์ ์ํ์ง ์๋๋ก ๊ธฐ๋ณธ ์ ๋ ํ์ฉ ์ค์ฐจ๋ ์๋ง๋ 0์ด์ด์ผํฉ๋๋ค.
3) "์ฝํ"ํ ์คํธ์ "๊ฐํ"ํ ์คํธ์ ์ฐจ์ด๋ ์์๋๋ ์ฌ์ฉ ์ฌ๋ก์ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ํ์ฉ ์ค์ฐจ๋ก ์ฌ์ฉ๋ ๋ ๋ฌด๊ดํ์ต๋๋ค.
๊ฒฐ๊ตญ ์ฐ๋ฆฌ๊ฐ math.isclose๋ฅผ์ํ "์ต๊ณ ์"์๋ฃจ์ ์ ์๊ฐํด ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๊นจ๊ธฐ์ ์ถฉ๋ถํ ๋งํผ "๋ ๋์"๊ฐ์? ๋๋ ๊ทธ๋ ๊ฒ ์๊ฐํ์ง ์๋๋ค.
๋ถํํ๋ ๋ง์ numpy (๋ฐ python)์๋ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ง์ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ง๋ง ํ์ฌ ๋ ผ์๊ฐ ๋ง์ง ์์ ์ํ์์ ์ด๋ฌํ ๊ฒ๋ค์ ๋ํด ๋ง์ ์ฐจ์ ์ฑ ์ด ์์ต๋๋ค. ์ด๊ฒ์ ์ ์ ๋์๊ด์ ์์๋๋ (ํ์ํ) ๊ฒ์ด๋ฉฐ, ์ฐ๋ฆฌ๋ ์ง๊ธ ๊ทธ๊ฒ๊ณผ ํจ๊ป ์ด์์ผํฉ๋๋ค.
@njsmith ๊ฐ ๋ง์ต๋๋ค-np.isclose ()์ ์ฌ์ฉ์ ์๊ฒฉํ FP ์ค๋ฅ ๋ถ์์ ์ํด ์ค์ ๋ ํ์ฉ ์ค์ฐจ๊ฐ ์์ง๋ง ์คํ๋ ค np.isclose () ์์ฒด๋ก ์ค๋ฅ๋ฅผ ์๋ํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋ ํฐ ๋ฌธ์ ๋ ๊ธฐ๋ณธ
atol
๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฆ, ์ธ์๊ฐ ์์ 1์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค. ์ด๋ ๋งค์ฐ ์๋ชป๋ ๊ฐ์ ์ผ ์ ์์ผ๋ฉฐ, ํ ์คํธ๋ฅผ ํต๊ณผํ๋ฉด ์๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ ๋๋ค. , ์ฌ์ฉ์๊ฐ ๋์น ์ฑ์ง ๋ชปํ ์ ์์ต๋๋ค.์์ผ!
์,
atol
์์ธ์ ๋๋ค.๋ฐ๋ผ์ ์์ผ๋ก ๋์๊ฐ ๊ธธ์ ๊ฐ๋ ๊ฒ์ ์ข์ ์๊ฐ ์ผ ๊ฒ์ ๋๋ค.
๋๋ ํค์๋ ์ธ์ ์์ด๋์ด๋ฅผ ์ข์ํฉ๋๋ค. __future__ ๋ฑ์ ์๋ง์ผ๋ก ๋ง๋๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๊ฐ๋จ ํด ๋ณด์ ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ฌ์ฉ ์ค๋จ ๊ฒฝ๊ณ ๋ฅผ ๋ฐํํ๊ณ ๊ถ๊ทน์ ์ผ๋ก ๋ค์ด ์คํธ๋ฆผ ๊ธฐ๋ณธ ์ฌ๋ฌ ๋ฒ์ ์ ๋ณ๊ฒฝํ ๊ฒ์ธ์ง ๊ฒฐ์ ํ ์ ์์ต๋๋ค.