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
ããŠãĄãŧãŋãŧã¨
ããã¯ãNumpyã2ã¤ãŽæ°å¤ããčĒ¤ãŖãĻãįããããŽã¨ããĻããŠã°ãįĢãĻãįļæŗã§ãã
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
ããããã1ã¤ãããŽå ´åãŽå¯žį§°æ§ãŽåéĄã§ãã
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
Pythonæ°åĻããŧã¸ã§ãŗã¯é˛åŧžãŽãããĢčĻããžãããNumpyã¯ãããäŊŋãå§ãããšãã§ããīŧ Numpyããŧã¸ã§ãŗãäŊŋį¨ããåŠįšã¯ãããžããīŧ
į§čĻãå¤ãããĢã¯é ãããžãã
ããã¯ãããšãĻãŽnumpyã§æãåēãäŊŋį¨ãããĻããéĸæ°ãŽ1ã¤ã§ãīŧ assert_allclose
ãäģããĻīŧããããĢ寞ããå¯ä¸ãŽããšã¯ãåĨãŽååãé¸æãããã¨ã§ãã
įžå¨ãŽåŽčŖ
ã¯ãã°ãŽãããĢčĻãããã¨ãåįŊããžãã æŗ¨äŊŋį¨ããĻãããã¨ãmax(abs(a), abs(b))
ãŽäģŖãããĢabs(b)
ãæĸåãŽããšããä¸æãããžãããããã¯åãĢããå ´åãĢã¯æĄäģļãįˇŠåabs(a) > abs(b)
ã
å°ãĒãã¨ãããããĢã¯ãįĩãŋčžŧãŋã¨ä¸č´ããĒãã¨ããdocstringå ãŽčĻåãåŋ čĻã§ãã
ãããčŋŊå ããĻãŋãžãããīŧ
from numpy.__future__ import isclose
ãĄãĒãŋãĢãããã¯äšąæ°ããŧã¸ã§ãŗįŽĄįãŽãĸã¤ããĸãããããžãã...
æįĸēãĢãããããĢãã¤ãŗããŧãã¯åŽéãĢã¯iscloseãã¤ãŗããŧãããžããããæ°ãããģããŗããŖã¯ãšãæåšãĢããžãã ããã¯ãĸã¸ãĨãŧãĢãĢãããããžãã
ãĸã¤ããĸã¯ãäēēã ãæŖããæŠčŊãäŊŋį¨ã§ãããããĢããã¨åæãĢãæĸåãŽãŗãŧããåŖãåŋ čĻããĒãã¨ãããã¨ã§ãã
ãã¤ãŗããŧãã¯åŽéãĢã¯iscloseãã¤ãŗããŧãããžããããæ°ãããģããŗããŖã¯ãšãæåšãĢããžã
ãããã¤ãŗããŧãããĒããããĢãããã¨ã¯ä¸å¯čŊã ã¨æããžãã mathlike_ufunc
ãŽãããĒéˇãååãé¸æããã ãã§ã remainder
ããĢããŧã§ããžãã
from __future__ import print_function
åŽéãĢã¯print_function
ã°ããŧããĢãįæãããã¨ãĢæŗ¨æããĻãã ãã
åŽéãããã§ã¯from __future__ import *
ãšãŋã¤ãĢãŽã¤ãŗããŧãã¯éŠåã§ã¯ãĒãå¯čŊæ§ããããžã-Pythonã§ã¯ãããĄã¤ãĢãã¨ãŽãŦããĢã§_syntax_ãĢåŊąéŋããnumpyã§åæ§ãŽãã¨ãčĄããŽã¯éŖããã§ããã
ã¤ããŦãŧãŋãŽäžå¤ã¯æ§æãŽå¤æ´ã§ã¯ãããžããã§ããã åŧãŗåēãå ãĸã¸ãĨãŧãĢãŽååįŠēéãæ¤æģãããããĢåŋ čĻãĒãŽã¯å°ããĒCãĸã¸ãĨãŧãĢã ãã§ãã ãĸã¸ãĨãŧãĢãããŖããˇãĨããĻãã¤ãŗããŧãæéã ããé ããããã¨ãã§ããžãã
ããŽéãã§ã-ãããĻtrue_division
ã¯æãããĢiscloseãĢéĄäŧŧããĻããžãã
ããã¯ãéæ¨åĨ¨ãŽæŠčŊãįŽĄįãããããĢwith
ãšããŧããĄãŗããäŊŋį¨ããäģŖãããĢãīŧ9444ãŽåéĄãåéŋãããããŽåĒããæšæŗã§ãã
math.isclose
äŊæč
ã¨ããĻ@ ChrisBarker-NOAAãCCããžãããã
ããã¯ããĒããã¤ããŧãĒåéĄIMOã§ãã é常ã atol
ã¨rtol
ã¯ãããšããĢåæ ŧãããžã§ããããããããã¨ãĢããŖãĻé¸æãããžããįŽæ¨ã¯ãč¨ąåŽšå¤ããã1æĄå¤§ããã¨ãŠãŧãããŖãããããã¨ã§ãã @charrisãææĄãããããĢrtol
é¨åããĒãŠãã¯ãšãããŽã¯įãĢããĒãŖãĻãããããããžããããããŽå°ããĒčĒŋæ´ãŽãããĢãšãŋãã¯ãŽå
įãŽããĒãã¯ãåŧãåēã䞥å¤ã¯ãĒãã¨æããžãã ãžãã isclose
ã¯ã assert_allclose
ãããžããžãĒãĩãŧãããŧããŖãŽããšãããĢããŧãĒãŠãĢããŖãĻéæĨįãĢåŧãŗåēããããã¨ãå¤ãã¨ããåéĄããããžãã
StackOverflowã§__future__
ãšãŋã¤ãĢãŽã¤ãŗããŧããŽäŊŋį¨ãĢã¤ããĻčŗĒåããžããīŧ https īŧ
TLDRīŧããã¯å¯čŊã§ãããį°Ąåã§ãã¯ãĒãŧãŗã§ããããžããã
ãšãŋãã¯ã¤ãŗãããšãã¯ãˇã§ãŗã¯ããã ãã§ã¯ãĒããéĸæ°ãŽæģãå¤ãå¤æ´ãããããŽä¸čŦįãĒããĒãˇãŧã¨ããĻææĄãããĻããžãã åéĄã¯ãååã¨ããĻããããå¤æ´ããåŋ čĻãããããŠããã§ãã įãããã¯ãããŽå ´åãåēãäŊŋį¨ãããĻãããã¨ãčããã¨ãéæ¨åĨ¨æéã¯å°ãĒãã¨ãæ°åš´ã¯åŋ čĻã ã¨æããžãã PythonãĢéåģãŽãĸã¸ãĨãŧãĢãåĢãžãããã¨ã¯ãããžããã§ããããåŋ čĻãĢåŋããĻAPIãŽåŽåŽæ§ãåä¸ããããããŽ1ã¤ãŽãĒããˇã§ãŗã§ãã
ãã1ã¤ãŽæšæŗã¯ãããããĒããˇã§ãŗisclose(...,symmetric=True)
ãžãã¯assert_allclose(symmetric=True)
ã¨ããĻčŋŊå ãããã¨ã§ããããã§ããããŠãĢãã¯False
ã§ãįžå¨ãŽįļæŗã§ãã
@njsmithãčŋ°ãšãĻãããããĢã rtol
ã¨atol
å¤ãĢæåŗãæãããããĻãããããšããĢåæ ŧãããããĢčĒŋæ´ããã ãã§ãããã¯å°ããĒåéĄã§ãããã¨ãĢåæããžãã
ãã ããã¨ãŠãŧã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ãĢčŋãã¨ææĄããã¨ããį§ããĄã¯įĸēããĢnumpyãå čĄæčĄã¨čĻãĒããĻããžããã ãããį§ã ãã ãŖãã¨ããããäēææ§ãŽãããĢãäēææ§ãŽãããĸãããŧããäŊŋį¨ãããããããžãã:-)ã
ãããããŗããĨãããŖãŽæŽããŽé¨åã¯ãPythonãĢã¨ãŖãĻãæŖããããã¨ãčĄããã¨ãããéčĻã§ããã¨čããĻãããããéˇãč°čĢãįļããžãã...čĻãĢčĄãããå ´åã¯ãPEPãŽãģã¨ããŠãŽãã¤ãŗããããŖãããŖãããã¨ããžããã
numpyã¸ãŽåį §ã¯æŦĄãŽã¨ããã§ãã
https://www.python.org/dev/peps/pep-0485/#numpy -isclose
ããŽč°čĢã¨åããã¨ãææãããĻãããã¨ãããããžãã
įĩåąã3ã¤ãŽéčĻãĒãã¤ãŗããåēãĻããžããã
1īŧ寞į§°įãĒãĸãããŧãã¯ãéŠãæå°ãŽååãĢãĒããžãã
2īŧåŧæ°ãŽå¤§ãããŽé åēãĢã¤ããĻäŊãäģŽåŽããĒããããĢããããŠãĢããŽįĩļå¯žč¨ąåŽšå¤ã¯ãããããŧãã§ããåŋ čĻããããžãã
3īŧãåŧąããããšãã¨ãåŧˇããããšããŽéãã¯ãäēæŗããããĻãŧãšãąãŧãšã¨åæ§ãĢãč¨ąåŽščĒ¤åˇŽãå°ããå ´åã¯éĸäŋãããžããã§ããã
įĩåąãmath.iscloseãŽãæč¯ãŽãč§Ŗæąēįãæãã¤ããã¨æããžãã
ããããä¸äŊäēææ§ãåŖããŽãĢååãåĒããĻããããŽã§ããããã į§ã¯ããã¯æããžããã
æŽåŋĩãĒãããnumpyīŧãããŗpythonīŧãŽå¤ããĢã¯ãäžŋåŠãĒãããĢå¤ããŽæŠčŊãčŋŊå ãããĻããžãããįžå¨ãŽč°čĢãããžããĒããããããããŽæŠčŊã¯æéŠã§ã¯ãĒãããļã¤ãŗããããããããžãã ããã¯čĨãåŗæ¸é¤¨ãĢã¨ãŖãĻæåž ãããĻããīŧãããĻåŋ čĻãĒīŧããŽã§ãããį§ããĄã¯äģããã¨ä¸įˇãĢæŽããåŋ čĻããããžãã
@njsmithã¯æŖããã§ã-åŗå¯ãĒFPã¨ãŠãŧåæãĢããŖãĻč¨ąåŽšå¤ãč¨åŽãããĻããnp.iscloseīŧīŧãŽäŊŋį¨æŗã¯ãģã¨ããŠãĒãã¨æããžããã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ãŽææĄãææĄãããã¨æããžãīŧ
"" "
ãã1ã¤ãŽæšæŗã¯ãããããĒããˇã§ãŗiscloseīŧ...ãsymmetric = Trueīŧãžãã¯assert_allcloseīŧsymmetric = Trueīŧã¨ããĻčŋŊå ãããã¨ã§ããããã§ããããŠãĢãã¯įžå¨ãŽįļæŗã§ããFalseã§ãã
"" "
ããã¯æ°ããéĸæ°åãããåĒãããĒããˇã§ãŗã§ãããå°æĨãŽéæ¨åĨ¨ããããŠãĢããŽå¤æ´ãĢã¤ãĒããå¯čŊæ§ãããã¨æããžãīŧãžãã¯ããã§ãĒãīŧã
īŧåŧˇåãĒīŧ寞į§°ããšããĢå ããĻã atol
ãããŠãĢãã§ãŧããĢãĒãã¯ãã ã¨æããžãã
ãããčããã¨ãæĒãã¯ãããžããããããŠãĄãŧãŋãĢã¯symmetric
ãããéŠåãĒååãåŋ
čĻãããããžãã...
ãã-ãããĻassert allclose()
ãĢå ããĻisclose()
ãnumpyãŽäģãŽå ´æã§åŧãŗåēãããĻããĒããã¨ãįĸēčĒãããŽã¯č¯ããã¨ãããããžããã
ãããčĄãæãį°ĄåãĒæšæŗã¯ãããããéæ¨åĨ¨ãŽčĻåã
æŦĄãĢãããŧã¸ããåãĢãããåé¤ããžãã į§ããĄã¯å
ãĢé˛ãã§įŊŽããã¨ãã§ããžã
æĸåãŽãŗãŧãããĢå¤æ´ãããããĢæį¤ēããéæ¨åĨ¨ãŽčĻå
symmetric = False; ãããŠãĢãã§ããåŋ
čĻãããã¨č¨ãįįąã¯ãããžãã
čĻåãããŖãĻããããĢå¤æ´ãããžãã
assert_allclose
ãčŋŊå ããåŋ
čĻããããžãããããã¨ããĩã¤ãŦãŗããĢå¤æ´ããã ãã§ããīŧ čĻåãæļããããĢããšãĻãŽããšããæ´æ°ãããããĢãããã¨ã¯ãč¨ąåŽšį¯å˛ãæ¸ãããããĢããšããæ´æ°ãããã¨ã¨åŽéãĢã¯äŊãŽéãããããžãã
@xoviat @ eric-wieser assert_allclose
ã¸ãŽåžæšäēææ§ãŽãĒãå¤æ´ãããããããŽéæ¨åĨ¨ãŽčĻåã¯ããåžãžããã éæ¨åĨ¨ãŽčĻåã襨į¤ēãããå ´æããĒãå ´åãé¤ããžããīŧ
ããã¯ãžã æĨĩå°ãŽčĻįãŽãããĢčããããŽã§ã¯ãĒããã¨æããžã
ã˛ã¤ãŗãį§ãĢã
ãããŠãĢãã§atolããŧãäģĨå¤ãĢãããã¨ã¯ãåļįļã§ã¯ãããžããã ååžããåŋ
čĻããããžã
æåž
ãããįĩæãĢåĢãžããããšãĻãŽããšããŽéŠåãĒãããŠãĢããŽåäŊ
æŖįĸēãĒãŧãã
ãĢæ´æ°ããããããassert_allcloseãå¤æ´ããåŋ
čĻã¯ãããžããã
å¤ãåäŊãäŊŋį¨ãããããĢå
é¨įãĢã
IMOãŽãĩã¤ãŦãŗãå¤æ´ã¯åäģã§ãīŧ éæ¨åĨ¨ãŽčĻåã¯ã
äēēã
ã¯æįĩįãĢã¤ãŗãŋãŠã¯ããŖããĒãããŗããã§ããŠã°ãå
Ĩåããåŋ
čĻã¯ãããžãã
æ°ããåäŊãååžããžããããäģĨä¸ã¯ãããžããã
IMOãŽãĩã¤ãŦãŗãå¤æ´ã¯åäģã§ãīŧ
åæããžããã ãã ããå¤æ´ã¯ãããžããã åēãäŊŋį¨ãããĻããæŠčŊãŽéæ¨åĨ¨čĻåãããĻãŧãļãŧīŧå°ãĒãã¨ãåŽéãĢãĄãŗãããŗãšãčĄããĻãŧãļãŧīŧãĢå¤æ´ãåŧˇåļããžãã
@charrisãææĄãããããĒäŋŽæŖãããŽã¯ãŠãã§ããīŧ ãããĢããããããĨãĄãŗããšããŧãšãč§Ŗæžããã atol != 0.0
ã¨ããĢįēįããå¯čŊæ§ãŽããæĒããã¨ãĢã¤ããĻãŽčĻåã襨į¤ēãããå¯čŊæ§ããããžãã
å¤æ´ãĢã¤ããĻäēēã
ãĢįĨããããĢããŽåéĄãäŋŽæŖãããã¨ã¯ã§ããžãã
åäŊã ãããčĄãæšæŗãį§ãįĨãŖãĻããå¯ä¸ãŽæšæŗã¯ãčĻåãåēããã¨ã§ãã
æŦåŊãĢį´ æ´ããããŽã¯ãããŠã°ãæŋå
ĨããčĒåãĒããĄã¯ãŋãĒãŗã°ããŧãĢã§ã
å¤ããŗãŧããĢã æŦĄãĢãããĄãŗãããŗãšãã¯ããĒããŽãšã¯ãĒãããåŽčĄããã ãã§ã
ãŗãŧã; 5åãŽäŊæĨã
įŗãč¨ŗãããžããããããã¯æ°ããããŠã°ãäŊŋį¨ããã ãã§äŋŽæŖã§ããžãã
@charrisãææĄãããããĒäŋŽæŖãããŽã¯ãŠãã§ããīŧ
ããŽææĄīŧhttps://github.com/numpy/numpy/issues/10161#issuecomment-349384830īŧã¯åŽčĄå¯čŊãŽããã§ãã
å¤æ´ãããåäŊãĢã¤ããĻäēēã ãĢįĨããããĢããŽåéĄãäŋŽæŖãããã¨ã¯ã§ããžããã
äŋŽæŖããĻããžããã ããã¯ããģããŗããŖãã¯ããŧã¸ã§ããŗã°ãŽåéĄã§č°čĢãããĻããå¤æ´ãŽãŗãšã/ãĄãĒãããĢéĸããããŽã§ãã ããã¯ééããĒããåēãäŊŋį¨ãããĻããããšãæŠčŊããå¤æ´ãå ãããčĻåãįēãããããĒãå ´åã§ãã įžå¨ãŽåäŊã¯ãã°ã§ã¯ãĒããã¨ãĢæŗ¨æããĻãã ããīŧãã ããããããæéŠã§ã¯ãĒãé¸æã§ãīŧã
æįĸēãĢãããããĢãį§ã¯iscloseã¸ãŽå¤æ´ãææĄããĻããžããããassert_allcloseã§ã¯ãããžããã§ããã
ãŊãŧãšãčĻãã¨ãããŽå¤åã¯į ´åŖįãĒããŽãŽ3åãŽ1ãĢãĒããžãã
ãã ãããĄãĒããã¯ãžã å°ããããå¯čŊæ§ããããžãã čĒ°ãããĒãã¨æããžã
ããããããŠã°ãčŋŊå ãããã¨ãĢå寞ããžãããīŧ
ã§ããããŠã°ãčŋŊå ãããã¨ãĢå寞ããäēēã¯ããĒãã¨æããžãããīŧ
ããããĒããčŠŗį´°ãĢããŖãĻį°ãĒããžãã @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ã¯č¨ąå¯ãããããŽč§ŖæąēįãææĄããžãã
įžå¨ãããčæ§ã
äģģæãŽããšãã į§ã¯ãžã īŧčĻåãįēãããããĢč¯ããĸã¤ããĸã ã¨æããžã
čĻåã1ååēãããåŋ
čĻããããžãīŧčŋããĢããįļæŗãããå ´å
äģĨåã¯ããã§ã¯ãĒããŖãå ´åãæ°å¤ã¯ãčŋããã¨čĻãĒããžãã ããã¯é常ãĢãããžãããã
ãããåŊŧããĢåŊąéŋãä¸ããã¨ããčĒ°ãããããĢã¤ããĻįĨãŖãĻããžãã
ããã§į§ããĄãč°čĢããĻãããã¨ãĢã¤ããĻããããããŽčĒŦæãåŋ
čĻã ã¨æããžãã math.isclose
éãã¯2ã¤ãããžãã
atol
åĨãŽãããŠãĢãrtol
åĨãŽåŽįžŠæåãŽåéĄãĢã¤ããĻã¯ã `math.iscloseã¨ã¯į°ãĒãããŽã¨ããĻææ¸åããäģĨå¤ãĢãäŊãã§ããĒãã¨æããžãã
2įĒįŽãŽåéĄã¯ããããŠãĢãã§False
č¨åŽãããĻããsymmetric
åŧæ°ãčŋŊå ãããã¨ã§æãããäŋŽæŖãããã¨æããžãã ããã§ããããĨãĄãŗããĢæ¸ãčžŧããã¨ãã§ããžã_ " np.isclose(x, y, symmetric=True, atol=0)
ã¯math.isclose(x, y)
" _ãŽãã¯ããĢåãããããŧã¸ã§ãŗã§ãããį§ãĢã¯ãããč§Ŗæąēãããã¨ããĻããããã§ãã
ããããã3ã¤ãŽãĒããˇã§ãŗããããžãã
isclose
ãåŧãŗåēããã¨ãéæ¨åĨ¨ãĢããčĻåãĒãã§å¤ãåäŊãååžãããããĢãĻãŧãļãŧãĢisclose(..., symmetric=False)
ãæ¸ãčžŧããããĢåŧˇåļããžãīŧ allclose
ãĢã¤ããĻãåæ§ã§ãīŧã ããã¯ããžãå¤ããŽãŗãŧããĢãããããĒãã¨æããžãããįĩæã¯ããžãčĒãŋãĢããã大ããĒåŠįã¯ãããžããã assert_close
ã¯ãå
é¨ã§isclose(..., symmetric=False)
ãåŧãŗåēããããĢå¤æ´ããããããããŽãĻãŧãļãŧã¯åŊąéŋãåããžãããsymmetric
ã¸ãŽassert_close
symmetric
åŧæ°ãåŋ
čĻã§ãã ããã¯ä¸æĩã§å¤§čĻæ¨ĄãĒč§Ŗį´ãĢãĒããžãããããŽããĄããĒããˇã§ãŗ1ã¯åéĄãĒãã¨æããžãããæŽãã¯æˇˇäšąããã䞥å¤ãŽããããŽãŽãããĢã¯čãããžããã
įˇ¨éīŧ2ã¯ãåäŊãå¤åããå ´åãĢãŽãŋčĻåãįēããããå ´åãĢč¨ąåŽšãããå¯čŊæ§ãããããã¤ãēãã¯ãããĢå°ãĒããĒããžãã
@ eric-wieser 3ã¤įŽãŽéãããããžããããã¯ã atol
ã¨rtol
ãįĩãŋåãããæšæŗã§ãã īŧ math.isclose
ã¯max
ã numpy.isclose
ã¯+
īŧã ã¤ãžãã atol
ãžãã¯rtol
ããŧãã§ãĒãéãã math.isclose
åŧãŗåēããnumpy.isclose
åŧãŗåēãã¨ä¸č´ãããä¸čŦįãĒæšæŗã¯ãããžããã
ãã ãããĻãŧãļãŧãĢ襨į¤ēãããAPIãčŋŊå ãã䞥å¤ã¯ãžã ãĒãã¨æããžãã
į§ã¯ãĒããˇã§ãŗ2ãĢčŗæã§ããã į§ã¯ãžã ããŽãĒããˇã§ãŗãĢčŗæ
numpyãčĒååãããããŽãæäžããã¨ããčŋŊå ãŽčĻåŽ
čĒåã§åŽčĄã§ãããĒããĄã¯ãŋãĒãŗã°ããŧãĢīŧentry_pointsãĢčŋŊå īŧ
ããããäŋŽæŖãããããŽæĸåãŽããã¸ã§ã¯ãã äģãŽäēēãč¨ãŖããã¨ãĢåēãĨããĻãããã¯
ããŽãĒããˇã§ãŗã¯äģãŽäēēãĢã¯åĨŊãžããžããã
į§ã¯ããã§ã¯ãĒãããĒããˇã§ãŗ3ãžãã¯4ãŽãããããĢčŗæãããã¨ã¯ãããžããã ãĢ
ãããĢãčĻåãåēããžã§éĸæ°ãŽåäŊãå¤æ´ãããã¨ãĢčŗæããžãã
å°ãĒãã¨ã4ã¤ãŽãĄã¸ãŖãŧãĒãĒãŧãšã§ãĒãĒãŧãšãããĻããžãã
äģãŽäēēããĒããˇã§ãŗ2īŧåŊŧããæãŖãĻããīŧãĢåæããĒãã¨äģŽåŽããã¨ãį§ã¯
ãĒããˇã§ãŗ1ãæ¯æããžãã ããããäģãŽäēēīŧįšãĢ@njsmithīŧã¯čŗæããĻããžãã
ããĒããããã§ä¸ãããĒããˇã§ãŗãŽããããã å°ãĒãã¨ããããį§ãŽčĒčã§ãã
@njsmithããã¯æŖãããããžããã ããŠã°ãäŊŋį¨ããĻéĸæ°ãŽåäŊãå¤æ´ã§ããžãã
į§ã¯ããŽ3įĒįŽãŽéããæãŽæŗĸãĢæããããã§ããžã_ "rtolã¯į°ãĒããžã" _
"" "
åŽéãĢåéĄãč§ŖæąēãããĻããįļæŗãããŖã¨æĸããĻããžãã
"" "
į§ã¯ããŧãããĢããĢãčŗããžãīŧãããäŊãæåŗãããŽãããããĒããŽã§ãį§ã¯ããããžãīŧããããšãã§ãã
įžå¨ãŽåŽčŖ ãĢã¯3ã¤ãŽãåéĄããããããã§ãã
1īŧ寞į§°ã§ã¯ãããžãã
2īŧatolã¯ããŧãã¨æ¯čŧããĒããĻãįĩæãĢåŊąéŋããžãīŧããã¯éŋããããžããīŧããč¨ąåŽščĒ¤åˇŽãį´2åãĢåšæįãĢå¤æ´ããžããatolã大ããå ´åã¯ãããäģĨä¸ãĢãĒããžãã大ãããŽå¤ã
3īŧatolã¯ãããŠãĢãã§ã¯ãŧãäģĨå¤ã§ã-ããã¯īŧįšãĢ严æšãčŋŊå ããįžå¨ãŽãĸãĢã´ãĒãēã ã§ã¯īŧæ大ãŽåéĄã ã¨æããžããããšããĢåæ ŧãããŽã¯é常ãĢį°Ąåã§ãããããã§ã¯ãĒããã¨ããããããžããå°ãæ æ°ã§ã-ãããŠãĢããŽč¨ąåŽšå¤ã§ããšããäŊæããžããåæ ŧããå ´åã¯ãåŽäēããã¨æããžãã īŧããããŠãŽãããĢæŠčŊããããįč§Ŗããã¨ããį§ã¯yãŗãŧããĢæģããDIDã¯ããããŽããã¤ããčĻã¤ããžãã-ããŖã¨īŧ
ããŽãšãŦãããŽčĒ°ããããæŦĄãŽå ´åãĢäŊãåéĄãįēįããå¯čŊæ§ããããžãã
iscloseīŧ1e-200ã0.0īŧ
ãããŠãĢãã§Falseãčŋããžããã į§ã¯åæããžãã-ã¯ããããã¯éŠããšããã¨ã§ãããããã¯ãĻãŧãļãŧãĢäŊãčĩˇããŖãĻãããŽããčããããã§ãããããįžå¨ãŽåŽčŖ ã¯īŧäžãã°īŧįĩæãĢãĒããžãīŧ
[8]ãŽå ´åīŧnp.iscloseīŧ1e-20ã1e-10īŧ
Out [8]īŧTrue
æŦåŊãĢīŧ 1ã¤ã¯MAGNITUDEãŽ10æĄãäģããã大ãããTrueãĢæģããžãã????
į§ãŽãã¤ãŗãã¯ãatolããŧãäģĨå¤ãŽå ´åããŧãã¨æ¯čŧããä¸čŦįãĒãąãŧãšã§ã¯ãããããããģãŠéŠããšãįĩæã¯åžãããžããããå°ããæ°ã§äŊæĨããå ´åã¯ã¯ãããĢåąéēã§ééãŖãįĩæãĢãĒããžãīŧå°ããã¨åŽéãĢã¯1æĄæĒæēã§ãã
ãžãã1e8ãã大ãããĒãŠãå¤æ°ãåĻįããĻããå ´åã¯ããããŠãĢããŽatolãããä¸éŠåã§ãã
ãžããīŧ2īŧã¨įĩãŋåãããã¨ããããŠãĢããŽatolãéŠããšãæšæŗã§į¸å¯žč¨ąåŽščĒ¤åˇŽããšããå°įĄããĢããå¯čŊæ§ããããã¨ãæåŗããžãã
ã¤ãžããããããããã¯ãã°ã§ã¯ãĒãããåŖãããããŽã§ããããžããããããĒãæéŠã§ã¯ãĒããŽã§ãããč¯ãåŽčŖ ãĢé˛ãæšæŗãããã¨ããã§ãããã
į§ã¯ããŠã°ãĸãããŧããåĨŊãã§ããããį§ã¯čããå¤ããĻããã¨æããžã-åéĄã¯ããããåģæĸããããæįšã§ãããŠãĢããŽããŠã°ãå¤æ´ããĒãéãããģã¨ããŠããšãĻãŽäēēããå¤ãããĸãĢã´ãĒãēã ãäŊŋį¨ãããã¨ãĢãĒãã¨ãããã¨ã§ããģãŧæ°¸é ãĢã ãããĻããããããããéæ¨åĨ¨ãĢã§ããĒãįįąãĢã¤ããĻã¯ãå¤ããŽč¯ãč°čĢããããžããã
ããããŖãĻãæ°ããååãŽæ°ããéĸæ°ãåŋ čĻãĢãĒãå¯čŊæ§ããããžãã äēēã ãĢæ°ããããŽãäŊŋį¨ãããããĢå§ãããããĨãĄãŗããčŋŊå ããããäēēã ãæ°ããããŽãäŊŋį¨ããã¨ããĢčĻåãčŋŊå ããããããã¨ãã§ããžãããčĒ°ããŽãŗãŧããåŖããã¨ã¯æąēããĻãããžããã
čĒ°ããæ°ããéĸæ°ãŽč¯ãååãŽãĸã¤ããĸãæãŖãĻããžãã????
ããļãnp.math.iscloseã¨åéīŧ įĨããžããã
ãããĢããã np.remainder
éããč§Ŗæąēããã from numpy import math
ãäŊŋį¨ããĻãŗãŧããį°ĄåãĢãã¯ããĢåãããã¨ãã§ããžãã
į§ã¯æŦĄãŽãããĢãĒããžããŽã§ã +1
ãŽnp.math
ãĸã¸ãĨãŧãĢ
10åš´éããŽãããĢæŠčŊããĻããäģãŽéĸæ°ã¨ã¯ããããĢį°ãĒãåäŊã§æ°ããéĸæ°ãå°å Ĩãããã¨ã¯ãä¸čŦįãĢé常ãĢæĒãčãã§ãã ããŽå ´åããããĨãĄãŗãã§éŠåãĢč§Ŗæąēã§ããĒãåéĄã¯åŽéãĢã¯ãããģãŠå¤ããããžããã ããããŖãĻãæ°ããéĸæ°ã§ã¯-1ã§ãã ãããĻããžãŖããæ°ãããĩããĸã¸ãĨãŧãĢã§ã¯ééããĒã-1ã§ãã
æŦåŊãĢīŧ 1ã¤ã¯MAGNITUDEãŽ10æĄãäģããã大ãããTrueãĢæģããžãã????
ããĒããŽæåž ãįãåŊãã¯åŽå ¨ãĢæčãĢäžåããžãã ããã[0ã1īŧãŽéŖįļåå¸ããåžãããæ°å¤ãŽå ´åãããã§ããããããTrueãæåž ããã§ãããã ãĻãŧãļãŧã¯ãįĩļ寞/į¸å¯žå ŦåˇŽã¨éĸæ°ãåŽéãĢäŊãããããæŦåŊãĢįč§Ŗããåŋ čĻããããžããããããããĨãĄãŗããŽįŽįã§ãã
symmetric_isclose()
ã¯å°ãéˇãã§ãããį§ãŽįŽãĢã¯ä¸åŋĢã§ã¯ãããžããã
2017åš´12æ10æĨååž8æ9åãRalfGommersãŽ[email protected]ã¯æŦĄãŽãããĢæ¸ããĻããžãã
äģã¨ã¯åäŊãããããĢį°ãĒãæ°æŠčŊãŽãį´šäģ
10åš´éããŽãããĢæŠčŊããĻããæŠčŊã¯ãä¸čŦįãĢé常ãĢ貧åŧąã§ã
čãã
į§ããããåĨŊãã§ã¯ãããžããããå¤æ´ãå ããĻäēēã
ãŽãŗãŧããåŖããŽã¯ããŖã¨æĒããã¨ã§ãã
åį´ãĒããŽäģĨå¤ãĢãnumpyãæšåããĒãã¨ããčãã¯ãããžããīŧ
ããŽå ´åãååãĢã§ããĒãåéĄã¯åŽéãĢã¯ããžããããžããã
ãããĨãĄãŗãã§č§Ŗæąēããžããã
į§ã¯åæããžããâãããŠãĢãã¯éčĻã§ãâããããã
ãããĻãį§ã¯ããĒããĢä¸ãããããĢããŠãĄãŧãŋãčĒŋæ´ããæšæŗã¯ãĒãã¨æããžã
寞į§°æ¯čŧã
ãããĻããžãŖããæ°ãããĩããĸã¸ãĨãŧãĢã§ã¯ééããĒã-1ã§ãã
į§ãã numpyãŽãĒãæ°åĻãĸã¸ãĨãŧãĢãĢäģãŽããŽãããå ´å
äžŋåŠãĒåįãŽããŽããããã¯numpyãŽååįŠēéãĢčŋŊå ã§ããžã
äģãŽããšãĻãŽãããĢã
æŦåŊãĢīŧ 1ã¤ã¯äģããã大ããMAGNITUDEãŽ10æĄã§ãããæģãŖãĻããžã
æŦåŊ????
ããĒããŽæåž ãįãåŊãã¯åŽå ¨ãĢæčãĢäžåããžãã
æŖįĸēãĢâãããatolãĢãåįįãĒããããŠãĢãããĒãįįąã§ãã
ããã[0ã1īŧãŽéŖįļåå¸ããæĨãæ°ãŽå ´å
ããã§ããããããTrueãæåž
ããã§ãããã
ããããiscloseã¯į¸å¯žįãĒæ¯čŧã§ããã¨åŽŖäŧãããĻããžãâãããĻããã§ã¯
į¸å¯žæ§ã¯åŽå
¨ãĢæ´ãæĩãããĻããžãįĩļ寞įãĒæ¯čŧã§ãã
ãĻãŧãļãŧããããĢã¤ããĻčããåŋ
čĻã¯ãããžããã
ãããį§ãŽčĻįšã§ã-ãããŠãĢãã¯ããĒããããĒããæåž
ããå ´åãĢãŽãŋéŠåã§ã
å¤ã¯1æĄãĢãĒããžããä¸čŦįãĒãąãŧãšã§ãããįĸēããĢããã§ã¯ãããžããã
ãĻãããŧãĩãĢã
ããã¯ãŠãĄããæĒããã¨ãããã¨ãĢãĒããžãâåŊé°æ§ãžãã¯åŊéŊæ§ã
ãžããããšããŽä¸čŦįãĒäŊŋį¨äžã§ã¯ãčĒ¤æ¤įĨã¯ã¯ãããĢæĒåããžãã
īŧã¤ãžããããšãã§ã¯ãĒãããšããĢåæ ŧããīŧ
ãĻãŧãļãŧã¯ãįĩļ寞/į¸å¯žå
ŦåˇŽã¨äŊãæŦåŊãĢįč§Ŗããåŋ
čĻããããžã
éĸæ°ã¯åŽéãĢčĄããžãã
įĩļ寞ãĢ-ããããéĸæ°ãĢã¯åĻĨåŊãĒãããŠãĢãã¨
įč§Ŗããããå
įĸãĒãĸãĢã´ãĒãēã ã
į§ã¯ãããĨãĄãŗããæšåããæŠčŊãããŽãžãžãĢããĻããåžåããããžãã 寞į§°æ§ãŽæŦ åĻã¯ããiscloseīŧaãbīŧã¯ãaãbãĢčŋããã¨ãæåŗããžãããæĩŽåå°æ°įšãŽįĩļ寞į˛žåēĻãå¤åãããããbãaãĢčŋãã¨ã¯éããžãããããšãã§ã¯ã bã¯æåž ãããįĩæã§ãããaã¯åŽéãŽįĩæã§ããåŋ čĻããããžããã ããã¯ããšããĢã¨ãŖãĻæåŗããããã¨ãĢæŗ¨æããĻãã ããã寞į§°éĸæ°ãŽå ´åã¯ãåŽéãĢã¯æŖåŊåãããŽãå°ãč¤éã§ãã é¤įŽãåĢãį¸å¯žčĒ¤åˇŽã¯å¯žį§°įã§ã¯ãããžããã
į§ããããåĨŊãã§ã¯ãããžããããå¤æ´ãå ããĻäēēã ãŽãŗãŧããåŖããŽã¯ããŖã¨æĒããã¨ã§ãã åį´ãĒããŽäģĨå¤ãĢãnumpyãæšåããĒãã¨ããčãã¯ãããžããīŧ
ããã§ã¯ãæ°ããéĸæ°ãčŋŊå ããæšãæ°ããéĸæ°ãčŋŊå ããĒããããåĒããĻããã¨ãã䞥å¤å¤æããã§ãĢééããĻããžãã ããã¯į§čĻã§ã¯ãããžããã 3ã¤ãŽãĒããˇã§ãŗīŧ
2ã¯å
¨äŊįãĢ3ãããč¯ãé¸æã§ããããããŖãĻããããnumpyããããč¯ããããŽãĢããžãã ãžããããŽatol / rtolã¯åä¸ãŽéĸæ°ãĢéåŽãããĒããã¨ãįĄčĻããĻãããŽã§ãæŦĄã¯äŊãããžããīŧæ°ãããĻå°ããåĒããã assert_allclose
īŧ ãããĢããããããĨãĄãŗããŽãŋãŽå ´åããããĢæįĸēãĢãĒããžãã
ããã¯é常ãĢæˇąåģãĒæŦ éĨã§ããåēæŦįãĢããŗãŧããããšããããŗãŧããĢã¯ãã°ããããžã...č¯ããããžããã numpy.iscloseã¨ãããŠãĢããŽatolã§ããšããããããŽãæãĢéäŋĄããžããīŧ į§ã¯ããčããžã...ãããĻããããããããŽčŊã¨ãįŠ´ããããĨãĄãŗãã§įŽįĢãããåŋ
čĻãããįįąã§ãã
ã¨ã¤ãĒãĸãšéĸæ°ãčŋŊå ããã¨ããĻãŧãļãŧãĢåŧˇåļãããĒãéãīŧįēįããĒãéãīŧããŗãŧãããŧãšãäšąéãĢãĒããžãã
į§ã¯å¯žį§°æ§ããã¤ããŧã§ãããã¨ãĢåæããžãããããã§ãäŋŽæŖããåŋ čĻããããžãã ããŽãžãžãĢããĻããã¨ããĻãŧãļãŧãåŽéãŽčŊã¨ãįŠ´ããæ°ããããå¯čŊæ§ããããžãã
@rgommersã¯æ¸ããīŧ
"" "
ããã§ã¯ãæ°ããéĸæ°ãčŋŊå ããæšãæ°ããéĸæ°ãčŋŊå ããĒããããåĒããĻããã¨ãã䞥å¤å¤æããã§ãĢééããĻããžãã ããã¯į§čĻã§ã¯ãããžããã
"" "
ããĻãį§ã¯math.isclose
ãĢã¤ããĻčããč°čĢãããã¨ãĢå¤ããŽæéãč˛ģãããžããããããĻį§ããĄã¯ã¨ãããåäģãĒåŽčŖ
ãčĻããã¨ããå§ããžããã ããã§ããããã§ããį§ã¯ãĸãããŧããããč¯ãã¨æããžãã ãããĻãããŽč°čĢãããããã¯ãģãŧãŗãŗãģãŗãĩãšã ã¨æããžããã
ãããĻãããč¯ããĸãĢã´ãĒãēã /ã¤ãŗãŋãŧãã§ãŧãšãnumpyãĢåãå Ĩãããã¨ã§ãããč¯ããĒããžãã
ãããããå¤ãīŧããããããéŠåãĢææ¸åãããīŧéĸæ°ãããŽãžãžãĢããĻããããããå¤ãéĸæ°ã¨æ°ããéĸæ°ãŽä¸ĄæšãnumpyãĢåĢããæšãč¯ãããã§ã¯ãĒããã¨ãæåŗããžãã įĸēããĢãããã¯åŽå ¨ãĢæåšãĒãã¤ãŗãã§ãããį§ã¯ããŽč°čĢããããã¨ããĻããžããããããĻã10åš´éããŽãããĢæŠčŊããĻããäģãŽéĸæ°ã¨ããããĢį°ãĒãåäŊã§æ°ããéĸæ°ãå°å Ĩãããã¨ã¯ä¸čŦįãĢé常ãĢæĒãčãã§ããã¨ããäģĨåãŽãŗãĄãŗãč°čĢãįˇ ããããŖããããĢčĻãã-į§ãŽãã¤ãŗãã¯ãæ°ããæšæŗãããã ããŽäžĄå¤ãããããããååãĢåĒããĻãããå ´åã ã¨ãããã¨ã§ãã į§ããĄãæãããĢãŗãŗãģãŗãĩãšãæãŖãĻããĒããŽã¯ãããŽįšåŽãŽãĒããˇã§ãŗããããč¯ããããŠããã§ã¯ãĒãããååãĢč¯ããããŠããã§ãã
ãĄãĒãŋãĢãåäēēįãĢã¯å¤ãã䞥å¤ãããã¨ã¯æãŖãĻããžãããã芹ãåãããã¨æããžãã
ããã§éčĻãĒãŽã¯ãį§ãŽå´ãŽããã¤ããŽäģŽåŽã§ãã ããããæŖããããŠãããįĸēåŽãĢįĨããã¨ãã§ããããŠããã¯ããããžããããæŦĄãŽãããĢãĒããžãã
1īŧnp.iscloseīŧīŧãŽæ大ãŽäŊŋį¨æŗã¯ããšãã§ã-ããĒããŽįãã¯ããĒããæåž ããããŽãĢååčŋãã§ããīŧ -ããã¯ãnp.assert_all_closeãäģããĻããžãã¯ããį´æĨįãĢãpytestããšãã§ããžãã¯...
2īŧãģã¨ããŠãŽäēēã¯ããģã¨ããŠãŽå ´åãåŗå¯ãĒæĩŽåå°æ°įšã¨ãŠãŧåæãŽãããĒãã¨ãããĻãįãããŠãã ãč¯ãã¨æåž ãããããå¤æããžããã ããããåŊŧãã¯å¤ãčŠĻããå¤ąæããå ´åã¯įĩæãčĻãĻããããæŦåŊãĢã¨ãŠãŧã§ããããŠããããžãã¯ããšããŽč¨ąåŽšį¯å˛ãčĒŋæ´ããåŋ čĻãããããŠãããå¤æããžãã
3īŧå¤ããŽäēēã¯ãå¤ããŽå ´åãīŧ2īŧãŽãããģãšããããŠãĢããŽč¨ąåŽšå¤ã§éå§ããããšããå¤ąæããå ´åãĢãŽãŋč¨ąåŽšå¤ãŽčĒŋæ´ãæ¤č¨ããžãã
4īŧäēēã ã¯ãããĨãĄãŗããčĒãžãĒãīŧæåãŽãããããŠãŽãããĢåŧãļãããŽæŽĩéãčļ ããĻīŧ-å°ãĒãã¨ãæˇˇäšąããčĄåãčĻã¤ãããžã§ã¯ãæˇˇäšąãč§ŖæļãããããĢäŊããåŽéãĢãŠãŽãããĢæŠčŊããããįč§Ŗãããã¨ãããããããžããã ããããīŧ3īŧãåį §ããĻãã ãã-ããšããå¤ąæããĒãå ´åãåŊŧãã¯įįąãįč§ŖãããããĢãããĨãĄãŗããčĻãĢčĄããã¨ãįĨããžããã
ãããããšãĻãããmath.iscloseãŽãããĒFPčŋæĨæ§ããšããčĄãã¨numpyãŽæšããåĒããĻãããã¨ããįĩčĢãĢčŗããžãã
ãããĻããĒãããč¯ããããĨãĄãŗããį´ æ´ããããĸã¤ããĸã§ãããŽãĢãååã§ã¯ãĒããŽãã
ããļãį§ã¯åŽå ¨ãĢééãŖãĻããĻããģã¨ããŠãŽäēēã¯ãããĨãĄãŗããæŗ¨ææˇąãčĒãŋããģã¨ããŠãŽå ´åãåéĄãĢ寞ããĻrtolã¨atolãŽä¸Ąæšãæ éãĢé¸æããžã-ããããį§ããį§ãŽããŧã ãŽ6äēēãŽäēēã ããį§ãããããŽåéĄãčĒčããĻããžãã
īŧbikeshed īŧīŧãããŧãããã¯ããžããããžããã§ãã-æ°ãŽåŠããįĩĩæåã¯ãããžããīŧ
å¤årelatively_close
ããžãã¯rel_close
īŧ
čŋŊå ãŽãæĨŊãããããīŧassert_allcloseã¯åŽéãĢã¯atol = 0ãäŊŋį¨ããžã
ãããŠãĢãã äŋŽæŖã§ããããŠãããč°čĢããĻããåĨãŽãšãŦããå
¨äŊããŠãããĢãããžã
ããŽįįžã īŧį§ãŽéģ芹ã§ã¯į°ĄåãĢčĻã¤ãããã¨ãã§ããžãããīŧ
2017åš´12æ11æĨ14:58ããChrisBarkerã [email protected]ã¯æŦĄãŽãããĢæ¸ããĻããžãã
@rgommers https://github.com/rgommersãŽæ¸ãčžŧãŋīŧ
"" "
ããĒãã¯ãã§ãĢããã§ããĒããŽæ°ããéĸæ°ãčŋŊå ããã¨ãã䞥å¤å¤æãééããĻããžã
æ°ããæŠčŊããĒãããã¯ãžãã§ãã ããã¯į§čĻã§ã¯ãããžããã
"" "
ããĻãį§ã¯å¤ããŽæéãčããč°čĢããžãã
math.iscloseããããĻį§ããĄã¯numpyãŽåŽčŖ ãčĻããã¨ããå§ããžãã
ã¨ãããã ããã§ããããã§ããį§ã¯ãĸãããŧããããč¯ãã¨æããžãã ãããĻį§ã¯æãŖã
ããŽč°čĢãããããã¯ãģã¨ããŠãŗãŗãģãŗãĩãšã§ããããããĻãããč¯ããĸãĢã´ãĒãēã /ã¤ãŗãŋãŧãã§ãŧãšãnumpyãĢåãå Ĩãããã¨ã§ãããč¯ããĒããžãã
ããããããĒãã¯ãå¤ãããŽã¨æ°ããããŽãŽä¸ĄæšãæãŖãĻãããã¨ãæåŗããžã
numpyã¯ãåãĢå¤ãããŽãæŽããããåĒããĻããããã§ã¯ãããžããīŧããããããč¯ã
ææ¸åãããīŧããã§æŠčŊããžãã įĸēããĢãããã¯åŽå ¨ãĢæåšãĒãã¤ãŗãã§ãããį§ã¯
ããŽč°čĢããããã¨ããã¨ãåãŽãŗãĄãŗãã¯ãį´šäģ
äģãŽéĸæ°ã¨ã¯åäŊãããããĢį°ãĒãæ°ããéĸæ°
10åš´éããŽãããĢæŠčŊããĻãããã¨ã¯ãä¸čŦįãĢé常ãĢ貧åŧąãĒčãã§ããã
č°čĢãįˇ ããããŖããããĢčĻãã-į§ãŽãã¤ãŗãã¯ãæ°ããæšæŗã
ããã ããŽäžĄå¤ãããããããååãĢč¯ããã į§ããĄãæãããĢæãŖãĻããĒãããŽ
ãŗãŗãģãŗãĩãšã¯ãããŽįšåŽãŽãĒããˇã§ãŗããååãĢåĒããĻãããããŠããã§ããã
ããããããč¯ããããŠããããĄãĒãŋãĢãį§ã¯åäēēįãĢããã䞥å¤ãããã¨čĒåčĒčēĢãĢįĸēäŋĄããĻããžãã
å¤åããžããã芹ãåãããã¨æããžããããã§éčĻãĒãŽã¯ãį§ãŽå´ãŽããã¤ããŽäģŽåŽã§ãã ã§ãããããããĒã
ããããæŖããããŠãããįĸēåŽãĢįĨãŖãĻããžãããīŧ1.1ã
np.iscloseīŧīŧãŽæ大ãŽį¨éã¯ããšãã§ã-ããĒããŽįãã§ã
ããĒããæåž ããããŽãĢååčŋãã§ããīŧ -ããã¯np.assert_all_closeįĩįąããžãã¯
ããį´æĨįãĢãpytestããšãã§ããžãã¯....
2.2ããģã¨ããŠãŽäēēã¯ããģã¨ããŠãŽå ´åãåŗæ ŧãĒãã¨ãããžãã
įãããŠãã ãč¯ãããå¤æãããããŽæĩŽåå°æ°įšã¨ãŠãŧåæ
ãĒãã¨äēæŗãããžãã ããããåŊŧãã¯å¤ãčŠĻãããããå¤ąæããå ´åãåŊŧãã¯
įĩæãåēãããããæŦåŊãĢã¨ãŠãŧã§ããããŠããããžãã¯tehyãčĒŋæ´ããåŋ čĻãããããŠãããå¤æããžã
ããšããŽč¨ąåŽšį¯å˛ã
ããã¯ããĸããŧãĢã¨ãĸããĢããŠããã¯ãããģãŠéčĻã§ã¯ãĒããã¨ãæåŗããžã
rtolãããŧã¸ãããããšãã寞į§°ã§ããããŠãããå¤ããŽäēēã¯ãå¤ããŽå ´åãīŧ2īŧãŽãããģãšãæŦĄãŽãããĢéå§ããžãã
ãããŠãĢããŽč¨ąåŽšå¤ã§ãããããšããå¤ąæããå ´åãĢãŽãŋč¨ąåŽšå¤ãŽčĒŋæ´ãįĸēčĒããžããããã¯ããããŠãĢããŽatolãæã¤ãã¨ã¯é常ãĢåąéēã§ãããã¨ãæåŗããžã-ããšã
ãããééãããã¨ã¯æŦåŊãĢæĒããã¨ã§ããäēēã ã¯ãããĨãĄãŗããčĒãŋãžããīŧæåãŽãããããŠãŽãããĢåŧãļãããčļ ããĻ
ãšããŧã¸īŧ-å°ãĒãã¨ãåŊŧããæˇˇäšąããčĄåãčĻã¤ãããžã§ã¯ããããĻåŊŧãã¯
å ĨãŖãĻãäŊããåŽéãĢãŠãŽãããĢæŠčŊããĻč§ŖæąēãããŽããįč§Ŗãããã¨ãããããããžãã
æˇˇäšąã ããããīŧ3īŧãåį §ããĻãã ãã-ããšããå¤ąæããĒãå ´åãåŊŧãã¯
įįąãįč§ŖãããããĢãããĨãĄãŗããčĻãĻãã ãããããã¯ããšãĻãnumpyããããč¯ããã¨ããįĩčĢãĢį§ãå°ããžã
ããå¤ããŽmath.iscloseãŽãããĒFPčŋæĨããšãããããĻããĒãããč¯ããããĨãĄãŗããį´ æ´ããããĸã¤ããĸã§ãããŽãĢãååã§ã¯ãĒããŽãã
å¤åį§ã¯åŽå ¨ãĢééãŖãĻããžãããããĻãģã¨ããŠãŽäēēã¯æŗ¨ææˇąããããĨãĄãŗããčĒãã§
ãģã¨ããŠãŽå ´åãåéĄãĢ寞ããĻrtolã¨atolãŽä¸Ąæšãæ éãĢé¸æããĻãã ãã-
ããããį§ããį§ãŽããŧã ãŽ5ããŧãšãŽäēēã ããį§ããããããžã§ãããããĻããžããã
ããããŽåéĄãĢæ°ãĨããžãããīŧbikeshed īŧīŧãããŧãããã¯ããžããããžããã§ãã-æ°ãŽåŠããįĩĩæåã¯ãããžããīŧ
å¤åæ¯čŧį_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ãäŊŋį¨ããžãã
čåŗæˇąã-ããã¯į§ãæ°åãč¯ããĒããŽã§ãã
ããã¯ã2ã¤ãŽéããĢã¤ããĻãŽéåģãŽč°čĢãŽãŧãããã¨ããč¨æļãåŧãŗæģããĻããžã-ããã¯å¯ä¸ãŽããŽã§ãããīŧ
ãããĢãĄã¯ã
į§ãŽthermoãfluidsããããŗhtãŠã¤ããŠãĒã¯ãnumpyãŽassert_allcloseãåēį¯å˛ãĢäŊŋį¨ããĻãããããéĸéŖããããã¤ããŽčããããã§å
ąæããžãã ããŽãšãŦããã¯ãåäŊãŽéããé常ãĢææ
ŽããšãããŽãĢčĻããžãã寞į§°æ§ãŽæŦ åĻãããããŠãĢããŽ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åPMã§ãããĩãã¨ãĢãģJ.ãšããš[email protected]
æ¸ããžããīŧ
ãŽã
ãããã§ãstatsmodelãŽäžã¯į§ãŽä¸ģåŧĩãããžãããĻãããã¨ãĢæŗ¨æããĻãã ãã
atolãŽãããŠãĢãâ0.0äģĨå¤ã¯åąéēã§ãã
ãããæ°åš´ãã¨ãĢįēįããã¨ããäēåŽã¯ãį§ããĄãããšãã§ãããã¨ãį¤ēããĻããžããīŧ
æåžãĢãããĢã¤ããĻäŊãããžããīŧ
å¤åããã§ãã ããã¯å°ããĒįŖč´
ã§ãããæã
ããããŽå°ããĒčŋˇæãčŋŊå ãããžã
æéãŽįĩéã¨ã¨ããĢä¸æããžãã
ãããĻãassert_allcloseãŽãããŠãĢãããŧããĢãĒãŖãĻãããã¨ãĢæēčļŗããĻããžãã
īŧããĒããããããĒããĻããããã¯č¨ąåŽšã§ãããĒããˇã§ãŗã§ããã¨ããį§ãŽä¸ģåŧĩãæ¯æããžã
ãããæč¯ãŽé¸æčĸã§ãããã¨ãĢåæããžãīŧį§ããĄãŽå¤ãã¯-ãããĻããŖã¨å¸¸ãĢ-ããã§ã¯ãããžãã
unittestãäŊŋį¨ãããããããšãã§np.all_closeãį´æĨäŊŋį¨ã§ããžãã
ã¯ãããŠãĢããå¤æ´ãå ããå ´åã¯ã3ã¤ããšãĻãå¤æ´ãããã¨æããžã
å¯æĨãĢéĸéŖããéĸæ°:-(ãããããããã¯į§ããĄãĢããããäŊãæŠäŧãä¸ããĻãããžã
ããä¸č˛Ģæ§ãŽãããããŧããšīŧ
py2-3ãŽį§ģčĄã¯ããžãããžãããŖãĻããžããããäŊããããšããã¨ããããžã
ããæįšã§ãããŧãįäģããĻã大ä¸å¤Ģãããŧã¸ã§ãŗãããã¨č¨ãŖã:-)
åĨãŽãĒããˇã§ãŗããããžããåŽéãĢis_close
ãatol=0
ãŽīŧåŽéãĢã¯ããč¯ãīŧæ°åĻããŧã¸ã§ãŗãĢį§ģåããžãããããŠãĢããNone
ãĢå¤æ´ãã atol=0
čŠĻããĻãã ããã ; ããšãĻãŽTrue
ãæģãŖãĻããå ´å; False
å ´åã¯ãæ¨æēãŽatol
åčŠĻčĄããįĩæãå¤æ´ãããå ´åã¯éæ¨åĨ¨ãŽčĻåãįēããžãīŧãããĻãå¤ããįĩæãčŋããžãīŧã
æ˛ãããã¨ãĢã寞į§°æ§ã¨atolãŽä¸ĄæšãåæãĢåŽčĄãããã¨ã¯ã§ããžãããããã¯ãããããį°ãĒãæšåãĢé˛ãããã§ãīŧã¤ãžãã常ãĢ严æšãŽãąãŧãšãåŽčĄããåŋ
čĻããããå°ãå¤ãããã§ãīŧã ããããį§ã¯å¯žį§°æ§ãŽæŦ åĻãããã¯ãããĢatol
ãããŠãĢããåĢãã§ã...
æŠčŊããĒãéããæŠčŊãå¤æ´ãããã¨ãĢčŗæããžããã
å¤ãåäŊãããĻããããŽãäŊŋį¨ã§ããžãã ãããĢã
åŽäēããå ´åãĢããŽå¤æ´ãčĄããããŽčĒåãĒããĄã¯ãŋãĒãŗã°ããŧãĢã ãããããã¯ããã§ã¯ãããžãã
äģã§ãããŧããĢãŽä¸ãĢã
py3kããŠãŗã¸ãˇã§ãŗã¯ãį§ããĄãåãŗæãã§ããããŽã§ã¯ãããžããã
ããŧãĢãĸããĢã§ã¯ãããžããã ã¯ãĒãŧãŗãĸããã1ã¤ãŽå¤§ããĒãĒãĒãŧãšãĢãžã¨ãããŽã¯č¯ããããžãã
IMOãĢãĸãããŧãããžãã
py2-3ãŽį§ģčĄã¯ããžãããžãããŖãĻããžããããããæįšã§ãããŧãã¯ãĒãŧãŗãĸããããĻã大ä¸å¤Ģãããŧã¸ã§ãŗãããã¨č¨ããããã¨ããããžã:-)
ãã ãįšåĨãĒããŧã¸ã§ãŗįĒåˇãå¤æ´ãĢOKãåŖããã¨ãã§ããžããã¨ããããŽä¸čŦįãĒčãæšãĢ寞åĻãããĢã¯īŧä¸čŦįãĒãĢãŧãĢã¯ãįãŋãŽč¨ąåŽšã§ããĒããŦããĢãåéŋæįĸēãĒį§ģčĄč¨įģããããžãå ´åãĢã¯ãããŧãã¯ãĒãŧãŗãĸããããĻã大ä¸å¤Ģã§ãããåŠįãæŖåŊåãããŽãĢååã§ããã¨ãããã¨ã§ããŗãšãã ããã§éčĻãĒãŽã¯ãããĢãŧãĢãĢåžãŖãããã§ã¯ãĒãããĻãŧãļãŧã¸ãŽåŊąéŋã§å¤æããåŋ čĻãããã¨ãããã¨ã§ãã īŧããĒããįŠēæŗãĢãĒããããŽãĒããį§ããĄã¯ããŗããã¸ãšãã§ã¯ãĒãįĩæä¸ģįžŠč ã§ããīŧããããŖãĻãįšåŽãŽããŧã¸ã§ãŗããããã¯įŠäēãåŖãããŽã§ããã¨åŽŖč¨ããå¯ä¸ãŽįįąã¯ããĻãŧãļãŧãįŠäēãåŽčŗĒįãĢæąããããããããŠããã§ãã åŖããå¤æ´ããžã¨ããĻããŧãĢãĸããããIMOãŽåŠįšã¯ãããããåå¨ããå ´åã¯ä¸čŦãĢãããã§ããåŖãããŗãŧãã¯åŖãããŗãŧãã§ãããã¨ãåå¨ããã¨ããĻããč˛ģį¨äžŋįåæãããããããããããĢå¤ãããã¨ã¯é常ãĢãžãã§ããã¯ã"ã
atolã¯ãããŠãĢãã§ã¯ãŧãäģĨå¤ã§ã-ããã¯īŧįšãĢ严æšãčŋŊå ããįžå¨ãŽãĸãĢã´ãĒãēã ã§ã¯īŧæ大ãŽåéĄã ã¨æããžããããšããĢåæ ŧãããŽã¯é常ãĢį°Ąåã§ãããåæ ŧããĒãã¯ãã§ããæ æ°-ãããŠãĢããŽč¨ąåŽšå¤ã§ããšããč¨čŋ°ããžããåæ ŧããå ´åã¯ãåŽäēããã¨čĻãĒããžãã īŧããããŠãŽãããĢæŠčŊããããįč§Ŗããã¨ããį§ã¯yãŗãŧããĢæģããDIDã¯ããããŽããã¤ããčĻã¤ããžãã-ããŖã¨īŧ
statsmodelãŽäžã¯ããããŠãĢããŽatolãĢã¤ããĻį§ãŽä¸ģåŧĩãããį¤ēããĻãããã¨ãĢæŗ¨æããĻãã ããã0.0äģĨå¤ãŽããŽã¯åąéēã§ãã [...]į§ããĄãŽå¤ãīŧãããĻ常ãĢīŧã¯unittestãäŊŋį¨ããĻããĒããããããšãã§į´æĨnp.all_closeãäŊŋį¨ããå¯čŊæ§ããããžãã
ãäģãŽãããąãŧã¸ã¨ãŽä¸č˛Ģæ§ãéĢãããããĢãĻãŧãļãŧãŗãŧããč§ŖčĒããåŋ čĻããããžããã¯ãč˛ģį¨äžŋįãŽãšãąãŧãĢã§ã¯ããžãåžįšããããžããã æšæŗãããčĒŦåžåããããã ãã§æˇˇäšąããį´æĨãĻãŧãļãŧãŗãŧãã§ãĩã¤ãŦãŗããã°ãĢã¤ãĒããããããĻæã ããããã¨ãč§Ŗæąēã§ãããããĒæšæŗã§æˇˇäšąããĻããĒãnumpyãŽå é¨įįžããããžããã į§čĒčēĢã¯ãžã æčĻãčŋ°ãšãĻããžããããããã§é˛æŠãéããããŽã§ããã°ããããį§ãæ¨é˛ããĻãããã¨ã§ãã
æŗ¨īŧ
ãããrtolãžãã¯atolãŽé¸æãĢã¤ããĻã¯ãããžãčããĻããžããã
atolãčŋŊå ãããã¨ã¯ããŖããĢãããžãã
-ããĄãããĄããã¨åã-
$ assert_allclose 13159ã1178ããããŗ4243ãããããåŧãŗåēããžãã
-ããĄãããĄããã¨åã-
æ°ãããã°ãããšããŽå¤ąæã¯čĻã¤ãããžããã§ããã
ãã
æå ąã§ãããassert_allcloseãŽatolãŽãããŠãĢãã¯ãŧãã§ãã ãããĻ
ãããįįąã§ã īŧ-īŧ
@njsmithã¯æ¸ããīŧ
ãäģãŽãããąãŧã¸ã¨ãŽä¸č˛Ģæ§ãéĢãããããĢããĻãŧãļãŧãŗãŧããåŖãåŋ čĻããããžãã
ããŽãšãŦãããŽčĒ°ãããããæ¯æããĻããã¨ã¯æããžããâį§ã¯įĸēäŋĄããĻããžããã čĒ°ããä¸ģåŧĩããĻããå¯ä¸ãŽä¸č˛Ģæ§ã¯ãéĸéŖããnumpyéĸæ°éãŽä¸č˛Ģæ§ã§ãã
ãnumpyãŽå é¨ãĢã¯ãæˇˇäšąãæãã ãã§ãĒãããĻãŧãļãŧãŗãŧããŽãĩã¤ãŦãŗããã°ãĢį´æĨã¤ãĒããæšæŗã§æˇˇäšąãæãä¸æ´åããããžãããããäŋŽæŖã§ããžããã
ãããį§ãå°ãĒãã¨ãä¸ģåŧĩããĻãããã¨ã§ãã ãããĻãį§ã¯äģãŽãģã¨ããŠã ã¨æããžãã
åéĄã¯ãæŦĄãŽããããããĒãã¨äŋŽæŖã§ããĒããã¨ã§ãã
ä¸äŊäēææ§ãį ´ããã¨ãããã¯ãéæ¨åĨ¨ãŽãĩã¤ã¯ãĢãããŖãĻãããããååãĢæˇąåģã§ããã¨ã¯čĒ°ãčããĻããĒãã¨æããžãã
ãžãã¯
æ°ããããŠã°ãžãã¯éĸæ°ãäŊæããžãã
æ°ããéĸæ°ã¯ãããčĄããããŽããã¯ãĒãŧãŗãĒæšæŗãĢãĒãã¨æããžãã å¤ããŗãŧãã¯åŋ čĻãĒéãå¤æ´ãããĒããžãžã§ãæ°ãããŗãŧãã¯æ°ããéĸæ°ãäŊŋį¨ã§ããæ¤į´ĸã¨įŊŽæīŧãžãã¯åŧãŗåēãã¨ããĻãŽããã¤ããŽã¤ãŗããŧãīŧãĢãããä¸åēĻãĢ1ã¤ãŽããĄã¤ãĢãį°ĄåãĢåãæŋãããã¨ãã§ããžãã
īŧį§ã¯ããĒããããĒããŽããšããŗãŧãã§ãĸãŗããŧããã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ããã¯ãããĢå°ãĒãã§ãã
įŦŦä¸ãĢãããŽčĻåã¯ä¸čŦįãĢã¯įåŽã§ã¯ãããžããã ãããŠãĢããŽatol
ã¯ã 1e-8
ããå°ããæ°å¤ããŧããĢįããããŽã¨ããĻæąãããå ´åãĢéŠããĻããžãã ããã¯į¸å¯žå
ŦåˇŽã§ã¯ä¸å¯čŊã§ããããŽãããįĩļ寞å
ŦåˇŽãåå¨ããžãã éãĢã 1e-8
ããå°ããæ°å¤ãæåŗãŽããããŽã¨ããĻæąãããå ´åã¯ããããŠãĢããŽatol
éŠåã§ã¯ãããžããã 1ã¤ãŽãĩã¤ãēã§ããšãĻãĢ寞åŋã§ããã¨ã¯éããžããã
ããããŖãĻã @ xoviatã¯ãæˇąãæŦæãæãŖãĻãããĒããŽä¸ģčĻŗįãĒįēč¨ãĢåŧˇãå寞ããžãã
...
assert_allclose
_ã¯æŖããåäŊã§ãīŧãžãã¯å°ãĒãã¨ããããĢååčŋãåäŊã§ãīŧã
įžå¨ãŽãããĨãĄãŗããŽåéĄã¯ã atol
ãäŊã§ããããčĒŦæãããŽãĢé常ãĢåĒããĻãããããĒããããĢãããŽããčĒŦæããĻããĒãããããĻãŧãļãŧããããŠãĢãå¤ããã¤å¤æ´ããããįč§Ŗã§ããĒãå¯čŊæ§ããããã¨ã§ãã ã
į§ã¯æŦĄãŽįˇãĢæ˛ŋãŖãĻäŊããææĄããžãīŧ
ããŧãäģĨå¤ãŽå°ããĒå¤ãatol
č¨åŽããã¨ããŧããĢé常ãĢčŋãæ°å¤ãåŽčŗĒįãĢãŧããĢįããããŽã¨ããĻæąããã¨ãã§ããžããããããŖãĻããããŠãĢãå¤ãŽatol
ã¯äŊŋį¨ãĢéŠããĒãå ´åããããžãããąãŧãšãé¸æatol
ãã大ããæ°ãããĢatol
ããĒããæåŗãŽããīŧãŧãã¨ã¯į°ãĒãīŧã§ãããã¨ãĢããŖãĻčæ
ŽããããããĻããå°ãĒãæ°atol
äŊŋį¨ããã¨ãįĄčĻã§ããã¨ãĢããŖãĻčããããĻããžãīŧãŧãã¨åãīŧãã
æåžãĢã isclose
ã¨allclose
ãŽdocstringãĢåããĄãĸãčŋŊå ããžãã
ãããį§ãŽææĄã§ãã ãããåããããããæŽãã
äšžæ¯ã
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()
[ãžãã¯äģãŽåå]ãčŋŊå ãããã¨ã§ãã æ°ããéĸæ°ã¯ãå°æĨãŽãŗãŧãã§äŊŋį¨ãããããŽãæ¨åĨ¨ãéĸæ°ã¨ããĻææ¸åãããžãã å°æĨãå¤ãčĻåãĢéæ¨åĨ¨ãŽčĻåãčŋŊå ãããã¨ã¯å¯čŊã§ãããįžæįšã§ã¯ããã¤ãēãããã ããŽäžĄå¤ãããã¨ã¯čĒ°ãčããĻããĒãããã§ãã
äē¤æãčĄããããĢãĒããĄã¯ãŋãĒãŗã°ããŧãĢãæ§į¯ãããã¨ãã§ããžãããããŽ1åãŽäŊŋį¨ã§čĒ°ããããčĄããŽã§ããããã
ãããĢãããåŊéĸã¯2ã¤ãŽé常ãĢããäŧŧãéĸæ°ãäŊæãããã10åš´éããŽãããĢæŠčŊããĻããäģãŽéĸæ°ã¨ã¯åäŊãããããĢį°ãĒãæ°ããéĸæ°ãå°å Ĩãããã¨ã¯ãä¸čŦãĢé常ãĢæĒãčãã§ããã
ããããĒåŠįãŽãããĢããã¯äžĄå¤ããããžããããããč¯ããããĨãĄãŗããæ´ããããã¯ããã§čĄãããžãīŧīŧ10214
į§ã¯ãžã 1ã¤ãŽčŗĒåãæŽãŖãĻããžãīŧ
@njsmithã¯æ¸ããīŧ
"" "
į§ããĄã¯ãã§ãĢæãŖãĻããžãīŧ
allclose
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])
vs 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īŧ...īŧããassert np.allcloseīŧ...īŧãĢå¤æ´ãããå¯čŊæ§ãããããĩã¤ãŦãŗããĢåŗãããįˇŠåãããžããããã¯æĒããã¨ã§ããã
ãžããĢį§ãŽãã¤ãŗã-čĒ°ããããšããĢãĸãĩãŧããäŊŋį¨ãããã¨ãæŗåŽãããŽã¯ãæĒãčããã§ãããããããŖãĻããããŠãĢããŽiscloseīŧīŧã¨allcloseīŧīŧãããšããĢéŠããĻããããŠããã¯éĸäŋãããžãã-įæŗįãĢã¯åŊŧãã¯įĸēããĢãããšãä¸įã
æ°ããããŽãčŋŊå ãããŽã¯å¤§ä¸å¤Ģã ã¨ãããã¨ã§ããīŧ
ãããããģãŧåįãŽããšãã襨įžãããããŽããããĢį°ãĒãæšæŗãŽå ¨äŊįãĒįŽĄįããã§ãĢãããã¨ãčããã¨ãæŽåŋĩãĒããããģã¨ããŠãŽãĻãŧãļãŧã¯ãžã æ°ãĨãããįč§Ŗããããããã¨ã¯ãããžãã-åĨãŽčŋŊå ã
į§ãæŗ¨æããžãīŧ
ããããŽãģã¨ããŠã¯ãĸãĩãŧãˇã§ãŗã§ããããĸãĩãŧãˇã§ãŗãŽæĨåĸã¯åäŊããšããĸãŧããã¯ããŖãŽå¯äŊį¨ã§ãã
į§ããĄãŽå¤ããäģãŽããšããĸãŧããã¯ããŖīŧäžīŧpytestīŧãĢį§ģčĄããã¨ããĸãĩãŧãˇã§ãŗãŽåŋ čĻæ§ããĒããĒããžãã
ãããã¯ããžããžãĸãĩãŧãã¨ããĻč¨čŋ°ãããĻããžãããAFAICTã¯ããããŽéĸæ°ãŽããšãĻããåŽéãĢã¯ããģãŧįãããã¨ããį°ãĒãåŽįžŠãã¨ãŗãŗãŧãããĻããžãã īŧį§ã¯æããžããããã¤ããŽåēåĨã¯é常ãĢãããžããĒãŽã§ãããããæŦįŠããŠããã¯ããããžãããīŧ
ãĸãĢã´ãĒãēã ããããŠãĢããŽå¤æ´īŧ
éæ¨åĨ¨æéã¨čĻåãããŖãĻããä¸äŊäēææ§ãŽåéĄãŽãããĢæŽéįãĢæåĻãããžãã-ããããŽéĸæ°ã¯ããšãã§åēãäŊŋį¨ãããĻãããããå°ãĒãã¨ã大ããĒčŋˇæãĢãĒããžãã
į§ã¯ãããããŽãããĢåŽå ¨ãĢã¯č¨ããžããã į§ãĢã¨ãŖãĻãããã¯ãŗãšããæŖåŊåãããŽãĢååãĒåŠįãããããå¯čŊæ§ãããå¯ä¸ãŽãĸãããŧãã§ãã į§ã¯åŊŧããããããã¨č¨ãŖãĻãããŽã§
ãã¨ãã°ãčĒ°ããįžããĻã3ã¤ãŽå¤§ããĒããã¸ã§ã¯ãã§ææĄãããå¤æ´ãčŠĻããã¨ããã10,000åãŽããšããŽããĄ12åãŽčŋŊå ãŽå¤ąæãĢã¤ãĒãããããŽããĄ8åã¯å¤ãããŽãĢããŖãĻé ãããĻããåŽéãŽãĩã¤ãŦãŗããã°ã§ãããæĒããããŠãĢãã...ããã¯ããĒãčĒŦåžåãããã§ãããã įšãĢããã¯ãå¯žčąĄãįĩãŖãčĻåãčĄãæčĄįčŊåãããå ´åã§ãã åŽéãŽæ°åã¯ãããģãŠæåŠã§ã¯ãĒãã¨æããžãããčĒ°ãããã§ãã¯ãããžã§ã¯ãčĒ°ãįĨãŖãĻããžããã
2017åš´12æ18æĨæææĨååž3æ57åãããĩãã¨ãĢJ.ãšããš<
[email protected]>æ¸ãčžŧãŋīŧ
ããããį§ããĄã¯ãã§ãĢį§ããĄã
æŽåŋĩãĒããããģãŧįããããšãã襨įžããããããĢį°ãĒãæšæŗ
ãģã¨ããŠãŽãĻãŧãļãŧã¯ãžã æ°ãĨãããįč§Ŗãããããã¤ããã¯ãããžãã-åĨãŽčŋŊå ã
ããĻã1ã¤ãŽå¤§ããĒéãããããžã-ããããããŽã§ããããŽãããããčŋŊå ãããžãã
äŊãéãããããĻæĩŽåå°æ°įšãŽæ°ãžããã§ãããã
éããéčĻãĢãĒãå ´åããããžãã
æ°ããį¸å¯žčŋæĨéĸæ°ã¯æŦčŗĒįãĢåããã¨ãããžããã
ããããããč¯ããããĒããã ãããĻįŽæ¨ã¯ãæ°ããããŽãäŊŋį¨ãããã¨ãæ¨åĨ¨ãããã¨ã§ã
å¤ãããŽãŽäģŖãããĢīŧãããĻããããæįĩįãĢå¤ãããŽãéæ¨åĨ¨ãĢããīŧã
æŖį´ãĒã¨ãããããããĸã¤ããĸãŽčŗæãå寞ãã¯ããããžãããã
ãããã
ãã¨ãã°ãčĒ°ããįžããĻãææĄãããå¤æ´ã3ã¤ãŽå¤§ããĒããŽã§čŠĻããžãã
ããã¸ã§ã¯ãããããĻããã¯10,000ãŽããšããŽããĄ12ãŽčŋŊå ãŽå¤ąæãĢã¤ãĒãããžããããããĻããããŽ
12ã8ã¯ãå¤ãæĒč ãĢããŖãĻé ãããĻããåŽéãŽãĩã¤ãŦãŗããã°ã§ãã
ãããŠãĢãã...ããã¯ããĒãčĒŦåžåãããã§ããããįšãĢããã¯
å¯žčąĄãįĩãŖãčĻåãčĄãæčĄįčŊåãããå ´åã
åŽéãŽæ°åã¯ãããģãŠæåŠã§ã¯ãĒãã¨æããžããã
čĒ°ãããã§ãã¯ããžããčĒ°ãįĨãŖãĻããžãããããŧããį§ãŽãŗãŧãããŧãšãĢã¯į´1500ãŽããšãããããžã-10,000ã§ã¯ãããžããããį§ã¯ãããä¸ããžã
ãˇã§ããã äģãĢäŊããĒããã°ãį§ã¯ãã°ãžãã¯č˛§åŧąãĒããšããčĻã¤ãããããããžããã ãžãã¯ããŖã¨åžã
åŽåŋīŧ
ãããŋããĒã
ååãããŽåéĄãĢééããåžãããã§ããŖã¤ã ãéŗ´ãããããŖãã
_å č˛Ŧäēé īŧãããŧãĢã§įĢäēãã¨åĢãŗãããããã§ãŗãšãĢæãčžŧãåã¯ãčĢįãĢã¤ããĻããžãčããĻããžããã§ããã æĨãããããããˇãĨãäŊãŖããŽãĒããčĻĒåãĢããĻãã ããã_
į§ãĢã¯ãããã¯ããšãĻãå¤å ¸įãĒãĸãŧããã¯ããŖ/č¨č¨ãŽãéļãå ãåĩãå ãããŽåéĄãã¤ãžããģããŗããŖã¯ãšã¨åŽčŖ ãŽåéĄãĢããäŧŧãĻããžãã ããšãĻãŽãã°ããŗãŧãå ãĢåå¨ããããã§ã¯ãĒãããģããŗããŖã¯ãšå ãĢåå¨ããå ´åããããžãã ããã¯ããĸãĢã´ãĒãēã ãĢæŦ éĨããããã¨ãįēčĻããããã ããĢåŽį§ãĢåŽčŖ ãããĻãããĸãĢã´ãĒãēã ã¨īŧããã¨ããĻãīŧãããģãŠéãã¯ãããžããããã°ã¯ãŗãŧããĢãĒãããĸãĢã´ãĒãēã ãĢãããžããããŠãĄããĢããĻããžã ãã°ã§ãã åēæŦįãĢãããŽč°čĢã¯ãããã°ã§ã¯ãĒããæŠčŊã§ãããã¨ããå¤å ¸įãĒã¸ã§ãŧã¯ãŽãããĢčãããžãã ããĄããããé¸æãã¯ããã ãã§ãããIMHOã¯é常ãįčĢįæ šæ ãŽįĩãããį¤ēããžãããģããŗããŖã¯ãšãåŽčŖ ããããžãžã§ãããããĢé¸æãããå ´åãåŽčŖ ã¯ããšãĻã¯ãŧãĢã§ãč°čĢãŽįĩããã§ãã
ã§ã¯ã isclose()
ãŽãæãžããããããŗ/ãžãã¯ãæåž
ãããããģããŗããŖã¯ãšã¨ã¯äŊã§ããããããčããã¨ããĻãŧãļãŧåŽįžŠãŽãģããŗããŖã¯ãšãĢ厚čĩĻãĒãåæãããã¨ãĢãĒããžããã¤ãžãããĻãŧãļãŧã¯ãģããŗããŖã¯ãšãåŽįžŠã§ããåŋ
čĻããããžãã ãéããããŽåŽįžŠã
ãããŠãĢããĢéĸããĻã¯ãããã¯æįĩįãĢãģããŗããŖã¯ãšãåŖããã¨ã¯ãããžããã ãã ããä¸éŠåãĒé¸æã¯åąéēã§ãã ãŧãäģĨå¤ãŽãããŠãĢããabs(a - b) == 0
å ´åãĢåĻĨåŊãĒåäŊãä¸ãããããĢé¸æãããå ´åãããã¯ééããĒãééãŖãč§ŖæąēįãŽãããĢčãããžãã ããŽįšåŽãŽįļæ
ã¯ãæåŗįãĢįšæŽãĒãąãŧãšã§ãããããįšæŽãĒãąãŧãšã§ããæšãããã§ãããã åˇŽåããŧããŽå ´åããéããããŽåŽįžŠãĢãå°åģãŋãĢåãé¨åąãã¯ãããžãããããã¯čĒåˇąåŽįžŠãŽãŗãŧããŧãšããŧãŗã§ããã¤ãžãããéãããã§ã¯ãĒãããæŖįĸēãã§ããããã§ããéãããã¯æŖįĸēãããŽį¸å¯žååˇŽã§ãã ã īŧ_æŗ¨īŧ_æĄäģļäģããŽįšåĨãĒãąãŧãˇãŗã°ã¯ããããŠãŧããŗãšãĢåŊąéŋãä¸ããå ´åã¨åŊąéŋãä¸ããĒãå ´åããããžããīŧ
+
vs max
max
ã§ã¯ãĒãsumãäŊŋį¨ããåŽčŖ
ãĢããã rel_tol
ã¨a_tol
ãŽæˇˇåãžãã¯ããˇãŖããĻã¤ãŗã°ãã¯ãä¸č¨ãŽéĸæ°ãŽãģããŗããŖã¯ãšãį ´åŖããžãã ãĻãŧãļãŧãŽãéããããŽåŽįžŠã¯ããį¸å¯žįãã¨ãįĩļ寞įããŽãģããŗããŖã¯ãšãåŖããããčĒæã§ã¯ãĒãæšæŗã§ãã¤ãŗããããžããä¸č¨ãŽãģããŗããŖã¯ãšãŽãŋãčæ
Žããã¨ãããŽå´éĸã¯ãã°ã§ãã @ gasparkaãčĻã¤ãäžãéãã¨ãããŽįšãĢã¤ããĻåé§ã§ããĒãč°čĢããããžãã
å¯ä¸ãŽ2äēæĨč
ã¯ãããã§ã¯æŦåŊãĢãããžãã -
ã§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|
ãŽå¯ææ§ã¯ããšãĻãŽæåŗãå¤ąããžãã<=
ã§ã¯ãĒã<
ããããŖãĻãæ¯čŧãŽåšŗįé¨åãŽãããĢããĒããæēčļŗããåŋ
čĻãããã |a-b| = f(a, b, atol, rtol)
æį¤ēãf(a, b, atol, rtol)
_must_ãå¯æã§ãĒããã°ãĒããžããīŧį§ã¯æããžããīŧīŧã ããããĒãã¨ãä¸č¨ãŽįåŧãįã§ã¯ãĒãīŧãããæēããa
ã¨b
ãŽå¤ããĒãīŧããåŗå¯ãĒä¸įåŧ<
ãåŽéãĢæåŗįãĢåŽįžŠãããĻããžãããīŧãããŽããšãĻãžãã¯ãããããĢã¤ããĻããĒããããīŧãžãã¯ããĒãīŧãã¨ã¯ãåŽå ¨ãĢåĨãŽčŗĒåã§ãã
æãåčãĢãĒããŗãĄãŗã
@njsmith īŧį§ãéŖããĻããĻãããĻãããã¨ãã
å°ãæ´å˛ããããžããį§ãstdlibãĢčŋãã¨ææĄããã¨ããį§ããĄã¯įĸēããĢnumpyãå čĄæčĄã¨čĻãĒããĻããžããã ãããį§ã ãã ãŖãã¨ããããäēææ§ãŽãããĢãäēææ§ãŽãããĸãããŧããäŊŋį¨ãããããããžãã:-)ã
ãããããŗããĨãããŖãŽæŽããŽé¨åã¯ãPythonãĢã¨ãŖãĻãæŖããããã¨ãčĄããã¨ãããéčĻã§ããã¨čããĻãããããéˇãč°čĢãįļããžãã...čĻãĢčĄãããå ´åã¯ãPEPãŽãģã¨ããŠãŽãã¤ãŗããããŖãããŖãããã¨ããžããã
numpyã¸ãŽåį §ã¯æŦĄãŽã¨ããã§ãã
https://www.python.org/dev/peps/pep-0485/#numpy -isclose
ããŽč°čĢã¨åããã¨ãææãããĻãããã¨ãããããžãã
įĩåąã3ã¤ãŽéčĻãĒãã¤ãŗããåēãĻããžããã
1īŧ寞į§°įãĒãĸãããŧãã¯ãéŠãæå°ãŽååãĢãĒããžãã
2īŧåŧæ°ãŽå¤§ãããŽé åēãĢã¤ããĻäŊãäģŽåŽããĒããããĢããããŠãĢããŽįĩļå¯žč¨ąåŽšå¤ã¯ãããããŧãã§ããåŋ čĻããããžãã
3īŧãåŧąããããšãã¨ãåŧˇããããšããŽéãã¯ãäēæŗããããĻãŧãšãąãŧãšã¨åæ§ãĢãč¨ąåŽščĒ¤åˇŽãå°ããå ´åã¯éĸäŋãããžããã§ããã
įĩåąãmath.iscloseãŽãæč¯ãŽãč§Ŗæąēįãæãã¤ããã¨æããžãã
ããããä¸äŊäēææ§ãåŖããŽãĢååãåĒããĻããããŽã§ããããã į§ã¯ããã¯æããžããã
æŽåŋĩãĒãããnumpyīŧãããŗpythonīŧãŽå¤ããĢã¯ãäžŋåŠãĒãããĢå¤ããŽæŠčŊãčŋŊå ãããĻããžãããįžå¨ãŽč°čĢãããžããĒããããããããŽæŠčŊã¯æéŠã§ã¯ãĒãããļã¤ãŗããããããããžãã ããã¯čĨãåŗæ¸é¤¨ãĢã¨ãŖãĻæåž ãããĻããīŧãããĻåŋ čĻãĒīŧããŽã§ãããį§ããĄã¯äģããã¨ä¸įˇãĢæŽããåŋ čĻããããžãã
@njsmithã¯æŖããã§ã-åŗå¯ãĒFPã¨ãŠãŧåæãĢããŖãĻč¨ąåŽšå¤ãč¨åŽãããĻããnp.iscloseīŧīŧãŽäŊŋį¨æŗã¯ãģã¨ããŠãĒãã¨æããžãããnp.iscloseīŧīŧčĒäŊãäŊŋį¨ããĻã¨ãŠãŧãčŠĻčĄããžãã
ãã ãããã大ããĒåéĄã¯ãããŠãĢããŽ
atol
ã ã¨æããžã-åŧæ°ã1æŦĄã§ããã¨æŗåŽããĻããžã-ããã¯é常ãĢééãŖãæŗåŽã§ããå¯čŊæ§ããããããšããĢåæ ŧãããã¨ãå¤ããããããã§ã¯ãããžããããĻãŧãļãŧã¯æ°äģããĒããããããžãããįãīŧ
ã¯ãããããåŧãčĩˇãããĻãããŽã¯
atol
ã§ããã§ããããåé˛ããéãæãŖãĻãããã¨ã¯ããããč¯ãčãã§ãã
į§ã¯ããŧã¯ãŧãåŧæ°ãŽãĸã¤ããĸãåĨŊãã§ã-__ future__ãĒãŠãããããã¨ãããããã¯ãããĢį°ĄåãĢæããžãã
ãããĻãéæ¨åĨ¨ãŽčĻåãŽįēčĄãéå§ããæįĩįãĢãããŠãĢããŽå¤ããŽããŧã¸ã§ãŗãããĻãŗãšããĒãŧã ãĢå¤æ´ããããŠãããæąēåŽã§ããžã...