<p>numpy.iscloseとmath.isclose</p>

äŊœæˆæ—Ĩ 2017åš´12月05æ—Ĩ  Âˇ  78ã‚ŗãƒĄãƒŗト  Âˇ  ã‚Ŋãƒŧã‚š: numpy/numpy

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バãƒŧジョãƒŗをäŊŋį”¨ã™ã‚‹åˆŠį‚šã¯ã‚りぞすかīŧŸ

57 - Close?

æœ€ã‚‚å‚č€ƒãĢãĒるã‚ŗãƒĄãƒŗト

@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__ãĒおをいじろうとするよりもはるかãĢį°Ąå˜ãĢ思えぞす。

そしãĻ、非推åĨ¨ãŽč­Ļ告ぎį™ēčĄŒã‚’é–‹å§‹ã—ã€æœ€įĩ‚įš„ãĢデフりãƒĢトぎ多くぎバãƒŧジョãƒŗをダã‚Ļãƒŗ゚トãƒĒãƒŧムãĢ変更するかおうかをæąē厚できぞす...

全ãĻぎã‚ŗãƒĄãƒŗト78äģļ

į§čĻ‹ã‚’変えるãĢは遅すぎぞす。

これは、すずãĻぎ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

å…ˇäŊ“įš„ãĒ動抟やãƒĻãƒŧã‚šã‚ąãƒŧã‚šãĒしでフナグをčŋŊ加することãĢ反寞しãĻいぞす。 有į”¨ãĒãƒĒトマ゚čŠĻ験īŧšåˆåŋƒč€…ぎ開į™ēč€…ãŒã“ãŽãƒ•ãƒŠã‚°ãŒå­˜åœ¨ã™ã‚‹į†į”ąã‚’尋ねた場合、おぎようãĢčĒŦ明しぞすかīŧŸ

おぎようãĢčĒŦ明しぞすかīŧŸ

  1. math.iscloseへぎå‘ŧãŗå‡ēしをベクトãƒĢ化する場合は、 symmetric=TrueフナグをäŊŋį”¨ã—ぞす
  2. æ—ĸ存ぎã‚ŗãƒŧドをåŖŠã•ãĒいようãĢ、フナグであるåŋ…čĻãŒã‚りぞした。

原際ãĢå•éĄŒãŒč§ŖæąēされãĻいるįŠļæŗã‚’ã‚‚ãŖとæŽĸしãĻいぞす。

おそらくここでč§ŖæąēされãĻã„ã‚‹å”¯ä¸€ãŽåŽŸéš›ãŽå•éĄŒã¯åˆåŋƒč€…ã‚’äŊœã‚‹ã“とです
æĩŽå‹•å°æ•°į‚šãŽį˛žåēĻãĢついãĻもãŖã¨č€ƒãˆãĻください。 つぞり、@ 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つぎã‚Ēãƒ—ã‚ˇãƒ§ãƒŗがありぞす。

  1. čŋŊ加ぎåŧ•æ•°ã‚’文書化し、äģ–ãĢäŊ•ã‚‚しぞせん
  2. åŧ•æ•°ãĒしでiscloseをå‘ŧãŗå‡ēすことを非推åĨ¨ãĢし、č­Ļ告ãĒしで古い動äŊœã‚’取垗するためãĢãƒĻãƒŧã‚ļãƒŧãĢisclose(..., symmetric=False)を書きčžŧむようãĢåŧˇåˆļしぞすīŧˆ allcloseãĢついãĻも同様ですīŧ‰ã€‚ これはあぞり多くぎã‚ŗãƒŧドãĢヒットしãĒいと思いぞすが、įĩæžœã¯ã‚ぞりčĒ­ãŋãĢくく、大きãĒ刊į›Šã¯ã‚りぞせん。 assert_closeは、内部でisclose(..., symmetric=False)をå‘ŧãŗå‡ēすようãĢ変更されるため、そぎãƒĻãƒŧã‚ļãƒŧはåŊąéŸŋを受けぞせん。
  3. ä¸Šč¨˜ã¨åŒæ§˜ã§ã™ãŒã€ symmetricへぎassert_close symmetricåŧ•æ•°ã‚‚åŋ…čĻã§ã™ã€‚ これは下æĩã§å¤§čĻæ¨ĄãĒč§Ŗį´„ãĢãĒりぞす
  4. čĄŒå‹•ã‚’é™ã‹ãĢ変える

ã“ã‚Œã‚‰ãŽã†ãĄã€ã‚Ēãƒ—ã‚ˇãƒ§ãƒŗ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īŧ‰å¯žį§°ã§ã¯ã‚りぞせん

  • それは掋åŋĩですが、原際ãĢは大したことではãĒいと思いぞす。値が原際ãĢčŋ‘い場合はãģとんお違いはありぞせん:-) rtol <1e-8ぎ場合īŧˆå°‘ãĒくともatolが0.0ぎ場合īŧ‰ã€æ–‡å­—通り違いはãĒいと思いぞす。

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()ã¯å°‘ã—é•ˇã‚ã§ã™ãŒã€į§ãŽį›ŽãĢは不åŋĢではありぞせん。īŧšbikeshedīŧšįĩĩ文字>

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つぎã‚Ēãƒ—ã‚ˇãƒ§ãƒŗīŧš

  1. 重大ãĒ変更-受けå…ĨれられãĒい、あãĒたはそれãĢついãĻč­°čĢ–するぎをやめることができぞす。
  2. ã‚ˆã‚Šč‰¯ã„ãƒ‰ã‚­ãƒĨãƒĄãƒŗトをčŋŊ加するだけ
  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īŧ‰ãģとんおぎäēēは、ãģとんおぎ場合、åŽŗ密ãĒæĩŽå‹•å°æ•°į‚šã‚¨ãƒŠãƒŧ分析ぎようãĒことをしãĻ、į­”ãˆãŒãŠã‚Œã ã‘č‰¯ã„ã¨æœŸåž…ã•ã‚Œã‚‹ã‹ã‚’åˆ¤æ–­ã—ãžã›ã‚“ã€‚ むしろ、åŊŧらは値をčŠĻã—ã€å¤ąæ•—ã—ãŸå ´åˆã¯įĩæžœã‚’čĻ‹ãĻ、それがæœŦåŊ“ãĢエナãƒŧã§ã‚ã‚‹ã‹ãŠã†ã‹ã€ãžãŸã¯ãƒ†ã‚šãƒˆãŽč¨ąåŽšį¯„å›˛ã‚’čĒŋ整するåŋ…čĻãŒã‚るかおうかを判断しぞす。

  • これは、atolとrtolがマãƒŧジされるかおうか、およãŗテ゚トが寞į§°ã§ã‚るかおうかはそれãģお重čĻã§ã¯ãĒいことを意å‘ŗしぞす。

3īŧ‰å¤šããŽäēēは、多くぎ場合、īŧˆ2īŧ‰ãŽãƒ—ロã‚ģ゚をデフりãƒĢãƒˆãŽč¨ąåŽšå€¤ã§é–‹å§‹ã—ã€ãƒ†ã‚šãƒˆãŒå¤ąæ•—ã—ãŸå ´åˆãĢぎãŋč¨ąåŽšå€¤ãŽčĒŋæ•´ã‚’æ¤œč¨Žã—ãžã™ã€‚

  • これは、デフりãƒĢトぎatolを持つことは非常ãĢåąé™ēであることを意å‘ŗしぞす-そうではãĒいはずぎテ゚トãĢ合æ ŧすることはæœŦåŊ“ãĢæ‚Ēいことです。

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もぞだありぞせん。 一åēĻでもこぎæŦ é™ĨがãĒいかã‚ŗãƒŧドをチェックできãĻうれしいですīŧ

4880はį§ãŒč€ƒãˆãĻいたもぎです。

2017åš´12月11æ—ĨãĢは、午前5時01分PMで、ナã‚ĩニエãƒĢãƒģJ.゚ミ゚[email protected]
書きぞしたīŧš

4880https īŧš//github.com/numpy/numpy/pull/4880はį§ãŒč€ƒãˆãĻいたもぎです

ぎ。

おかげで、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で永遠ãĢ存įļšã—ぞす。

__future __- typeデã‚ŖãƒŦクテã‚ŖブぎčŋŊ加

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|ぎ可換性はすずãĻぎ意å‘ŗã‚’å¤ąã„ãžã™ã€‚
  • åŧˇåŠ›ãĒåŧ•æ•°ã¯īŧšæ¯”čŧƒopが、åŽŗ密ではãĒい、すãĒã‚ãĄã€ãã‚Œã¯ã‚ã‚‹<=ではãĒい<したがãŖãĻ、比čŧƒãŽåšŗį­‰éƒ¨åˆ†ãŽãŸã‚ãĢあãĒたがæē€čļŗするåŋ…čĻãŒã‚り、 |a-b| = f(a, b, atol, rtol)暗į¤ēたf(a, b, atol, rtol) _must_も可換でãĒければãĒりぞせんīŧˆį§ã¯æ€ã„ぞすかīŧŸīŧ‰ã€‚ そうしãĒã„ã¨ã€ä¸Šč¨˜ãŽį­‰åŧãŒįœŸã§ã¯ãĒいīŧˆã“れをæē€ãŸã™aとbぎ値がãĒいīŧ‰ã‹ã€åŽŗ密ãĒ不į­‰åŧ<が原際ãĢ意å‘ŗįš„ãĢ厚įžŠã•ã‚ŒãĻいぞすよねīŧŸ

これぎすずãĻぞたはいずれかãĢついãĻあãĒたがするīŧˆãžãŸã¯ã—ãĒいīŧ‰ã“とは、厌全ãĢåˆĨぎčŗĒ問です。

こぎペãƒŧジはåŊšãĢįĢ‹ãĄãžã—たかīŧŸ
0 / 5 - 0 評価