ãŠãŒã¶ãŒãäžè¬çãªãã«ãã«ã空éã®ã«ã¹ã¿ã å ç©ãå®çŸ©ããå¿ èŠãããå Žåããã®ã¿ã€ãã®äžè¬åã®Baseã®çŸåšã®ç¶æ ã¯äœã§ããïŒ https://github.com/JuliaLang/julia/issues/16573ã¯é¢é£ããŠããŸãããããã»ã©äžè¬çãªåé¡ã§ã¯ãããŸããã ç§ã®æžå¿µã¯ãé åã§ã¯ãªãæ°ããåã«ãããŸãã
dot
ã®ååãinner
ã«å€æŽãããã inner(x,y)
ããªããžã§ã¯ãx
ãšy
ã®éã®äžè¬çãªå
ç©ãšããŠå®çŸ©ããããã«ãŠãŒã¶ãŒã«æ瀺ããããšæããŸãã
inner(x::AbstractVector, y::AbstractVector) = dot(x, y)
å€æŽãåççã§ããå Žåãããã¯Juliav1.0ã®äžéšã§ããå¯èœæ§ããããŸããïŒ
ãŠãŒã¹ã±ãŒã¹ã«ã€ããŠããå°ã説æããŠããã ããŸããããŸããããã±ãŒãžã§å®çŸ©ããã ãã§ãªããBaseã§äœ¿çšããããšãæçãªçç±ãæããŠãã ããã å
·äœçãªäŸãæé©ã§ãã åæã«ããŒããããããã±ãŒãžå
šäœã§ããã€ãã®inner
å®çŸ©ãæåŸ
ããŸããïŒ
ãããã®æ°åŠç空éã®ããã®æ£åŒãªã€ã³ã¿ãŒãã§ãŒã¹ãæã€ããšã¯ããŠãŒã¶ãŒãåã·ã¹ãã ããããã掻çšããã®ã«åœ¹ç«ã€ãšæããŸãã ããšãã°ãã¯ã©ã¹ã¿ãªã³ã°ææ³ã¯ã©ã®è·é¢ç©ºéã§ãæ©èœãããšæããŸãã å
ç©ã§åãå®çŸ©ã§ããã°ãïŒããã±ãŒãžãããã«å¿ããŠä¿®æ£ãããåŸïŒç®±ããåºããŠClustering.jl
ã®æ©æµãåããã§ãããã ä»ã®å€ãã®è·é¢ããŒã¹ãŸãã¯æ圱ããŒã¹ã®ã¢ã«ãŽãªãºã ãäžè¬åã§ããŸãã
å
·äœçãªäŸãšããŠãä»æ¥ãæ§æããŒã¿ã®ãžãªã¡ããªãå®çŸ©ããããšããŠããã®å¶éã«ééããŸãããhttps ://github.com/juliohm/CoDa.jlããç¥ãããŠããinner
é¢æ°ã«ç¹åããããšæããŸããä»ã®èª°ãæ°ä»ããªãèªåã®ã€ã³ã¿ãŒãã§ãŒã¹ãå®çŸ©ãããããBaseã§å®çŸ©ãããŠããŸãã
ãã«ãã«ã空éã¿ã€ãã®dot
ãæ¡åŒµããŠã¿ãŸãããïŒ äžè¬çãªå
ç©ã念é ã«çœ®ããŠèšèšãããŠãããšç¢ºä¿¡ããŠããŸãã
å
ç©ã®æŠå¿µã¯ãå
ç©ã®æŠå¿µãããå³å¯ã§ãã åŸè
ã¯äžè¬çãªã¹ããŒã¹ã«å¯ŸããŠå®çŸ©ãããŸãããå
ç©ã¯ãæéåºåºã«ãã£ãŠå®çŸ©ããã座æšç³»ã®æŠå¿µãããå Žåã«ã®ã¿å®çŸ©ãããŸãã dot(x,y)
ã®ã»ãã³ãã£ã¯ã¹ã¯x'*y
ã§ããããã§ã x
ãšy
ã¯ããã«ã«ãäžçã®ãªããžã§ã¯ãã®åº§æšãè¡šããŸãã æ°åŠã®æç§æžã§ã¯ããããç©ãšããçšèªã«ã€ããŠèšåããããšã¯ãã£ãã«ãããŸãããèè
ã¯éåžžãããäžè¬çãªïŒå¿
ãããæéã§ããŠãŒã¯ãªããã§ããªãïŒç©ºéã§ææãæ±ãããšã«é¢å¿ãããããã§ãã
ããã«åºå¥ããããã«ãå
ç©<x,y>
ïŒãŸãã¯inner(x,y)
ïŒãæã€ãã«ãã«ã空éã§ã¯ããªããžã§ã¯ãã¯ç¡éã§ããå¯èœæ§ããããã»ãã³ãã£ã¯ã¹x'*y
ã¯é©çšãããŸããã ããšãã°ãé¢æ°ããŒã¿åæã§ã¯ããªããžã§ã¯ãã¯é¢æ°f
ãšg
ã§ãããå
ç©ã¯éåžžãæ°å€ç©åã«ãã£ãŠååŸãããŸãïŒ inner(f,g) = quadrature(f*g)
ã ãã®æäœããããç©ãšåŒã¶ã®ã¯èª€è§£ãæãæãããããŸãã
CoDa.jl
ããã±ãŒãžã§ææãããã1ã€ã®äŸã¯ãæ§æããŒã¿ã§ãã ã³ã³ããžã·ã§ã³ãªããžã§ã¯ãã¯ãæäœx'*y
ãæå³ããªããªãã·ã³ãã¬ãã¯ã¹ã®äžçã«ãããŸãã ãã ããçè§å€æïŒå¯Ÿæ°æ¯å€æïŒãååšããŸããããã䜿çšããŠãæ§æãå¥ã®ãžãªã¡ããªã«ãããã³ã°ãã座æšã䜿çšããŠå
ç©ãé©çšã§ããŸãã 座æšãæäœããå¿
èŠã¯ãããŸãããããã®åéã§ã¯äžè¬çãªæ¹æ³ã§ãã çµæã¯ããªããžã§ã¯ããååšããå
ã®ã¹ããŒã¹ã«éå€æã§ããŸãã
èšèªã§dot
ãšããçšèªãç¶æããããšã«ã¡ãªããã¯ãããŸããããäžäœäºææ§ãæ±ããå Žåã¯ãäžè¬åinner(x::AbstractVector, y::AbstractVector) = dot(x,y)
ã¯å®å
šã«æ©èœããŸãã
ãã®å€æŽã«å¯Ÿããç°è°ã«ã€ããŠè©³ãã説æããŠããã ããŸããïŒ
ãã®å€æŽã«å¯Ÿããç°è°ã«ã€ããŠè©³ãã説æããŠããã ããŸããïŒ
Baseã«æ°ãããããªãã¯é¢æ°ãè¿œå ããã«ã¯ãéåžžãããªãã®æ£åœæ§ãå¿
èŠã§ããããã¯ç°è«ã§ãã ããã¯ã InnerProducts
ããã±ãŒãžã«ãã£ãŠæäŸãããå¯èœæ§ããããŸãã ãªããããèšèªèªäœã«çµã¿èŸŒãå¿
èŠãããã®ã§ããïŒ ããã¯ã @ andreasnoackãäžèšã§å°ããæåã®è³ªåã§ãããããããã®æ°åŠç©ºéã®æ£åŒãªã€ã³ã¿ãŒãã§ã€ã¹ããããšããŠãŒã¶ãŒãåã·ã¹ãã ãããæå¹ã«æŽ»çšã§ããããã«ãªããšæããŸãããšããããæŒ ç¶ãšããçããåŸãããŸããã ããã±ãŒãžã§å®çŸ©ãããã€ã³ã¿ãŒãã§ãŒã¹ãBaseã®ã€ã³ã¿ãŒãã§ãŒã¹ããã圢åŒçã§ãªãçç±ã¯ãããŸããã Base.inner
ãæã£ãŠãããšã InnerProducts.inner
ãæäŸããªããã®ã¯äœã§ããïŒ ããã¯èª¬åŸåã®ããçããåŸãããæ¬ç©ã®è³ªåã§ããããã®çããäœã§ãããã¯ããããŸããããã®ããã質åãè¡ãããŠããŸãã
Baseã«ãªãä»ã®å Žæã®å
ç©ã®ãããªåºæ¬çãªæ°åŠçæŠå¿µãå®çŸ©ããããã®è¯ãè°è«ã¯èŠåœãããŸããã äž»ãªå¯Ÿè±¡è
ãç§åŠèšç®ã®äººã
ã§ããèšèªã¯ãæ£ããçšèªã®æ©æµãåããã§ãããã norm
Base.LinAlg
å®çŸ©ãããŠãããåãã³ããŒãã«ããinner
ãããã±ãŒãžã§å®çŸ©ããå¿
èŠãããã®ã¯ãªãã§ããïŒ ãã®ççŸã«å ããŠãèšèªã«ã¯ãã§ã«dot
ããããŸããããã«ãããããäžè¬çãªæŠå¿µã§ã¯ãªãããªãããã»ã©å
·äœçãªãã®ãå¿
èŠãªã®ãçåã«æããŸãã
ããã§ãããªãã¯åºæ¬èšèªã§å¯èœãªãã¹ãŠã®æ°åŠçæŠå¿µã欲ããã§ããïŒ Baseã§äœããå®çŸ©ãããŠããªããŠãã人ã
ãééã£ãçšèªã䜿çšããããšã匷å¶ãããããšã¯ãããŸããã norm
é¢æ°ã¯ã LinAlg
ã§å®çŸ©ããã³äœ¿çšãããŠããããã LinAlg
ãããšã¯ã¹ããŒããããŸãã dot
ã«ã€ããŠãåæ§ã§ãã dot
ã®ååãinner
ã«å€æŽããããšãææ¡ããŠããŸããïŒ
ããã§ãããªãã¯åºæ¬èšèªã§å¯èœãªãã¹ãŠã®æ°åŠçæŠå¿µã欲ããã§ããïŒ
ç§ã¯ããã¯æ±ºããŠèšã£ãŠãªãã
Baseã§äœããå®çŸ©ãããŠããªããŠãã人ã ãééã£ãçšèªã䜿çšããããšã匷å¶ãããããšã¯ãããŸããã
ããã§ã¯ãªããšç¢ºä¿¡ããŠããŸãã ééã£ãçšèªã宣äŒããããšãåé¡ã§ãã æ°åŠçãªèæ¯ãå°ãªã人ã¯ãBaseã§è¡šç€ºãããããããããã®äœ¿çšæ³ãæ¡çšããŸãã å ç©ã®æŠå¿µãè¡šãããã®ãããããç©ãšããçšèªã®äœ¿çšã¯æ£ãããããŸããã ãŸããééã£ãçšèªãæ®ãããããã®å·è·¡ãä¿®æ£ããã®ã«æã èŠåŽããŠããæ°åŠã³ãã¥ããã£ã«ãšã£ãŠãæ害ã§ãã ç§ã®äžä»£ã®åŠçã¯ãçšèªãæ£ããç解ããããã«åžžã«å€ãæ¬ãåç §ããå¿ èŠããããŸãããããã§ã¯ãªãã¯ãã§ãã
ãããã®ååãinnerã«å€æŽããããšãææ¡ããŠããŸãã
ããã¯ç§ã®æèŠã§ã¯ãã§ã«å€§ããªæ¹åã«ãªãã§ãããã æ©èœããŒã¿ãšæ§æããŒã¿ã«ã€ããŠã¯ãäžèšã®ãã¹ãŠã®äŸãåç
§ããŠãã ããã ãããã®ã³ãã¥ããã£ã®äººã
ã¯ãä»äºã§dot
ãšããçšèªã䜿çšããããšã¯æ±ºããŠãããŸããã ãããããã¯ãäœãããã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ã®çšèªã«äŒŒãŠããŸãã
dot
ã®ååã$ïŒ inner
ã«å€æŽããããšã¯ã dot
ã«å ããŠinner
ãBaseã«è¿œå ããããšãšã¯ãŸã£ããç°ãªãææ¡ã§ãã ããã¯ãæ£ããçšèªãã®è³ªåã§ãããããªããä»ã®linalgã®äººã
ã¯ããã·ã¥åããå¿
èŠããããŸããããããäžåºŠãã€ã¯ã·ã§ããããŠã dot
ããã®é¢æ°ã®å®è£
ã®æ£ããååã§ãããšçµè«ä»ããã®ãæãåºããŠããããã§ãã
https://github.com/JuliaLang/julia/issues/22227ãšhttps://github.com/JuliaLang/julia/pull/22220ã§ããã«ã€ããŠå°ãè°è«ããããŸãã
ãããã®ååãinnerã«å€æŽããããšã¯ãdotã«å ããŠinnerãBaseã«è¿œå ããããšãšã¯ãŸã£ããç°ãªãææ¡ã§ãã
ããã¯ããã®ã¹ã¬ããã®æåã®ã¡ãã»ãŒãžã§ææ¡ãããã®ã§ãã
ãããã®ååãinnerã«å€æŽããããinnerïŒxãyïŒããªããžã§ã¯ãxãšyã®éã®äžè¬çãªå ç©ãšããŠå®çŸ©ããããã«ãŠãŒã¶ãŒã«æ瀺ããããšãææ¡ããããšæããŸãã
ç¹°ãè¿ããŸããããããç©ã¯ãããã§èª¬æããŠããæäœã®èª€ã£ãçšèªã§ãã å
åŽãå€åŽãå
ç©...ãããã¯æ°åŠç察象ã§ãã ãå
ç©ãã¯èšç®ãªããžã§ã¯ãã§ãã2ã€ã®æ°å€ã·ãŒã±ã³ã¹ãååŸãã x1*y1 + x2*y2 + ... xn*yn
ãå®è¡ããŸããããã¯ãä»ã®æ°åŠç©ºéã§ã¯åœ¹ã«ç«ããªãæäœã§ãã
ç§ã¯ããªããææ¡ãã2çªç®ã®ãªãã·ã§ã³ã«çŠç¹ãåãããŠããŸãããããã¯Base.dot
ãåŒã³åºãããã®ãã©ãŒã«ããã¯ã§Base.inner
ãè¿œå ããŠããããã§ãã ã©ã¡ãã®ãªãã·ã§ã³ãå¯èœã§ãããã©ã¡ããæ£åœãªçç±ãå¿
èŠã§ããæ°ããæäœãè¿œå ããã«ã¯ãããã±ãŒãžã«å«ããããšãã§ããªãçç±ãå¿
èŠã§ãïŒãã®èª¬æã®æåã®éšåã«ã€ããŠïŒã ååãå€æŽããã«ã¯ã dot
ãééã£ãååã§ããã inner
ãæ£ããååã§ãããšå€æããå¿
èŠããããŸãïŒäŒè©±ãå€ãã£ãããã«èŠããŸãïŒã
@juliohmçŸåšã Base
ãçž®å°ããããã±ãŒãžã®äœ¿çšã奚å±ããããšããŠããç©æ¥µçãªåãçµã¿ãããããšãïŒåïŒè¿°ã¹ã䟡å€ããããŸãã ãã®å Žåã dot
ã¯ãæšæºã®Juliaã§æäŸãããç·åœ¢ä»£æ°ã«åå ãããã¹ãŠã®ã¿ã€ãïŒã€ãŸãã Number
ãšArray
ïŒã«å¯ŸããŠæ£ããããã§ãããããã£ãŠã確ãã«ãæ¢ç¥ã®ããã¹ãŠã®å Žåã«æéã®åºç€-ãããã£ãŠãããè¯ãéžæããããããããŸããããçšèªãééãããšã¯æããŸããïŒã ç§ã¯ãã®ææ¡ã«å察ããŠããŸããããå€æŽã«å¯ŸãããæœåšçãªãæµæãçµéšããŠããçç±ãæ確ã«ããããã«ããããææããããšæããŸãã
ãŸããããªãã®æ°ã®Juliaã®æ°åè
ã¯ãå
ç©ã«ã¯ç²ŸéããŠãããå
ç©ã«ã¯ç²ŸéããŠããªãå¯èœæ§ãããããšãèŠããŠãã䟡å€ããããŸãïŒããšãã°ã倧åŠã§å°ãç©çåŠãåŠãã ããæ°åŠå°æ»ã§ã¯ãªãïŒã dot
ãä¿æããŸãïŒå¯Ÿå¿ããäžçœ®æŒç®åãããããšã¯èšããŸã§ããããŸãã- inner
ã«ãããããããšãã§ããŸãããããã¯å°ããããã«ããã§ãïŒã ãŸãã outer
é¢æ°ããŸãã¯ãã®ä»ã®ããŸããŸãªå¯èœãªæäœã¯ãããŸããã
ãããã£ãŠãããããŠãŒã¶ãŒããã±ãŒãžã«å
¥ãããããããããBase
ïŒãŸãã¯LinAlg
ïŒã«å
¥ããæ¹ãå³å¯ã«åªããŠãããšããåççãªã±ãŒã¹ãäœæããã®ã¯è² æ
ããããŸãã äž»ãªçç±ã¯ãä»ã®äººãå
±æããã³æ¡åŒµã§ããã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããããšã§ããããã«æãããŸã-ããã¯åççãªèŠçŽã§ããïŒ Clustering.jlã®ãžã§ããªãã¯ã³ãŒããå
ç©ã§åäœãããããšã«ã€ããŠã®è°è«ã¯ãããªã説åŸåãããããã§ãã ãŸãã LinAlg
ãstdlibããã±ãŒãžã«åå²ããŠããããã«èŠããç¶æ³ã§ã¯ã LinearAlgebra
ãšããããã±ãŒãžãäœæããå Žåã¯ãããããinner
ãå«ããŠããã£ããšæã£ãŠããŸãããä»ã®äººãæ¡åŒµããããã®
ããªãã®èããå ±æããŠãããŠããããšã@andyferris ã æµæãã¯ã£ãããšèŠããŸãããããŸãè奮ããŠããŸããã ããã«ãããããããç§ã¯ãã®ç¹å®ã®ææ¡ãã©ã®ããã«ã³ãŒãã®å¢å ã«ã€ãªããã®ãèå³ããããŸããïŒ ç§ã«ã¯ãæœè±¡åãå€§å¹ ã«æ¹åããããã³ãŒãã®äºçŽ°ãªå€æŽã®ããã«æããŸãã Clustering.jlã®äŸã¯ãå€ãã®äŸã®1ã€ã«ãããŸãããå ç©ã®æŠå¿µãååšãããä»»æã®Juliaã¿ã€ãã§æ©èœããããã«äœæã§ããã«ãŒãã«ããŒã¹ã®ã¡ãœãããèããŠã¿ãŠãã ããã MultivariateStats.jlã«ã¯ãããããããŸãã
LinAlg
ãå¥ã®ããã±ãŒãžã«åå²ããããšã«ã€ããŠã®ã³ã¡ã³ãã«é¢ããŠã¯ãæ°åŠè£œåãã«ãã»ã«åããã®ã«é©ããå Žæã®ããã«æãããããšã«åæããŸãã ãã®å°æ¥ã®LinearAlgebra
ããã±ãŒãžã¯ãããã©ã«ãã§Juliaã»ãã·ã§ã³ã«ã€ã³ããŒããããããããã¹ãŠã®ãŠãŒã¶ãŒãinner
ã outer
ãªã©ã®æŠå¿µã«ã¢ã¯ã»ã¹ã§ãããšæ³å®ããŠããŸããããã«ã
ã¯ããæšæºã©ã€ãã©ãªã¯ãã¹ãŠJuliaã·ã¹ãã ã€ã¡ãŒãžãšäžç·ã«æ§ç¯ãããŠãããããã©ã«ãã§å©çšã§ããŸãã å°ãªããšãv1.xã·ãªãŒãºã§ã¯ã誰ããŸããïŒååãusing LinAlg
ãšå
¥åããå¿
èŠã¯ããLinearAlgbebra
ã«ãªããšã¯æããŸããããæ¶ç©ºã®ç«¶åä»ç€ŸãšããŠäœæããŸããïŒ ã
æ確ã«ããããã«ãæšæºã®JuliaãããŒãããããããäœãã€ã³ã¹ããŒã«ããå¿
èŠã¯ãããŸãããããšã¯ã¹ããŒãããååãååŸããã«ã¯ã using LinAlg
ãšèšè¿°ããå¿
èŠããããŸãã
using LinAlg
ãªãã§*
ã¡ãœãããªã©ãååŸããã®ã§ãããã¯å¥åŠãªãšããã§ãã ïŒèšãæããã°ã LinAlg
ã¯ã¿ã€ãã®æµ·è³ã§ãïŒã
ã¯ããåºæ¬çã«ã¯ããã§ç·ãåŒãå¿
èŠããããŸããããŒã¹ã¯ãLinAlgãæµ·è³ã§ã¯ãªãããã«ããããã«å¿
èŠãªã ãã®ç·åœ¢ä»£æ°æ©èœãå®çŸ©ããå¿
èŠãããããã Array
ãš*
ã§ãããããããŒã¹ã§matmulãå®çŸ©ãããŸãã
å ·äœçãªäŸãæããŠãçŸåšã®ã€ã³ã¿ãŒãã§ãŒã¹ã§ã©ã®ããã«è§£æ±ºãããããèãããŸããããã§ãç¶æ³ãæ確ã«ãªããããããŸããã
ç®æšã¯ãçµæããŒã¿ã䜿çšããŠå ååæãå®è¡ããããšã§ãã ç§ã¯Composition
ãšåŒã°ããã¿ã€ããšãäœæ²ã®ç©ºéã®å
ç©ãæã£ãŠããŸãã ç§ã¯å€ãã®ãµã³ãã«ïŒããšãã°å²©ç³ãµã³ãã«ïŒãåéããããããã¹ãŠã倧ããªVector{Composition}
ã«å
¥ããŸãïŒããšãã°ãçµæ=ïŒ
waterãïŒ
grainãïŒ
airïŒã ããã§ããã®ããŒã¿ã®ãã¯ãã«ã«å¯ŸããŠãå¥ã®ããã±ãŒãžïŒMultivariateStats.jlãªã©ïŒã«å®è£
ãããŠããå ååæã¢ã«ãŽãªãºã ãåŒã³åºããŸãã ããã©ã«ãinner
補åãã€ã³ããŒãããã«ããããäžè¬çã«ã©ã®ããã«å®è£
ããŸããïŒ
æåŸã®ã³ã¡ã³ãããç§ãç解ããã®ã¯ãMultivariateStats.jlãšCoDa.jlã®äž¡æ¹ãLinAlg.jlã«äŸåããå¿
èŠããããšããããšã§ãã MultivariateStats.jlã®äŸåé¢ä¿ã¯ãååinner
ãã¹ã³ãŒãã«åã蟌ãããšã ãã§ãã CoDa.jlã®äŸåé¢ä¿ã¯ãMultivariateStats.jlã«ãã£ãŠåŒã³åºãããšãã§ããinner
ã®ã¡ãœãããå®çŸ©ããããšã§ãã ããã¯ããªããææ¡ããŠããããšã§ããïŒ
Composition{D}
ã¯+
ãš*
ã®äžã®$ D
次å
ãã¯ãã«ç©ºéã®ããã§ãã
å察ãã¯ãã«ç©ºéãå®çŸ©ããããªãã§ãããã
ãããã£ãŠã adjoint(::Composition) -> DualComposition
ãš*(::DualComposition, ::Composition) -> scalar
ïŒçŸåšinner
ïŒãå®çŸ©ã§ããŸãã DualComposition
ã¯ã Composition
ãå
éšã«ä¿æãã以å€ã¯ããã»ã©å€ãã®ããšãããå¿
èŠã¯ãããŸããã
https://en.wikipedia.org/wiki/Dot_productã®æåã®æã¯ã dot
ãä»»æã®2ã€ã®å埩å¯èœãªããžã§ã¯ãã«å¯Ÿããæäœã§ããå¯èœæ§ãããããšã瀺åããŠããããã§ãã ååž°çã«ããŠNumber
ã«å¯ŸããŠå®çŸ©ãã inner
ãæœè±¡ç·åœ¢ä»£æ°é¢æ°ãšããŠå®çŸ©ããããšãã§ããŸããããã¯ããŸããŸNumber
ãšAbstractArray
ã«å¯ŸããŠãªãŒããŒã©ããããŸãã
@andyferrisã«æè¬ããŸããå察空éã«ã€ããŠã®ããªãã®èãã«æè¬ããŸãã ãã ãããã®ã¿ã¹ã¯ã§ã¯æ°ããã¿ã€ãã«äŸåããããããŸããã æçµçãªè§£æ±ºçã¯äžå¿ èŠã«è€éã§ãã
ç§ãç解ãããã®ã¯ã次ã®ãããªçç±ã§ãã
inner(x,y) = sum(x.*y)
norm(x) = sqrt(inner(x,x))
export inner, norm
ããŒã¹ã§ã¯æè¿ãããŸãããïŒ èšèªã®ãŠãŒã¶ãŒãå°éãšããé¢æ°åãäžè¬çã«å®çŸ©ããããã«å¿ èŠãªã®ã¯ããã ãã ãšæããŸãã ç§ã¯ã³ã¢éçºè ã®èŠç¹ãç解ãããšããçã®é¢å¿ãæã£ãŠãããã®è³ªåãããŠããããšãèŠããŠãããŠãã ããã äŒè©±ãåã³ééã£ãæ¹åã«é²ãåã«ãç§ã¯ãããèšãããã§ãã
æ°åŠå
šè¬ã«é¢å¿ã®ãã人ã®èŠ³ç¹ãããããšããããã®æŠå¿µãããã©ã«ãã§ãšã¯ã¹ããŒãããã代ããã«LinAlg
å
ã§å®çŸ©ããã®ã¯äžèªç¶ã«æããŸãã LinAlg
ã¯ãé
ååã®ãããã®é«ã¬ãã«ã®æŠå¿µã®å®è£
ã ãšæããŸãã ãããããç§ã®äœæ¥å
šäœã§é
åã®ç·åœ¢ä»£æ°ã¯å¿
èŠãããŸããããããã±ãŒãžå
šäœã®å
ç©ã®æŠå¿µïŒMultivariateStats.jlãClustering.jlãªã©ïŒã®æ©æµãåããããšãã§ããŸãã ãŸãã LinAlg
ãäŸåé¢ä¿ãšããŠããã±ãŒãžã«å«ããããªãå ŽåããããŸããããã¯ãããã§ã¯ãªãããã§ãã
ããã«åŒ·èª¿ãããšãé
åã«äŸåããªãå
ç©ã®æŠå¿µããããŸãã ãã®æŠå¿µã¯ãBaseã®ã¹ããŒãã¡ã³ãexport inner
ã§è¡šãããŸãã 座æšinner(x,y) = sum(x.*y)
ãè¡šãé
åã®ãããªãªããžã§ã¯ãã®å
ç©ã®å®è£
ããããŸãã ãã®æäœã¯ãå¿
èŠã«å¿ããŠãäžèšã®ããã«Baseã§ã®ãã©ãŒã«ããã¯ã¡ãœãããšããŠå®çŸ©ã§ããŸãã
ãŠãŒã¹ã±ãŒã¹ã®ãã1ã€ã®äŸã¯ãã¯ãªããæ³ã§ãã ããšãã°ãå ç©ãæã€é¢æ°ç©ºéãããå Žåã¯ãã¯ãªããæ³ã䜿çšããŠããã®ç¡é次å é¢æ°ç©ºéã®å°ããªæé次å éšå空éã§ç·åœ¢åé¡ãŸãã¯åºæåé¡ãè¿äŒŒã§ããŸãã
ç§ããã¯ãã«/ãã«ãã«ã空éã圢æããã<: AbstractArray
ã®äžéšã§ã¯ãªãç¬èªã®ãªããžã§ã¯ããæã£ãŠããŸãã ã©ã³ã¯N>1
ã®é
åããã¯ãã«ç©ºéã圢æããã¯ãªããæ³ã§ããã¯ãã«ããšããŠäœ¿çšã§ãããšããã¢ãããžãŒããã vecdot
ãšvecnorm
ã®äœ¿çšã«äŸåããããã«ãªããŸãããå
ç©ãšãã«ã ã®äžè¬åãããæŠå¿µã§ãã ãã®ãããé¢æ°ãç·åœ¢æŒç®åãšããŠäœ¿çšããKrylovã¡ãœããã䜿çšããŠããã±ãŒãžãéçºããŠããŸããããã®ã¿ã€ãã®ãªããžã§ã¯ããvecdot
ã vecnorm
ãããã³ããã€ãããµããŒãããŠããã°ã'ãã¯ãã«ã¯ä»»æã®ã¿ã€ãã«ããããšãã§ããŸãããã®ä»ã®ãã®ïŒ scale!
ã zero
ã...ïŒã ããããããããããã¯Baseã§ãããã®æŠå¿µãæå³ããããšãæªçšããŠããã®ã§ãããã§æ£ããã€ã³ã¿ãŒãã§ãŒã¹ããŸã£ããã«ããã®ã¯è¯ãããšã§ãã
å³- vecdot
ã¯inner
ã«ååãå€æŽã§ããŸãã
ïŒä»ã norm
ãå®éã«matrixnorm
ãšåŒã°ããã¹ããã©ããçåã«æã£ãŠããŸãã norm
ãåžžã«inner
ãšäžèŽããè¡åã®å Žåããããã2ã€ã®ç°ãªããã®ãããããã§ãã norm
ã§èµ·ãã£ãŠããããšã¯ããããäžè¬åããã®ã«ããã€ãã®å°é£ãåŒãèµ·ãããŠããŸãïŒ
å®éãäžè¬çãªãã¯ãã«ã®ãããªãªããžã§ã¯ãã®å Žåããã¯ãã«ç©ºéã®æ¬¡å
ãç
§äŒããããšã圹ç«ã¡ãŸãïŒããšãã°ãç§ã®äŸã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ãKrylovã®æ¬¡å
ãå®å
šãªç©ºéã®æ¬¡å
ãã倧ãããªããªãããšã確èªããŸãïŒã ãã¹ããããé
åã®äŸã¯ã length
ãããã§ã¯æ£ããæŠå¿µã§ã¯ãªãããšã瀺ããŠããŸããã€ãŸãããããã®å Žåã«ã¯ãé·ãã®ååž°çãªæŠå¿µãå¿
èŠã«ãªããŸãã
ããã§ããã¹ããããé
åãäžè¬çãªãã¯ãã«ãšããŠäœ¿çšããäŸã§ã¯ã vecdot
ãšvecnorm
ã¯ãïŒ25093ã§èª¬æãããŠããããã«ãå
ç©ãšãã«ã ã®æ£ããæŠå¿µã§ãããªãå ŽåããããŸãã vecdot
ãšvecnorm
ãååž°çã«åŒã³åºããªãã§ãã ããã ãããã®é¢æ°ãäžè¬çãªå
ç©ããã³ãã«ã é¢æ°ãšããŠè§£éãããšãïŒ25093ãããªã¬ãŒãããŸãããããã¯ãããã®é¢æ°ãæå³ãããæ¹æ³ã§ã¯ãªãå¯èœæ§ããããŸãïŒä»£ããã«æå³ããããã®ãããããŸããïŒã
ãããã£ãŠãããã±ãŒãžå
šäœã§äœ¿çšããããã«ããã§äžè²«ããã€ã³ã¿ãŒãã§ã€ã¹ãå¿
èŠã§ããããšã«åæããŸãããããã£ãŠãäžå€®ã®å Žæã«å±ããŸãïŒããããããŒã¹ã§ã¯ãªãã確ãã«æšæºã©ã€ãã©ãªã«ãããŸããããšãã°ã using VectorSpaces
ãå®è¡ããå¿
èŠããããŸãïŒã ïŒã ããŒãã³ã°ã«é¢ããŠã¯ã2ã€ã®ãªãã·ã§ã³ããããŸãã
ãªãã·ã§ã³1ïŒãããŸã§ã®ç§ã®è§£éïŒïŒ
æ¥é èŸvec
ã¯ããªããžã§ã¯ããäžè¬çãªãã¯ãã«ãšããŠè§£éãããšãã®ãã®ãªããžã§ã¯ãã®ããããã£ã瀺ããŸãã
vecdot
ãšvecnorm
ãä¿®æ£ãããŸããïŒPRïŒ25093ïŒveclength
å®çŸ©ãè¿œå ãããŸãããªãã·ã§ã³2ïŒããããããè¯ãïŒïŒããæ°åŠçã«æ£ããååã䜿çšãã
inner
dimension
norm
ãã©ããããïŒãããŠæåŸã«ã @ stevengjã«pingãéä¿¡ããã ãã§ã圌ã«ã¯ç¢ºãã«ããã€ãã®æçšãªã³ã¡ã³ãããããŸãã ãäžäŸ¿ããããããŠç³ãèš³ããããŸããã
ååã¯ãããããã¹ãŠã®äžã§æãèå³æ·±ãéšåã§ã¯ãããŸããã é¢æ°dot
ã䜿çšããŠãä»»æã®ãã«ãã«ã空éã®äžè¬çãªå
ç©ãåç
§ããããšã«åé¡ã¯ãããŸããã ããšãã°ã2ã€ã®é¢æ°ã®å
ç©ãã«ã¯ä»ã«åççãªæå³ããªãã ãã§ãªããç¹ã«æé次å
ãã¯ãã«ãžã®é¡äŒŒæ§ã匷調ããããšããŠããæè²åŠçèšå®ã§ã¯ãéå
¬åŒãªäœ¿çšæ³ã§ãé¢æ°ã®å
ç©ããèŠãã®ã¯ããªãäžè¬çã§ããã¹ããŒã¹ã
@juliohm ã inner(x,y) = sum(x.*y)
ã¯äžè¬ã«å
ç©ã§ãããªãã®ã§ãããã¯ããŒã¹ã«å
¥ããã«ã¯ããªãã²ã©ããã©ãŒã«ããã¯ã«ãªããŸãã
ãããã dot
ã¯ããã¯ãã«ãšããŠåäœããBaseå
ã®ããŸããŸãªãªããžã§ã¯ãïŒã©ã³ã¯N>1
ã®é
åããã¹ããããé
åïŒãã¹ãããããã¯ãã«ãå¯äžã®ã±ãŒã¹ïŒãªã©ïŒã®æ£ããå
ç©ããã§ã«èšç®ããŠããŸããïŒå®éã«ã¯å€±æããŸãïŒãæ£ããæ©èœããå ŽæïŒã ããã«ãäžè¬ånorm
ã¯è¡åã«å¯ŸããŠãããŸãã«ãªããŸããããã¯ããããèªå°ãã«ã ãè¿ããšããçŸåšã®éžæã«åæããããã§ãããããã¯ãã«ãã«ã ãïŒãããããŠã¹ãã«ã ïŒãå¿
èŠã«ãªãå ŽåããããŸãã
ãããã£ãŠãç§ã®æã圱é¿ã®å°ãªãææ¡ã¯ãã»ãã³ãã£ã¯ã¹vecnorm(x) = norm(vec(x))
ãææŸãã vecnorm(x)
ãã x
ãããã¯ãã«ç©ºéã x
"ã®å¯Ÿå¿ãããã¯ãã«ãã«ã ãèšç®ããŸãïŒ vecdot
ãšåæ§ïŒã ããã¯è§£éïŒãããã£ãŠããã¥ã¡ã³ãïŒã®å€åã§ãããBaseã®ãªããžã§ã¯ãã®å®éã®å®è£
/ã¢ã¯ã·ã§ã³ã¯ããã»ã©å€ãããïŒPRïŒ25093ïŒãã»ãšãã©ã®å ŽåïŒã©ã³ã¯N
é
åïŒã§åãçµæãçæããŸããã¹ã«ã©ãŒãŸãã¯ãã¯ãã«ã®ïŒã x
ã®å¯Ÿå¿ãããã¯ãã«ç©ºé次å
ãè¿ãé¢æ°veclength(x)
ã¯ãã€ã³ã¿ãŒãã§ãŒã¹ãå®æãããŸãã
ã«ã¹ã¿ã ããã±ãŒãžã¯ããã¯ãã«ãšããŠåäœããæ°ããåãå®çŸ©ãããšãã«ããããã®é¢æ°ã®å®è£ ãåŠç¿ããå¿ èŠããããŸãã
éå ¬åŒãªäœ¿çšæ³ã§ãé¢æ°ã®å ç©ããèŠãã®ã¯ããªãäžè¬çã§ããç¹ã«ãæé次å ã®ãã¯ãã«ç©ºéãžã®é¡äŒŒæ§ã匷調ããããšããŠããæè²åŠçèšå®ã§ã¯ããã§ãã
ååã¯éèŠãªã®ã§ãéèŠã§ã¯ãªããšã¯èšããªãã§ãã ããã nåç¹°ãè¿ããŸããå ç©ãšå ç©ã¯åããã®ã§ã¯ãããŸããã æœè±¡ãã«ãã«ã空éã§ã®äœæ¥ãå ¬éããæ·±å»ãªè³æã§ã¯ããããããã䜿çšããããšã¯ãããŸããã ç§ã®èšèããããŠã£ãããã£ã¢ãä¿¡é Œãããå Žåã¯ãã³ããŒããŠè²Œãä»ããå®çŸ©ã次ã«ç€ºããŸãã
ç·åœ¢ä»£æ°ã§ã¯ãå ç©ç©ºéã¯å ç©ãšåŒã°ããè¿œå ã®æ§é ãæã€ãã¯ãã«ç©ºéã§ãã ãã®è¿œå ã®æ§é ã¯ã空éå ã®ãã¯ãã«ã®åãã¢ãããã¯ãã«ã®å ç©ãšããŠç¥ãããã¹ã«ã©ãŒéã«é¢é£ä»ããŸãã
æ°åŠã§ã¯ãå ç©ãŸãã¯å ç©ã¯ã2ã€ã®çããé·ãã®æ°ã®ã·ãŒã±ã³ã¹ïŒéåžžã¯åº§æšãã¯ãã«ïŒãåãã1ã€ã®æ°ãè¿ã代æ°æŒç®ã§ãã
èšèªã®çšèªãšæ°åŠçäžè²«æ§ãæ¹åããããã®ãã®æµæã¯ãæ欲ãããããŸãã ç§ãããªãã«æ瀺ããäºå®ã®æ°ã«é¢ä¿ãªããäŸããŠãŒã¹ã±ãŒã¹ã®æ°ã«é¢ä¿ãªãããç§ã¯ãããã§å€§äžå€«ã§ãã以å€ã®åè«ã¯ãããŸããã
@juliohm ãçšèªã¯æ £äŸã®åé¡ã§ãããæ£ç¢ºãã§ã¯ãããŸããã ãã«ãã«ã空éãç¹ã«ç¡é次å 空éã®æ£åŒãªäœ¿çšæ³ã§ã¯ããå ç©ããšããçšèªãã»ãšãã©æä»çã«äœ¿çšãããããšã«åæããŸãã ããããç§ãèšã£ãããã«ãããããç©é¢æ°ããã°ãŒã°ã«ã§æ€çŽ¢ãããšããã®çšèªã®éå ¬åŒãªäœ¿çšæ³ãããããèŠã€ãããŸãã ããã®ãã«ãã«ã空éã®2ã€ã®èŠçŽ ã®å ç©ãåãããšèšããšããã¹ãŠã®æ°åŠè ã¯ãç¡é次å ã®ç©ºéã§ãã£ãŠããå ç©ãåç §ããŠããããšãç¥ã£ãŠããã®ã§ãä»ã«ãªãã®ã§ãæ··ä¹±ã®æ¬åœã®å±éºã¯ãããŸããã ããããç©ããšããçšèªã®æšæºçãªäžè¬åã ãã®ãããããããããšãå éšãã®ã¹ãã«ã®è°è«ãäžå¿çãªåé¡ã§ãããšã¯æããŸããã
ããã§å¿
èŠãªã»ãã³ãã£ã¯ã¹ãšãæ°ãããã«ãã«ã空éãŸãã¯ãããã空éãå®çŸ©ããå Žåã«åãå®è£
ããå¿
èŠã®ããé¢æ°ã®ã»ããã決å®ããããšãéèŠã§ãã çŸåšãæ°ãããã«ãã«ã空éãè¡šãåãå®çŸ©ããå Žåã¯ãããããdot
ãšnorm
ãå®çŸ©ããå¿
èŠããããŸãïŒçŸåšãåŸè
ã®ãã©ãŒã«ããã¯ããªãããïŒã adjoint
ã ãšæããŸããå察空éãªããžã§ã¯ããžã®ãããã³ã°ãå¿
èŠãªå Žåã¯
@Juthoãèšãããã«ãããã¯é
åã®é
åã®å Žåã«ãã£ãŠãã¹ãŠè€éã«ãªããŸããããã¯ãããã«å¿
èŠãªå¯èœæ§ã®ãããã®ãè€æ°ããããã§ãã èãããããã¹ãŠã®ã»ãã³ãã£ã¯ã¹ã«æšæºåãããååãããããã§ã¯ãªãããããã¹ãŠã®äººãæºè¶³ãããåå/ã»ãã³ãã£ã¯ã¹ãèŠã€ããã®ã¯å°é£ã§ãã vecdot
ã»ãã³ãã£ã¯ã¹ã®èª¬æã«ã€ããŠã¯ãïŒ25093ãåç
§ããŠãã ããã ç§èªèº«ãããã§ã¯è¯ãçãããããŸããã
ããã§ããã€ãã®å¯èœæ§
x[i]' * y[i]
ã®åèšã çŸåšãããã¯dot(x,y)
ã§ãã è¡åã®ãã¯ãã«ïŒè¡åãäžããå ŽåïŒã®å
ç©ã§ã¯ãªããçŸåšãå€æ¬¡å
é
åã®ãã¹ãŠãå®çŸ©ãããŠããããã§ã¯ãããŸãããdot(x[i], y[i])
ãšã Number
$ã®å Žåã¯conj(x)*y
ã®åèšã çŸåšãããã¯vecdot(x,y)
ã§ããinner(x,y)
ã¯åžžã«çã®å
ç©ã§ãããšå®çŸ©ãããŠãããé
åã®å Žåã¯åèšinner(x[i],y[i])
ã«ãªããŸããããã¯ãæ¬è³ªçã«@Juthoãå¿
èŠãšãããååž°çå
ç©ãã§ãã ããããè¡åA
ã®å Žåããã®å
ç©ã¯ãçŸåšã®norm
å®çŸ©ã§ããèªå°ãã«ã norm(A)
ãšççŸããŸãã ãããä¿®æ£ããã«ã¯ãè¡åã®norm(A)
ãããã©ã«ãã§ãããããŠã¹ãã«ã ã«å€æŽããå¿
èŠããããŸããããã¯ãåºç¯å²ã«ãããé倧ãªå€æŽã«ãªãå¯èœæ§ããããŸãã質åïŒïŒ25093ã§éšåçã«èª¬æãããŠããŸãïŒã¯ãBaseã§ãããã®3ã€ãã¹ãŠãå¿
èŠãã©ããããŸãã¯2ã€ïŒããã³ã©ã®2ã€ããããŠããããäœãšåŒã¶ãââïŒã§éããããšãã§ãããã©ããã§ãã @Juthoã®ææ¡ã¯ãç§ãç解ããŠããããã«ãåºæ¬çã«Baseã®ãªãã·ã§ã³2ãåé€ãããªãã·ã§ã³3ã«vecdot
ãšvecnorm
ã䜿çšããããšã§ããã¯ãžã¥ãªã¢ã«ããªãç¬ç¹ã§ãããšãã°ç¡é次å
ã®ãã«ãã«ã空éã§ã¯å°ãå¥åŠã§ãã ãã¡ãããããã¯äžçã®çµããã§ã¯ãããŸããã
ãã1ã€ã®å¯èœæ§ïŒ vecdot
ã§è¡ãããšãšã¯å€å°é¢ä¿ãããŸããïŒã¯ã dot
ãçã®å
ç©ã§ããå¿
èŠãããããšãïŒæ»ãïŒããšã§ãã ã€ãŸããåäœ1ãåé€ãã dot(x::AbstractVector, y::AbstractVector)
ãsum dot(x[i],y[i])
$ãšçããããŸãã ããã§ããå€æ¬¡å
é
åã«å¯ŸããŠã¯å®çŸ©ããªãã§ãã ããïŒ norm
ãšã®äžè²«æ§ãä¿ã€ããïŒã
ç§ã®çŸåšã®å人çãªåŸåã¯ã dot
ãçã®å
ç©ïŒ norm
ãšäžèŽããŠããå¿
èŠããããŸãïŒãšããŠå®çŸ©ãããã¯ãã«ã®dot(x[i],y[i])
ã®åèšã«å€æŽããããšã§ãïŒã€ãŸããè¡åã®ãã¯ãã«ã®å ŽåïŒãå€æ¬¡å
é
åã«å¯ŸããŠã¯å®çŸ©ããŸããã 次ã«ã vecdot
ãå®çŸ©ããŠã @ Juthoãææ¡ããããã«ããã©ãŒã«ããã¯vecdot(x,y) = dot(x,y)
ã䜿çšããŠvecdot
$ãååž°çã«åŒã³åºããŸãã æåŸã«ãæ°ããããã«ãã«ã空éãã¿ã€ãã¯dot
ãšnorm
ãå®çŸ©ããå¿
èŠããããšèšããŸãã ããã¯ãç§ã«ãšã£ãŠæãæ··ä¹±ãå°ãªããæãç解ããããå€æŽã®ããã«æããŸãã
ïŒ norm(x) = sqrt(real(dot(x,x)))
ãã©ãŒã«ããã¯ãå¯èœã§ãããã¹ããªã¢ã¹ãªãŒããŒãããŒã«å¯ŸããŠè匱ã§ãããããå€å°å±éºã§ããæè¡çãªçç±ããããã©ãŒã«ããã¯ãšããŠsqrt(dot(x,x))
ã䜿çšã§ããªãããšã«æ³šæããŠãã ããã Real
ã®çµæã§ããã Complex
ã®çµæã§ã¯ãããŸãããïŒ
ãã®æçãªåå¿ãããããšã@stevengj ã ã¡ãã£ãšããã³ã¡ã³ãïŒ
ãã©ãŒã«ããã¯
vecdot(x,y) = dot(x,y)
䜿çšããŸãã æåŸã«ãæ°ããããã«ãã«ã空éãã¿ã€ãã¯dot
ãšnorm
ãå®çŸ©ããå¿ èŠããããšèšããŸãã
ããã«ã¯2ã€ã®åé¡ããããŸãã $ïŒ vecdot
ã¯ãäžè¬çãªã€ãã¬ãŒã¿ãåŠçããããã®Any
åŒæ°ããã§ã«åãå
¥ããŠããããã vecdot(x,y) = dot(x,y)
ãã©ãŒã«ããã¯ã¯ååšã§ããŸããã 2çªç®ã®åé¡ã¯ã dot
ãšnorm
ãããŠãŒã¶ãŒã¿ã€ãã®ãããªãã¯ãã«ãå®çŸ©ããå¿
èŠã®ããçã®å
ç©ãšãã«ã ã«ãããããŠããå Žåãããšãã°Krylovã¡ãœããã䜿çšããŠããã±ãŒãžãäœæããå Žåã§ãå®å
šã«äžè¬çãªãã¯ãã«ã®ãããªåã§æ©èœããã¯ãã§ããããŠãŒã¶ãŒããã¹ããããé
åãŸãã¯å€æ¬¡å
é
åããã¯ãã«ã®ãããªãªããžã§ã¯ããšããŠäœ¿çšãããå Žåã¯ããŸã æ©èœããŸããã ãããã£ãŠã vecdot
ãšvecnorm
ã¯ãäžè¬çãªå
ç©ã§ããããã¯ãã«ã®ãããªãªããžã§ã¯ãã®ãã«ã ã§ãããšç§ã¯äž»åŒµããŸãã ããã¯ãè¡åã®å Žåãã»ãšãã©ã®äººãå®éã«norm
ãèªå°ãããè¡å/æŒç®åã®ãã«ã ã§ããããšãæåŸ
ããŠãããšããäºå®ãšãããäžèŽããŸãã
å®éã®ãŠãŒã¹ã±ãŒã¹ã«ã€ããŠïŒãããäŸå€çãªã±ãŒã¹ã§ã¯ãªãããšã瀺ãããïŒã 確çè¡åã¯æ倧ã®ïŒããã³-ãããããŠã¹ïŒåºæå€ãæã¡ã察å¿ããåºæãã¯ãã«ã¯åºå®å°æ°ç¹ç¢ºçååžãè¡šããŸãã ãã®éåäžè¬åã§ã¯ã確çååžã¯æ£å®å€è¡åïŒå¯åºŠè¡åïŒã«äžè¬åããããã®ãããªè¡åã¯å®å
šã«æ£ã®ããããã€ãŸããããrho -> sum(A[i] rho A[i]^\dagger for i = 1:N)
ã®åºå®ç¹ïŒæ倧åºæå€ã«å¯Ÿå¿ããåºæãã¯ãã«ïŒã§ãããããã£ãŠã rho
ã¯å¯åºŠè¡åã§ããã A[i]
ã¯ãã¹ãŠã®i
ã®è¡åã§ãïŒå®å
šã«æ£ã®ããããè¡šãKrausæŒç®åãšããŠç¥ãããŠããŸãïŒã è¡åã®æ¬¡å
ã倧ããå Žåãåºå®å°æ°ç¹å¯åºŠè¡åãèŠã€ããã«ã¯ã¢ãŒãã«ãã£æ³ãæé©ã§ãã
ç§ã®çŸåšã®å人çãªåŸåã¯ãããããçã®å ç©ïŒãã«ã ãšäžèŽããŠããå¿ èŠããããŸãïŒãšããŠå®çŸ©ãããã¯ãã«ã®ãããïŒx [i]ãy [i]ïŒã®åèšã«å€æŽããããšã§ãã æåŸã«ãæ°ããããã«ãã«ã空éãã¿ã€ãã¯ããããšãã«ã ãå®çŸ©ããå¿ èŠããããšèšããŸãã
ããã¯ãã§ã«å€§ããªæ¹åã§ãã Baseã§inner
ã»ãã³ãã£ã¯ã¹ãæã€ããã«dot
ãææžåãããšãå°ãªããšããŠãŒã¶ãŒã¯äžèŠãªã©ã€ãã©ãªãã€ã³ããŒãããã«ç¬èªã®ã¹ããŒã¹ãå®çŸ©ã§ããŸãã ååä»ãã«ã¯æºè¶³ããŠããŸããããå°ãªããšãæ©èœã¯å¿
èŠãªäººãå©çšã§ããããã«ãªããŸãã
ã¯ããããã«ãã«ã空éãã¿ã€ãã«å®è£ ããããã®ææžåãããã€ã³ã¿ãŒãã§ãŒã¹ããããšäŸ¿å©ã ãšæããŸãã
ãã¡ããããã¯ãã«ç©ºéã®ãã®äžè¬çãªã€ã³ã¿ãŒãã§ã€ã¹ã«ã€ããŠèãããšãäžèšã®ããã«norm
ãå«ãŸããŠããå Žåãããã¯è¡åã®ãããããŠã¹ãã«ã ã«ãªãã¯ãã§ãïŒãã¹ãŠã®é
åã¯ãã¯ãã«ã®èŠçŽ ã§ãããããé«æ¬¡å
é
åã®å Žåã¯äžè¬åããŠãã ããïŒã¹ããŒã¹ïŒã ãã®å Žåãè¡åçšã«å¥ã®ãæŒç®åãã«ã ãé¢æ°ïŒ matnorm
ãŸãã¯opnorm
ãªã©ããŸãã¯norm
ã®ããŒã¯ãŒãåŒæ°...ïŒãå¿
èŠã«ãªããŸãã
@andyferris ãç§ã®æåŸã®ã³ã¡ã³ãã«æ³šæããŠãã ããã norm
ãšdot
ã¯ãé«æ¬¡å
é
åããã¹ããããé
åãªã©ãJuliaã®ãªããžã§ã¯ãã®ãããªãã¯ãã«ã§ãæ©èœããªããããäžè¬çãªãã«ãã«ã空éã€ã³ã¿ãŒãã§ãŒã¹ã«ã¯ãªããŸããã ãããã£ãŠã vecdot
ãšvecnorm
ã¯ããã®ããã®ãããè¯ããïŒæãå£ãã«ãããšããæå³ã§ïŒåè£ã§ãã
ãã®ãããã¯ã埩掻ãããããšã¯ãè¿ãå°æ¥ããã®èšèªã§è¡ããšäºæ³ãããæ°åŠã®ã¿ã€ãã«éåžžã«é¢é£ããŠãããšæããŸãã å ç©ã®äžè¬æ§ãšã»ãã³ãã£ã¯ã¹ãæ¹åããããã«äœãè¡ããããã«ã€ããŠã®ã³ã³ã»ã³ãµã¹ã¯ãããŸããïŒ
ããããç©ã«é¢ããç§ã®å人çãªæ°åŠãªã³ãããžãŒã®äžéšã§ãã
ãããèšæ¶ã磚ã/ã³ã³ã»ã³ãµã¹ãããããã®ãå©ããããšãã§ããã°
ããŒãã¹ïŒãŠã£ãããã£ã¢ã®å¯©å€ã¯ãããŸãã
ãã®æç¹ã§ãïŒ25093ã§ã®@Juthoã®ææ¡ã¯ããã®ã³ã³ããã¹ãã§ã¯vec*
ã®çšèªãå°ãå¥åŠã§ãããæãæ··ä¹±ã®å°ãªãå€æŽã®ããã«èŠããŸãã
vec*
ã®çšèªãããããããšã«åæããŸãã ãã®ãããé¢æ°ã®ååãæšæºåã«å€æŽãããšããã¹ãŠã®ãŠãŒã¶ãŒã«ãšã£ãŠæçã«ãªããŸãã
åæ§ã«ã vec*
ã®çšèªãå¥åŠã§ããããšã«åæããŸãã
vecdot
ã®ä»£ããã«ãæ°ããã¡ãœããinner
ãå°å
¥ããããšãã§ããŸããã vecnorm
ãã眮ãæãããããã®é©åãªååãããããŸããã å®éã vecnorm
ãæªããšã¯æããŸããããã¯ãã«ãã«ã ã¯ãå¿
èŠãªæäœã®ååã«ç¢ºç«ãããæ瀺çãªçšèªã§ãã
ããã§ã®åºæ¬çãªåé¡ã¯ãéåžžã®norm(A)
ãå
ç©ã«å¯Ÿå¿ããªãè¡åãšå€æ¬¡å
é
åãããã³äžèšã®é
åã®é
åã«ãããŸãã ãããã®å Žåãã©ã®å
ç©ãæå³ãããŠãããã瀺ãããã«ãããçšåºŠã®ææ§æ§è§£æ¶ïŒããšãã°vec*
ãŸãã¯fro*
ïŒãå¿
èŠã§ãã
ããã©ã«ãã§vecdot
ã«èšå®ãããŠããinner
é¢æ°ã䜿çšããããšãã§ããŸãããåãé¢æ°ã«2ã€ã®ååãä»ããã®ã¯å°ãã°ãããŠããããã«ã ãäœãšåŒã¶ãââãšããåé¡ããããŸãã
ãŸãã vecdot
ã®ååã¯å¥åŠã ãšæããŸããå®éããããååšããããšããç¥ããããã®ããã«ç¬èªã®é¢æ°ãäœæããŠããŸãã... inner
ãšåŒã°ããŸãã
ç§ã®ç解ã§ã¯ãå¥åŠãªvecdot
ãå»æ¢ããŠã inner
$ãåªå
ãããŠãŒã¶ãŒãç¬èªã®ã¹ããŒã¹ãå®è£
ããããã®å
ç©ã»ãã³ãã£ã¯ã¹ãäžããããšãã§ããŸãã
norm
ã«ã€ããŠã¯ãããããŸããã ç§ã¯ãã®åé¡ãéããŠå
ç©ã«ã€ããŠè°è«ããŸããããããããBaseã®èŠç¯ã®ç¶æ
ã«ã€ããŠè°è«ããããã«å¥ã®åé¡ãé©åã§ããã§ãããã
vecdot
ãšvecnorm
ã®ä»£ããã«ã$ inner(x,y)
ãšinnernorm(x) = sqrt(inner(x,x))
ïŒãªãŒããŒãããŒãåé¿ããããã«æé©åãããç¹æ®ãªã±ãŒã¹ã䜿çšïŒã䜿çšã§ãããšæããŸãã innernorm
ã¯å°ãçããã§ãããæèäžã¯ããªãæ確ã§ãã
ãã®å€æŽã«è³æã§ãã inner
ãšinnernorm
ãšããååã¯æ確ã§ãæŠå¿µãšäžèŽããŠããŸãã 圌ããJuliav1.0ã«å°éã§ãããããã®ã«ãšæããŸãã
inner
ãšinnernorm
ã¯ç§ã«ã¯åé¡ãªãããã§ãã
ç§ã®æèŠã§ã¯ãç§ãã¡ã®norm
é¢æ°ã¯ãJuliaã®æ±çšé¢æ°ãšãã£ã¹ãããã·ã¹ãã ãããã³ãã£ã¹ããããè¡ãããã¹ãã§ã¯ãªããã¯ãªã¢ã€ã³ã¿ãŒãã§ã€ã¹ããšåŒã°ãããã®ã«ããŸãããŸãé©åããŠããŸãããã»ãã³ãã£ãã¯ã®éžæãå®è£
ã®éžæã ãã å人çã«ã¯ãã norm
ã¯ãã¯ãã«ç©ºéã®èŠçŽ ã®ãã«ã ãè¿ãããšèšãããšãã§ããŸããããã§ãè¡åãšç·åœ¢æŒç®åã¯äŸç¶ãšããŠãã¯ãã«ç©ºéã®èŠçŽ ã§ãïŒããããè¿œå ããŠã¹ã«ã©ãŒãæããããšãã§ããŸãïŒ ã ããšãã°ãã opnorm
ã¯ç·åœ¢æŒç®åã®æŒç®åãã«ã ãè¿ããïŒãŸãã¯matnorm
ãªã©ïŒã䜿çšããããšãã§ããŸãã
çŸæç¹ã§ã¯ãã norm
ã¯ãèŠçŽ ãç·åœ¢æŒç®åã§ããªãéãããã¯ãã«ç©ºéã®èŠçŽ ã®ãã«ã ãè¿ããŸããç·åœ¢æŒç®åã®å Žåã¯ã代ããã«æŒç®åãã«ã ãæäŸããŸããã å人çã«ã¯ã掟é£ã¯æ±ºããŠé©ãã¹ãããšã§ã¯ãªããšæããŠããŸãã
ã€ãŸããåžžã«ãã¯ãã«ãã«ã ãå®è¡ããé¢æ°ãšãåžžã«æŒç®åãã«ã ãå®è¡ããå¥ã®é¢æ°ã奜ã¿ãŸããäž¡æ¹ãå®è¡ããããšããé¢æ°ã¯ãããŸããã
@andyferris ïŒ+1ïŒç©ºéå
ã®å
ç©ã«ãã£ãŠèªçºãããèŠç¯ã§ã¯ãªãç¹å®ã®èŠç¯ã¯ãããå
·äœçãªååãæã€ããšãã§ããŸãã norm
ãšããååã¯ãæ£ç¢ºã«norm(x) = sqrt(inner(x,x))
ãæå³ãããŠãŒã¶ãŒã¿ã€ãã®å¿
èŠã«å¿ããŠåå®çŸ©ã§ããŸãã
å人çã«ã¯ãã
norm
ã¯ãã¯ãã«ç©ºéã®èŠçŽ ã®ãã«ã ãè¿ãããšèšããŸãã
çŸåšã®norm
é¢æ°ã¯ããã®å®çŸ©ãæºãããŠããŸãã è¡åã®å Žåããã¯ãã«ç©ºéã®å®å
šã«æå¹ãªãã«ã ã§ããèªå°ïŒæŒç®åïŒãã«ã ãèšç®ããŸãã ïŒãã¯ãã«ç©ºéã¯å
ç©ãèŠç¯ãæã£ãŠããå¿
èŠã¯ãããŸãããïŒ
æŒç®åãã«ã ãããã¯ãã«ç©ºéã®ãã«ã ãã§ã¯ãªããšèããå Žåãããã«ã ãã®å®çŸ©ã«ã€ããŠå€å°æ··ä¹±ãããããããŸããã
ããã¯ã norm
ãšinnernorm
ã®äŸ¿å©ãªéãã§ããããŸãã norm
ãå®çŸ©ããå Žåãããã¯ããªãããããã空éïŒãŸãã¯å°ãªããšããã«ã ãã¯ãã«ç©ºéïŒãæã£ãŠããããšã ããæå³ãããšèšããŸãã innernorm
ãå®çŸ©ãããšããã«ãã«ã空éïŒãŸãã¯å°ãªããšãå
ç©ç©ºéïŒãããããã®ãã«ã ãinner
ãšäžèŽããŠããããšãæå³ããŸãã
ããšãã°ãé©å¿æ°å€ç©åïŒala quadgkïŒã¯ãå ç©ç©ºéã§ã¯ãªãããã«ã ãã¯ãã«ç©ºéã®ã¿ãå¿ èŠãšãããã®ã§ãã
確ãã«ãç³ãèš³ãããŸããããç§ã¯ããããç§ã®èšèªã«å°ãäžæ£ç¢ºã§ããã ããŸããŸãªæŒç®åãã«ã ãå«ãããã¯ãã«ç©ºéã«ã¯æããã«å€ãã®æå¹ãªãã«ã ããããŸãã
ç§ãåŸãŠããã®ã¯ãæé»çã§ã¯ãªãæ瀺çã§ãããšããåºæºã®éžæã奜ããããããªããšããããšã ãšæããŸããïŒ ãŸããåãé¢æ°ã䜿çšãããšïŒããšãã°ãè¿œå ã®ããŒã¯ãŒãåŒæ°ãªãã§ïŒããåãããã«ã ãåŸãããŸãããã®å ŽåããŠãŒã¯ãªããã¯AbstractArray
ã«å¯ŸããŠããã¶ãé²åŸ¡å¯èœãªéžæã®ããã«èŠããŸãã
ããã¯ã
norm
ãšinnernorm
ã®äŸ¿å©ãªéãã§ããããŸãã ãã«ã ãå®çŸ©ããå Žåãããã¯ããªãããããã空éïŒãŸãã¯å°ãªããšããã«ã ãã¯ãã«ç©ºéïŒãæã£ãŠããããšã ããæå³ãããšèšããŸããinnernorm
ãå®çŸ©ããå Žåããã«ãã«ã空éïŒãŸãã¯å°ãªããšãå ç©ç©ºéïŒãããããã®ãã«ã ãinner
ãšäžèŽããŠããããšãæå³ããŸãã
ããã¯çã«ããªã£ãŠããããã«èŠããŸããããªããžã§ã¯ãã«innernorm
ãããå Žåãå¥ã®norm
ãå¿
èŠã«ãªãã®ã¯ãªãã§ããããã ãããã¯ããããã空éã®ã€ã³ã¿ãŒãã§ãŒã¹ã«ã¯norm
ãå¿
èŠã§ãããå
ç©ç©ºéã®ã€ã³ã¿ãŒãã§ãŒã¹ã¯norm
ãšinner
ã®äž¡æ¹ãæäŸããããšãææ¡ããŸãã ãããã®é¢æ°ã¯ãå¿
èŠã«å¿ããŠãããããŸãã¯å
ç©ç©ºéã®ãªããžã§ã¯ããæåŸ
ããæ±çšã³ãŒãã§äœ¿çšã§ããŸãïŒç·šéïŒãããã空éã§æ©èœããã³ãŒãã¯èªåçã«å
ç©ç©ºéã§ãæ©èœãããšèããããŸãïŒã
norm(x)
ã¯åžžã«ãããçš®ã®èŠçŽ ããšã®ãŠãŒã¯ãªãããã«ã ïŒã€ãŸããè¡åã®ãããããŠã¹ãã«ã ïŒãåç
§ããŠãããšææ¡ããŠãããšæããŸããã€ãŸããåºæ¬çã«vecnorm
ã¯ååž°ã®å Žåãæ³ãšããŠããŠããŸãã ãã®å Žåã dot(x,y)
ã察å¿ããå
ç©ã«åå®çŸ©ããããšãã§ããŸãïŒ inner
ãæ©èœããŸããã dot
ã«ã¯äžçœ®ããªã¢ã³ãx â
y
ã®å©ç¹ããããŸãïŒã
ååãšããŠããã§åé¡ãããŸããããããã¯é倧ãªå€æŽã§ããã0.7ã®åã«å°ãé ããå¯èœæ§ããããŸãâŠ
L2ã¯é«æ¬¡å
ã§ãè¯ãããã©ã«ãã§ããïŒ
ãã®èšäºã¯è·é¢ã«ã€ããŠè©±ããŸãããããã¯èŠç¯ã«ãé¢ä¿ããå¯èœæ§ããããŸã
https://stats.stackexchange.com/questions/99171/why-is-euclidean-distance-not-a-good-metric-in-high-dimensions
ãã®å ŽåãdotïŒxãyïŒã察å¿ããå ç©ã«ãªãããã«åå®çŸ©ããããšãã§ããŸãïŒå ç©ãæ©èœããŸããããããã«ã¯äžçœ®ããªã¢ã³ãxâ yã®å©ç¹ããããŸãïŒ
dot
å®å
šã«åãé€ãããšã¯ã§ããŸããïŒ äžçœ®èšæ³ã¯ã dot
ãšããé¢æ°ã®ååšãšã¯ç¡é¢ä¿ã§ããå¿
èŠããããŸãã Juliaé
åã®inner
ã¡ãœããã䜿çšããŠäžçœ®ãå®çŸ©ããã ãã§ãã ããã¯å¯èœã§ããïŒ
ãããå®éã®å ç©ã§ãããŠãŒã¯ãªãã幟äœåŠã®R^nã®xãã¯ãã«ãšyãã¯ãã«ã®éã®å ç©ã®äŸ¿å©ãªè¡šèšxâ yã§ãã
@stevengjããã¯è¯ãèŠçŽã ãšæããŸãã
@ o314 L2ã¯é«æ¬¡å
ã®è¯ãããã©ã«ãã§ããïŒ ããããããã§ã¯ãããŸããããããšãã°norm(v::AbstractVector)
ã«ãã£ãŠéžæããããã«ã ã$ïŒ$ length(v)
ïŒ$ã«äŸåããŠããå Žåã¯ãæ¬åœã«å«ãã§ã:)è¡åãé«æ¬¡å
é
åããäºåºŠãšæšæž¬ããããªãã®ã§ããã ãL2ã«ã¯å€§ããããŸãã-ããããããã¯ãŠãŒã¶ãŒãæ瀺çã«ããŒã¯ããå¿
èŠããããšæããŸããïŒ
@juliohmããã¯ééããªãå¯èœã§ãããåè¿°ã®ããã«ããããã¯ç§ãã¡ãææ¡ããŠããç Žå£çãªå€æŽã§ãã ïŒç¹°ãè¿ããŸãããååž°çãªå Žåã«äœããã¹ãããããã³inner
ãšdot
ã®éã®èããããéãã«é¢ãã以åã®è°è«ãæ³ãšããŠïŒã
@stevengj ã @ andyferrisãæå³ããããšã®ç§ã®è§£éã¯ãããã¯ã¿ã€ãã³ã°ã®ããã«ããŠãŒã¶ãŒããªããžã§ã¯ãããã¯ãã«ãšããŠè§£éããããã©ãããå€æããã®ãé£ãããšããããšã§ãïŒãããŠå¯Ÿå¿ãããã¯ãã«p
-normã䜿çšããŸãïŒãŸãã¯æŒç®åãšããŠïŒãããŠèªå°ãããp
-normãèšç®ããŸãïŒã ãããã£ãŠãã©ã®ãããªåäœãå¿
èŠããæ瀺çã«æå®ãã以å€ã«éžæè¢ã¯ãªããšæããŸãã çŸåšã®ã¢ãããŒãã¯ã norm
ãå
¥åã«åºã¥ããŠãã¯ãã«ãã«ã ãšèªå°ãã«ã ã®ã©ã¡ããéžæããããæé»çã«æšæž¬ããããšãããšããæå³ã§å°ãå¥åŠã§ãã vecnorm
ã¯ãå¿
èŠãªããšãæ瀺çã«æå®ããæ¹æ³ã§ãããã¯ãã«ãã«ã ïŒãããvecnorm
ã®ãããªæªãååãèŠã€ããããªãçç±ã§ããããŸãïŒã ããæ ¹æ¬çãªå€æŽã¯ã norm
ãåžžã«ããã©ã«ãã§ãã¯ãã«ãã«ã ã«ããïŒããŒã¯ãŒãïŒåŒæ°ãŸãã¯å¥ã®é¢æ°ã䜿çšããŠãèªå°ãã«ã ãå¿
èŠãªå Žåã«æ瀺çã«æå®ããããšã§ãã
äžæ¹ãç§ã¯innernorm
ãšããååãæ°ã«ããŸãããããã¯ããããå
ç©ããŒã¹ã®æšæºã§ãããšããç¹ã§æ瀺çã§ãïŒã€ãŸãããŠãŒã¯ãªããã®å Žåã¯åžžã«p=2
ïŒã ã«ã¹ã¿ã ãªããžã§ã¯ãã®(vec)norm
ãã€ã³ã¿ãŒãã§ã€ã¹ã®äžéšãšããŠãªãã·ã§ã³ã®åŒæ°p
ããµããŒãããå¿
èŠããããã©ãããå€æããã®ã¯é£ãããšæããŸããç§ã®ãŠãŒã¹ã±ãŒã¹ã®äžã«ã¯ã p=2
ã ããç°¡åã ããã§ããèšç®ããŸãã
ãããå®éã®å ç©ã§ãããŠãŒã¯ãªãã幟äœåŠã®R^nã®xãã¯ãã«ãšyãã¯ãã«ã®éã®å ç©ã®äŸ¿å©ãªè¡šèšxâ yã§ãã
äžè¬çãªïŒè€éãªïŒãã¯ãã«ç©ºéã®ã³ã³ããã¹ãã§x â
y
ãšããè¡šèšãèŠãããšãæãåºããªããšããæå³ã§ãç§ã¯ããã«åæããŸãã ãã®ãããªå Žåãæ°åŠè¡šèš(x,y)
ãŸãã¯ãã£ã©ãã¯è¡šèš< x | y >
ã®ã¿ã䜿çšããããšæããŸãã é»ç£æ°åŠã§ã¯ã3次å
ãŠãŒã¯ãªãã空éã®ãã¯ãã«ã«E â
B
ã䜿çšããããšãå€ããè€çŽ æ°è¡šèšïŒã€ãŸãããã§ãŒã¶ïŒã䜿çšããŠããããã¯è€çŽ å
±åœ¹ãæå³ããŸããã å¿
èŠã«å¿ããŠããã®ãããªå Žåãè€çŽ å
±åœ¹ãæ瀺çã«ç€ºãããŸãã ãããã£ãŠã dot
ãè€éãªãŸãã¯ãšã«ããŒãå
±åœ¹ãªãsum(x_i * y_i)
ã«ãªãã inner
ãäžè¬çãªå
ç©ç©ºéã®æ£ããå
ç©ã«ãªã£ããšããŠãããŸããŸããã æ®å¿µãªãããããã¯ããããåäžã®ãªãªãŒã¹ãµã€ã¯ã«ã§ã¯å®è¡ã§ããŸããã
L2ã¯é«æ¬¡å ã®è¯ãããã©ã«ãã§ããïŒ ããããããã§ã¯ãããŸããããããšãã°ãnormïŒv :: AbstractVectorïŒã«ãã£ãŠéžæããããã«ã ãlengthïŒvïŒã«äŸåããŠããå Žåã¯ãæ¬åœã«å«ãã§ã:)è¡åãŸãã¯é«æ¬¡å é åããL2ã«ã¯å€§ããããŸãã-ããããããã¯ãŠãŒã¶ãŒãæ瀺çã«ããŒã¯ããå¿ èŠããããšæããŸããïŒ
ç§ã¯2Dãš3Dãæ±ãBIMã®äžçã§åããŠããŸããã4dã5dã6dã¯7dãããããŸããã ãã以äžé²ãããšã¯ãããŸããã ã©ã®æç¹ã§ããã©ã®æ¬¡å ã§äœæ¥ããã©ã®ã¢ã«ãŽãé¢äžããŠããããããããŸãã ããã§ååã§ãã
MLãæ å ±æ€çŽ¢ãªã©ã§åã人ã®èŠç¹ãè¡šçŸããããšã¯ã§ããŸãããããã«ã¯ãnorminfã®æ¹ããããããããŸããã ç§ã®ãã¡æ®ãã§éèŠãªã®ã¯æšæž¬å¯èœæ§ãšå®å®æ§ã§ãã MLã®äººã ãèªåãã¡ã®ãã®ã«ç°ãªãããã©ã«ããå¿ èŠãšããŠããç§ã¯ãŸã£ããã·ã§ãã¯ãåããŸããã æ··ä¹±ããªããã°ã äŸãã°ã ã³ã³ãã€ã«æã«æ瀺çãã€éçã«æ±ºå®ãããŸãã ãããã¢ã«ãŽã¹ã®é©çšäžã«å®å®ããŠäžè²«ããŠããå Žåãããã¯ããã«èŽ æ²¢ã§ãã
arrayïŒsimilarããã€ã³ã¹ãã¬ãŒã·ã§ã³ãåŸãŠããŸããå®å šã«ã¯å®è£ ãããŠãããããã¹ããããŠããŸããã
norm2 = x -> x |> inner |> sqrt
norminf = ...
NMAX = 10
for N in 1:NMAX
<strong i="13">@eval</strong> begin norm(a::Array{T,N}) where {T} = norm2 end
end
norm(a::Array{T,n}) where {T} = norminf
ããããå®å šã«åãé€ãããšã¯ã§ããŸããïŒ äžçœ®èšæ³ã¯ãããããšåŒã°ããé¢æ°ã®ååšãšã¯ç¡é¢ä¿ã§ããå¿ èŠããããŸãã Juliaé åã®innerã¡ãœããã§äžçœ®ãå®çŸ©ããã ãã§ãã ããã¯å¯èœã§ããïŒ
norm(x::AbstractVector, p::Real=2) = vecnorm(x, p) # https://github.com/JuliaLang/julia/blob/master/stdlib/LinearAlgebra/src/generic.jl#L498
vecdot(x::Number, y::Number) = conj(x) * y # https://github.com/JuliaLang/julia/blob/master/stdlib/LinearAlgebra/src/generic.jl#L657
dot(x::Number, y::Number) = vecdot(x, y) # https://github.com/JuliaLang/julia/blob/master/stdlib/LinearAlgebra/src/generic.jl#L659
function dot(x::AbstractVector, y::AbstractVector) # https://github.com/JuliaLang/julia/blob/master/stdlib/LinearAlgebra/src/generic.jl#L677
# Call optimized BLAS methods for vectors of numbers
dot(x::AbstractVector{<:Number}, y::AbstractVector{<:Number}) = vecdot(x, y) # https://github.com/JuliaLang/julia/blob/master/stdlib/LinearAlgebra/src/generic.jl#L698
Dot / vecdotã¯ãå ±åœ¹ã䜿çšãããã€BLASã«ç§»åãããã決å®ããããšãæå³ããŸãã ããã¯ã©ããã§åŠçããå¿ èŠããããŸãã ãã ããããã¯åäžã®åå空éã§ç®¡çã§ããå¿ èŠããããŸãã
L2ã¯é«æ¬¡å ã®è¯ãããã©ã«ãã§ããïŒ ããããããã§ã¯ãªã
L2ã¯ãç¡é次å 空éïŒé¢æ°ãªã©ïŒã®æãäžè¬çãªåºæºã§ããããŸãã ä»»æã®ãã¯ãã«ç©ºéãæåŸ ããã®ã劥åœãªããã©ã«ãã ãšæããŸãã
ãã¡ãããä»ã®èŠç¯ãå©çšã§ããããã«ãããã®ã§ãã norm(x)
ãå¯èœãªéãèŠçŽ ããšã®L2ã«åå®çŸ©ãããšã norm(x, p)
ã¯èŠçŽ ããšã®Lâã«ãªãã察å¿ããèªå°/ã«å¯ŸããŠä»ã®é¢æ°ïŒ opnorm
ãªã©ïŒãå¿
èŠã«ãªããŸããäœçšçŽ ãã«ã ã
äžè¬çãªïŒè€éãªïŒãã¯ãã«ç©ºéã®ã³ã³ããã¹ãã§
x â y
ãšããè¡šèšãèŠãããšãæãåºããªããšããæå³ã§ãç§ã¯ããã«åæããŸãã
å¥ã®ã¹ã¬ããIIRCã§ããã€ãåŒçšããŸããïŒããšãã°ãBLASã¯è€éãªå
ç©ã«dot
ã䜿çšããé¢æ°ã®å
ç©ã®çšèªã䜿çšããŠãæè²åŠçãœãŒã¹ãèŠã€ããããšãã§ããŸãïŒã ãŸãã«ãå
ç©ããšããçšèªã¯ãéåžžããå
ç©ã®äžè¬åããšåŒã°ããŸãã ãŠãŒã¯ãªããå
ç©ã®dot
ã®è¡šèšã«é©ã人ã¯ããªããšæããŸãããŸããäžçœ®æŒç®åããããšäŸ¿å©ã§ãã
ãã¡ããã dot
ããã®ãŸãŸã«ããŠã inner
ãå°å
¥ããããšãã§ããŸãããããã¯çŽããããäºåæ³ãçã¿åºããšæããŸããæãäžè¬çãªã±ãŒã¹ã§ã¯ãé¢æ°ã¯åçã§ãããå¥åŠãªã±ãŒã¹ã§ã¯ïŒäŸãã°ãè¡åã®é
åïŒãããã¯ç°ãªããŸãã
ããããç¹°ãè¿ãã«ãªããŸãããå€æŽãå£ãã«ã¯å°ãé
ããå¯èœæ§ãããããã innernorm
ãšinner
ã«é Œããªããã°ãªããªãå¯èœæ§ããããŸãã ãããã«ããã誰ããã§ããã ãæ©ãPRãäœæããå¿
èŠããããŸãã
ã³ã³ã»ã³ãµã¹ãã©ãŒã ã®åççãªå°ºåºŠãããã°ãé¢é£ããïŒçãïŒã¿ã€ã ã¹ã±ãŒã«ã§ã®å®è£ ã®èª¿æ»ã«ããçšåºŠã®åž¯åå¹ ãè²»ããããšãã§ãããããããŸãããæœåšçãªé倧ãªå€æŽãå«ãŸããŸãã ãããã®æäœã®ã»ãã³ãã£ã¯ã¹ãæ確ã«ããæ瀺çãªååãä»ãããšããæ欲ã«æè¬ããŸãã äžçªïŒ
2ã€ã®äž»ãªãªãã·ã§ã³ããããŸãã
ããŒãã¬ãŒã¯ãæ©èœãè¿œå ããŸãïŒ inner(x,y)
ããã³innernorm(x)
ã vecdot
ãšvecnorm
ã眮ãæããé
åã®é
åãååž°çã«åŠçããŸãã
éå ±ïŒ norm(x,p=2)
ãåžžã«èŠçŽ ããšã«ååž°çã«å€æŽãã vecnorm
ã眮ãæããæŒç®å/èªå°ãã«ã ã«æ°ããé¢æ°opnorm
ãå°å
¥ããŸãã vecdot
ã眮ãæããŠã察å¿ããèŠçŽ ããšã®å
ç©ãdot(x,y)
$ã«ããŸãã ïŒãŸãã¯ãååãinner
ã«å€æŽããŸãããäžçœ®æŒç®åããããšäŸ¿å©ã§ãã dot
ãšinner
ã®äž¡æ¹ãããã®ã¯é¢åã§ããïŒ
ãŒãããèšèšããå Žåã¯2ãéžæããŸããã norm
ã®æå³ãé»ã£ãŠå€æŽããã«ã¯æ··ä¹±ã倧ããããå¯èœæ§ããããŸãã
äžéãªãã·ã§ã³ã®1ã€ã¯ã inner
ãšinnernorm
ãå®çŸ©ãïŒ vecdot
ãšvecnorm
ãå»æ¢ïŒã norm(matrix)
ãopnorm
ã«å»æ¢ããããšã§ãã norm(matrix) = innernorm(matrix)
ãåå°å
¥ããŸãã ããããã°ãæçµçã«ã¯inner
ãšnorm
ã䜿çšã§ããããã«ãªãã dot
ãé
åã®ãã¯ãã«ã®çŸåšã®å¥åŠãªç£ãšããŠæ®ããŸãïŒ inner
ãšäžèŽããŸãïŒãæ°å€ã®ãã¯ãã«ã®å Žåã¯
innernorm
ã®å¥åŠãªç¹ã®1ã€ã¯ãL1ãŸãã¯Linfã®ãèŠçŽ ããšã®ããã«ã ãæå®ããæ¹æ³ãå¿
èŠãªããšã§ãããã©ã¡ããå
ç©ã«å¯Ÿå¿ããŠããªãããã innernorm(x,p)
ã¯å°ã誀称ã§ãã
ç§ã¯ããªãã®äžéãªãã·ã§ã³ã奜ãã§ãã
äžã§è¿°ã¹ãããã«ãç§ã¯innernorm(x)
ãšããååã奜ãã§ããããã¯ã p=2
ãæå³ãã2çªç®ã®åŒæ°ããã£ãŠã¯ãªããªãããã§ãã å
ç©ãã«ã ã®èšç®æ¹æ³ããç¥ããªããªããžã§ã¯ãããããŸãã ããããçŸåšã®(vec)norm
ã§ã¯ã p
åŒæ°ãæ³å®ãããBaseã€ã³ã¿ãŒãã§ã€ã¹ã®äžéšã§ãããã©ãããäžæã§ããããã2çªç®ã®åŒæ°ãçç¥ãããããµããŒãããããããããŸããããã ãã p != 2
ãæ瀺çã«ãã§ãã¯ãããšããšã©ãŒãçºçããŸãã
ããããææ¡ã®äžé段éã§éæšå¥šã§ã¯ãªãæ¹æ³ã§vecnorm(matrix, p!=2)
ãå®è¡ã§ããªããšããåé¡ããããŸãã
ãŸããäžéãªãã·ã§ã³ãæ°ã«å ¥ã£ãŠããŸããããã«é倧ãªå€æŽãå ããã®ã§ã¯ãªããèŠç¯ã®éæšå¥šã®é©åãªãµã€ã¯ã«ã確å®ã«å®è¡ããããšèããŠããŸãã ïŒãŠãŒã¶ãŒãšããŠãé倧ãªå€æŽã¯ç§ãæããããŸãããv1.0ã®ã³ãŒãã®éæšå¥šãä¿®æ£ããããšã¯ãå°æ¥ã®ããã®ã¯ãªãŒã³ã§æ確ãªã³ãŒããžã®æè³ã®ãããªãã®ã ãšæããŸãïŒã
å®éã«innernorm
ãå¿
èŠã§ããããããšãä»ã®ãšããvecnorm
ã䜿çšã§ããŸããïŒåŸã§norm
ãåªå
ããŠvecnorm
ãå»æ¢ããŸãïŒïŒ
dot
ãinner
ã«çœ®ãæããã ãã§ã¯ãå®éã«éšããèµ·ããå¯èœæ§ã¯ãããŸãã...å
ç©ããããç©ã®äžè¬åã§ããããšãååã«æããã ãšæããŸãã
å€æŽã¯ã2ã€ã®å¥ã ã®PRã§å®è£ ã§ããŸãã
dot
ãinner
ã«çœ®ãæããŠãäžè¬çãªæå³ãä»ããŸãã å¿
èŠã«å¿ããŠãäžçœ®\cdot
è¡šèšãJuliaé
åéã®å
åŽãæãããã«ããŸããç§ã®ç解ã§ã¯ãPR1ã¯Juliav1.0ããåã«ããŒãžãããå¯èœæ§ããããŸãã å£ããŠããŸããã
dot
ãinner
ã«çœ®ãæããŠãã dot
ã¯çŸåšãé
åã®é
åã®çã®å
ç©ã§ã¯ãªããããå£ããããšã«ãªããŸãããããã£ãŠãååãå€æŽããã ãã§ãªããæå³ãå€æŽããããšã«ãªããŸãã ç§ã¯æå³ãçã®å
ç©ã«å€æŽããããã®ãã®ã§ãããæå³ãå€æŽããŠãïŒçã®å
ç©ãšããŠå®çŸ©ããïŒã dot
ãšç¶Žãç¶ããããšã«åé¡ã¯ãããŸããã
ãããã£ãŠã0.7ã§ã¯æ¬¡ã®ããšãã§ããŸãã
norm(matrix)
ãopnorm(matrix)
ã«ã norm(vector of vectors)
ãvecnorm
ã«å»æ¢ããŸããsum
dot([vector of arrays], [vector of arrays])
ãéæšå¥šã«ããŸããvecdot(x,y)
ãšvecnorm(x, p=2)
ããŠãŒã¯ãªããå
ç©/èŠç¯ïŒ p=2
ã®å ŽåïŒã§ãããããããååž°çã«ãããšããŸãïŒããã¯å°ãå£ããŠããŸãããå®éã«ã¯ãããã倧ããããšã§ã¯ãããŸããïŒ ã次ã«ã1.0ã§ã¯ïŒ
vecnorm
ãnorm
ã«ã vecdot
ãdot
ã«å»æ¢ããŸãã ïŒããã1.0ãªãªãŒã¹ã«ãŒã«ã§èš±å¯ãããŠãããã©ããããããªãã@ StefanKarpinskiïŒïŒïŒé©ãã¹ãããšã«ã numpy.inneré¢æ°ã¯å¿
ãããå
ç©ã§ã¯ãªãããšã«æ³šæããŠãã ããããããã inner
ãšdot
ã«é¢ããNumPyã®çšèªã¯ããã°ããã®éå¥åŠã§ãããïŒ
ç§ããããdot
ãšã€ã¥ââãç¶ããããšã奜ãçç±ïŒ
dot
ã¯ãŠãŒã¯ãªããå
ç©ã®ããäžè¬çãªååã§ãã ïŒæ°åŠè
ã¯ãä»»æã®ãã«ãã«ã空éã®å
ç©é¢æ°ã«dot
ãšããååã䜿çšããããšã«ç°¡åã«æ
£ããŸãããå
ç©ãã¯ããã®ãããªç©ºéã«ä»ã®å¯èœãªæå³ã¯ãããŸãããïŒinner
ãšdot
ã®äž¡æ¹ããããšãæ··ä¹±ããå ŽåããããŸããäžèŽããå Žåãããã°ãäžèŽããªãå Žåãããããã§ãïŒçŸåšã®dot
ã®æå³ãç¶æããå ŽåïŒãinner
ã¯ã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ã§ä»ã®å€ãã®æœåšçãªæå³ãæã£ãŠãããããBaseãããã®ååããšã¯ã¹ããŒãããã®ã¯ããé¢åã§ããã€ã³ããŒãšããååã«å¯Ÿããå察ã«ã€ããŠè©³ããæããŠãã ããã ãŸã åââãããªã
ãã®ã¹ã¬ããã®ãã¹ãŠã®äººãçšèªã«å察ããããšã奜ãçç±ã¯
åæããïŒ
2018幎5æ15æ¥ç«ææ¥ãåå5æ13åã¹ãã£ãŒãã³G.ãžã§ã³ãœã³[email protected]
æžããŸããïŒ
ïŒnumpy.innerã«æ³šæããŠãã ãã
https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.inner.html
é©ãã¹ãããšã«ãé¢æ°ã¯å¿ ãããå ç©ã§ã¯ãããŸãããïŒâ
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/JuliaLang/julia/issues/25565#issuecomment-389144575 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/ADMLbdcpeWo7M4prYz76NoqUPIkfVPP3ks5tysZlgaJpZM4ReGXu
ã
çç±ã®ã©ããç§ã«èª¬åŸåããããŸããïŒ
>>
- äžçœ®ããªã¢ã³ãããããšäŸ¿å©ã§ãã
ã¯ããååãå€æŽããŠããäžçœ®èšæ³ã¯åŒãç¶ãååšã§ããŸãã
äžã§èª¬æããããã«å åŽã
>>
- éåžžã®æé次å ã§åäœããéæ°åŠè åã
ãã¯ãã«ç©ºéããããã¯ãŠãŒã¯ãªããå éšã®ããäžè¬çãªååã§ã
補åã ïŒæ°åŠè ã¯ãååã®ãããã䜿çšããããšã«ç°¡åã«é©å¿ããŸã
ä»»æã®ãã«ãã«ã空éã®å ç©é¢æ°âãå ç©ãã«ã¯
ãã®ãããªã¹ããŒã¹ã®ä»ã®å¯èœãªæå³ãïŒãã®è°è«ã¯è¯ããããŸããïŒæ®éã®äººã ã«ééã£ãããšãæããŸããã
圌ãã¯æ æ°ã§ãããæ°ããé©åãªåèªãåŠã¶ããšãã§ããªããããçšèªã
ãããŠæ°åŠè ã«åœŒãã®æå¿ã«åããŠééã£ãçšèªã䜿ãããã«åŒ·å¶ããŸãã
>>
- å åŽãšãããã®äž¡æ¹ããããšæ··ä¹±ããŸãã
äžèŽããå Žåãããã°ãäžèŽããªãå ŽåããããŸãïŒçŸåšã®ããããä¿æããå ŽåïŒ
æå³ïŒãäž¡æ¹ã¯å¿ èŠãããŸãããããŸãäžè¬çã§ã¯ãªãååãåé€ããŠãã ããã
ãã®æç¹ã§ãããã
>>
- ç·åœ¢ä»£æ°ã®å€ã§ã¯ãå éšã«ã¯ä»ã®å€ãã®å¯èœæ§ããããŸã
ã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ã«ãããæå³ããããã£ãŠããã¯ããåä»ã§ã
ãã®ååãBaseãããšã¯ã¹ããŒãããŸããç·åœ¢ä»£æ°ã®å€ã§ãç§ã¯ãããã®å€ãã®çšéãèŠã€ããããšãã§ããŸãã ããã«å€ãã®
å®å šã«ç°ãªãããšãæå³ãããããäžçœ®èšæ³ã
>>
@juliohmã®æåŸã®æçš¿ãåºå®ãã©ãŒãããã§åæçš¿ããŠããŸãã
çç±ã®ã©ããç§ã«èª¬åŸåããããŸããïŒ
äžçœ®ããªã¢ã³ãããããšäŸ¿å©ã§ãã
ã¯ããäžã§èª¬æããããã«ãinnerãžã®ååå€æŽã«é¢ä¿ãªããäžçœ®èšæ³ã¯åŒãç¶ãååšã§ããŸãã
éåžžã®æé次å ãã¯ãã«ç©ºéãæäœããéæ°åŠè ã«ãšã£ãŠããããã¯ãŠãŒã¯ãªããå ç©ã®ããäžè¬çãªååã§ãã ïŒæ°åŠè ã¯ãä»»æã®ãã«ãã«ã空éã®å ç©é¢æ°ã«ååãããã䜿çšããããšã«ç°¡åã«é©å¿ããŸããããããç©ãã¯ããã®ãããªç©ºéã«ä»ã®å¯èœãªæå³ã¯ãããŸãããïŒ
ãã®è°è«ã¯è¯ããããŸãããæ æ°ã§æ°ããé©åãªåèªãåŠã¶ããšãã§ããªãã®ã§ãæ®éã®äººã ã«ééã£ãçšèªãæããŸãããããããŠæ°åŠè ã«åœŒãã®æå¿ã«åããŠééã£ãçšèªã䜿ãããŸãã
å åŽãšãããã®äž¡æ¹ããããšæ··ä¹±ããå ŽåããããŸããããã¯ãäžèŽããå Žåãããã°ãäžèŽããªãå Žåãããããã§ãïŒçŸåšã®ãããã®æå³ãç¶æããå ŽåïŒã
äž¡æ¹ã¯å¿ èŠãããŸãããããŸãäžè¬çã§ã¯ãªãååãåé€ããŠãã ããããã®æç¹ã§ãããã§ããããšã«åæããŸãã
ç·åœ¢ä»£æ°ä»¥å€ã§ã¯ãinnerã¯ã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ã§ä»ã®å€ãã®æœåšçãªæå³ãæã£ãŠãããããBaseãããã®ååããšã¯ã¹ããŒãããã®ã¯ããé¢åã§ãã
ç·åœ¢ä»£æ°ã®å€ã§ãç§ã¯ãããã®å€ãã®çšéãèŠã€ããããšãã§ããŸãã å®å šã«ç°ãªãããšãæå³ãããããäžçœ®èšæ³ã«ã€ããŠã¯ããã«ã
ã¯ããäžã§èª¬æããããã«ãinnerãžã®ååå€æŽã«é¢ä¿ãªããäžçœ®èšæ³ã¯åŒãç¶ãååšã§ããŸãã
const â
= inner
ãå®çŸ©ããããšã¯ã§ããŸãããçšèªã«äžè²«æ§ããããŸããã ããããç©ããäžè¬çãªå
ç©ãšããŠäœ¿ãã®ã¯å«ãã ãšæããŸãããïŒ
æ°åŠè ã«åœŒãã®æå¿ã«åããŠééã£ãçšèªã䜿çšããããã«åŒ·å¶ãã
æ°åŠè
ã¯ãçšèªãæ£ããããšã§ãééã£ãŠããããšã§ããªãããšãç¥ã£ãŠããŸããããã¯åŸæ¥åãŸãã¯éåŸæ¥åïŒãããŠããããäžè²«æ§ãŸãã¯äžè²«æ§ããªãïŒã«ãããŸããã ïŒãããŠãã»ãšãã©ã®äººã¯ãèŠç¯çãªã¹ããªã³ã°ã«æ
ç±ãæã£ãŠããã®ã§ãæ°åŠã«ã¯å
¥ããŸãããïŒç§ã®çµéšã§ã¯ãéåååŠã§ã¯ãã¯ãã«ã¯ãç¶æ
ããšåŒã°ããé䌎äœçšçŽ ã¯ãçå£ããšåŒã°ããŸããäºéãã¯ãã«ã¯ããã©ããšåŒã°ãããããã¯åŽé«ã«ç¡é¢å¿ã§ãã åæ§ã«ããžã¥ãªã¢ã§ã¯å
ç©ãdot(x,y)
ãŸãã¯x â
y
ãšç¶ŽãããŠãããšèšã£ãŠããçµéšè±å¯ãªæ°åŠè
ã2å以äžç¹æ»
ããããšã¯ãªããšæããŸããç¹ã«ãçšèªã¯ãã§ã«ç解ãããŠããããã§ããå€ãã®æèã§ã®å矩èªã ïŒããã®é¢æ°ç©ºéã§2ã€ã®é¢æ°ã®å
ç©ãåãããšèšããšãå
ç©ãåç
§ããŠããããšãããã«ç¥ããªãæ°åŠè
ãèŠã€ãããšã¯æããŸãããïŒ
äžæ¹ãèšç·Žãåããæ°åŠè ã§ã¯ãªããæœè±¡çãªå ç©ç©ºéã«è§Šããããšããªã人ïŒã€ãŸãã倧å€æ°ã®ãŠãŒã¶ãŒïŒã«ãšã£ãŠãç§ã®çµéšã§ã¯ããªãã¿ã®ãªãçšèªã¯ããé害ã«ãªããŸãã ããžã¥ãªã¢ã§2ã€ã®ãã¯ãã«ã®å ç©ãååŸããã«ã¯ã©ãããã°ããã§ããïŒã FAQã«ãªããŸãã
ã»ãã³ãã£ã¯ã¹ãéžæãã以å€ã«ãããã§è§£æ±ºãã¹ãæ°åŠçãªåé¡ã¯å®éã«ã¯ãããŸããã ã¹ãã«ã®è³ªåã¯ãçŽç²ã«å©äŸ¿æ§ãšäœ¿çšæ³ã®1ã€ã§ãã
ç·åœ¢ä»£æ°ã®å€ã§ãç§ã¯ãããã®å€ãã®çšéãèŠã€ããããšãã§ããŸãã å®å šã«ç°ãªãããšãæå³ãããããäžçœ®èšæ³ã«ã€ããŠã¯ããã«ã
ãžã¥ãªã¢ãšä»ã®å€ãã®ããã°ã©ãã³ã°èšèªãäœå¹Žãã®édot
ãæã£ãŠããŠããããåé¡ã§ã¯ãªãã£ãããšãé€ããŠã inner
ã¯æ°ããç Žæã«ãªããŸãã
æçµçã«ããã®ïŒãŸãã¯ä»ã®ïŒé¢æ°ã®ã¹ãã«ã¯ãã»ãã³ãã£ã¯ã¹ãéæšå¥šãã¹ãšæ¯èŒããŠå°ããªåé¡ã§ããããã©ã³ã¹ã®ãã³ãã¯dot
ãæ¯æãããšæããŸãã
確ãã«constâ =innerãå®çŸ©ã§ããŸãããçšèªã«äžè²«æ§ããããŸããã ããããç©ããäžè¬çãªå ç©ãšããŠäœ¿ãã®ã¯å«ãã ãšæããŸãããïŒ
ãŸã åââãããªããšæããŸãã ããããå
ç©ãšåŒã¶ããšã«ççŸã¯ãããŸããã ããã¯å
ç©ã§ãããç§ãã¡ã®å€ãã«ãšã£ãŠéåžžã«å
·äœçã§åœ¹ã«ç«ããªããã®ã§ãã sum(x.*y)
ãè¶
ãããã®ã¯ãããŸããã
dot
ãšããçšèªãinner
ã®ã»ãã³ãã£ã¯ã¹ãæã€Juliaã§çµããå Žåãããã¯æŽå²çãªçœå®³ã§ãããå€ãã®äººãã€ã©ã€ã©ããããšãä¿èšŒã§ããŸãã æ宀ã§ææã次ã®ãããªããšã説æããã®ãäºèŠã§ããŸããããåç¥ã®ãšããããããã空éã®å
ç©ãå®çŸ©ããŸããããžã¥ãªã¢ã§ã¯èª°ãïŒ@stevengjïŒããããããããšåŒã¶ããšã«ããŸãããã
ãããèµ·ãã£ãå Žåã«åããŠãä»åŸã®åèã®ããã«ãã®ã¹ã¬ããã®ã¹ã¯ãªãŒã³ã·ã§ãããæ®ãããšã確èªããŸãã
@stevengjãdot
ã®çšèªã䞻匵ããŠããã®ã¯ããªãã ãã§ãããä»ã®èª°ãããã«å察ãè¡šæããŠããŸããã 決æãäžãåã«ããã®äºå®ãåèã§ããã°ããã®ã«ãšæããŸãã
ããã¯å ç©ã§ãããç§ãã¡ã®å€ãã«ãšã£ãŠéåžžã«å ·äœçã§åœ¹ã«ç«ããªããã®ã§ãã sumïŒxã* yïŒã«éããŸããã
ãå
ç©ããââ¿ã®ãŠãŒã¯ãªããå
ç©ã®ã¿ãåç
§ã§ãããšèããå Žåã¯ã const â
= inner
ãå®çŸ©ããã®ã§ã¯ãªãã â
(x::AbstractVector{<:Real}, y::AbstractVector{<:Real}) = inner(x,y)
ã®ã¿ãå®çŸ©ããå¿
èŠããããŸãã
äž¡æ¹ã®æ¹æ³ã䜿çšããããšã¯ã§ããŸããã inner
ã¯â
ãäžçœ®å矩èªãšããŠäœ¿çšã§ããŸãïŒãã®å Žåãäžçœ®æŒç®åã¯çšèªã§ãééã£ãŠããããååã«äžè²«æ§ããããŸããïŒãäžçœ®å矩èªã¯ãããŸããïŒ1ã€ã®ç¹å¥ãªå Žåãé€ãïŒã
æ宀ã§ææã次ã®ãããªããšã説æããã®ãäºèŠã§ããŸããããåç¥ã®ãšããããããã空éã®å ç©ãå®çŸ©ããŸããããžã¥ãªã¢ã§ã¯èª°ãïŒ@stevengjïŒããããããããšåŒã¶ããšã«ããŸãããã
ãããç§ã¯ãã®æ¶ç©ºã®æ€æ šããææããç±ã奪ãã€ããã§ãã çå£ã«ãããããç©ããšããçšèªãââ¿ã§ã®ã¿äœ¿çšãããŠãããšæãå ŽåããŸãã¯ãã®çšèªãä»ã®ãã«ãã«ã空éã§äœ¿çšãããŠããå Žåãæ°åŠè ãæ€æ šããŠãããšæãå Žåã¯ããã£ãšèª¿ã¹ãå¿ èŠããããŸãã
ããã¯æŽå²çãªçœå®³ã«ãªããŸã
çå£ã«ïŒ
ãã®è°è«ã¯ãæè¿çã§åžæ°çã§å»ºèšçãªç°å¢ãšèãããããã®ãè¶ ããŠäŸµé£ãããŠããããã§ãã æèŠãèæ¯ã¯ç°ãªããŸãããå人çãªæ»æã誰ããéé£ããããšã¯æ§ãããã¹ãŠã®åœäºè ãèª æãæã£ãŠèªåã®äž»åŒµã«ã€ããŠè°è«ããŠãããšæ³å®ããŠãã ããã
æ宀ã§ææã次ã®ãããªããšã説æããã®ãäºèŠã§ããŸããããåç¥ã®ãšããããããã空éã®å ç©ãå®çŸ©ããŸããããžã¥ãªã¢ã§ã¯èª°ãïŒ@stevengjïŒããããããããšåŒã¶ããšã«ããŸãããã
ããã§ãã¹ãã£ãŒãã³ãææã§ããããšã«æ³šæããããšã䟡å€ããããããããŸããã ïŒãŠã£ã³ã¯ïŒ
ç§ã¯ãŸãã inner
dot
ãåé€ããããšã«ã€ããŠãå±æ©ã«çããŠããŸãã dot
ãšããçšèªã¯éåžžã«åºã䜿çšãããŠãããPythonãMATLABã®å ŽåãJuliaã«é¢æ°ããªãã®ã¯é©ãã¹ãããšã§ãã ãã ããââ¿ä»¥å€ã®ãã¯ãã«ç©ºéãç¹ã«è¡åã«é©ããŠããããšãèãããšã inner
ãšããçšèªãæ°ã«å
¥ã£ãŠããŸãã
ã¡ãªã¿ã«ãJuliaã§ã©ã®ã¡ãœãããå®è¡ãããŠãããããã¹ãããŠãããšãã«ã dot
ãå®éã®ãã¯ãã«/è¡åã§ã®ã¿æ©èœããããšã«æ°ä»ããŸããã ããã¯æå³çãªãã®ã§ããïŒ
å åŽãšãããã®äž¡æ¹ããããšæ··ä¹±ããå ŽåããããŸããããã¯ãäžèŽããå Žåãããã°ãäžèŽããªãå Žåãããããã§ãïŒçŸåšã®ãããã®æå³ãç¶æããå ŽåïŒã
@stevengj vecdot
ãinner
ã«çœ®ãæãã dot
ãç¶æããã®ã¯å®å
šã«ã°ãããŠããŸããïŒ çŸåšãããªãã説æããŠãããã®æ£ç¢ºãªåé¡ã¯ã inner
vecdot
ã ãã§ããã§ã«ååšããŠããŸãã
OK ...楜ãã¿ã«ããŠããŸããã©ã€ãã®ææ¡ã¯äœã§ããïŒ åœŒãã¯ïŒ
dot
ãæ¡çšããŸãã ãã¯ãã«ã®ãã¯ãã«ã§ã¯ãã§ã«æ£ããååž°çã§ãããè¡åãªã©ã§æ©èœããããã«ããŸãïŒ @jebej dot
ãšinner
ã®äž¡æ¹ããããšãããã»ã©äŸ¿å©ã§ã¯ãªããšæããŸããã¹ãã£ãŒãã³ã¯ãå°ãªããšãå£èªçã«dot
ã䜿çšããŠå
ç©ãæå³ããããšããããããŸãããããã¯èª€ãã§ã¯ãããŸãããããã¯åãªãçšèªã§ãïŒãnorm
ãäžèšã®dot
ãšããã¹ãŠã®AbstractArray
å
šäœã§ããå°ãäžè²«æ§ã®ãããã®ã«ããããšãæ€èšããŠãã ãããæçµçã«ã¯ãæŒç®ååºæºã«opnorm
ãå°å
¥ããŸãïŒ AbstractMatrix
ïŒããã³é©åãªéæšå¥šã®åŸã«ïŒæ°æ§è¡šèšã§ïŒ norm(matrix) == vecnorm(matrix)
ãæã¡ãŸãã ãã®æç¹ã§ãããããvecdot
ãšvecnorm
ããå¿
èŠãããŸãããïŒããã§ããïŒ ãããã¯ãå°ãªããšãããžã§ããªãã¯ã³ãŒããå
ç©ç©ºéãæäœããããã®ä¿¡é Œã§ãããã¢ãšããŠdot
ãšnorm
ã䜿çšã§ããããã¯ãªãŒã³ãªãã€ã³ã¿ãŒãã§ã€ã¹ãåããæ¯èŒçäžè²«ããç·åœ¢ä»£æ°ã®ã¹ããŒãªãŒã«å°éãããšæããŸããã¿ã€ãã«äŸåããŸããã
@andyferris ãã¯ãããã®å€æŽãè¡ãå Žåãå¿
èŠãªã®dot
ãšnorm
ã ãã ãšæããŸãïŒãããã¯çŸåšãä»»æã®æ¬¡å
ã®é
åãŸãã¯é
åã®é
åã«å¯Ÿããååž°çãªãŠãŒã¯ãªããæŒç®ã§ãããã«ã ã®å Žåã norm(x,p)
ãp-ãã«ã ãšããŠå®çŸ©ããŸãïŒããã³opnorm
ã§ããã vecdot
ãŸãã¯vecnorm
ã¯ãªããªããŸãã
dot
ã¯çŸåšãè¡åã®ãã¯ãã«ïŒïŒ22392ïŒã®çã®å
ç©ã§ã¯ãªãããã dot
ãžã®å€æŽã¯é倧ãªå€æŽã§ããããšã«æ³šæããŠãã ãããããã¯ãïŒ22220ïŒïŒ22220ïŒãã®æç¹ã§ã vecdot
ãåé€ããããšã¯IIRCãšã¯èŠãªãããŸããã§ããïŒã ãã ããããã¯0.7ã§å°å
¥ããããããå®éã«ãªãªãŒã¹ãããã³ãŒããå£ãããšã¯ãããŸããã å®éã0.6ã®dot
ã¯ãå€å°å¶ç¶ã§ããããã§ã«ä»»æ次å
ã®é
åäžã®ãŠãŒã¯ãªããå
ç©ã§ãïŒïŒ22374ïŒã ããã§ææ¡ãããŠããå€æŽã¯ããã®0.6ã®åäœã埩å
ããã³æ¡åŒµãããããšäžèŽããããã«norm
ãå€æŽããŸãã
1ã€ã®è³ªåã¯ã norm(x,p)
ãnorm(x[i])
ãŸãã¯norm(x[i],p)
ååž°çã«åŒã³åºããã©ããã§ãã ã©ã¡ããæœåšçã«æçšãªåäœã§ãã åè
ã®æ¹ãäžè¬çã§ãããããç§ã¯åè
ã«åŸåããŸãâ x[i]
ã¯ãpãã«ã ã§ã¯ãªãã norm
ã®ã¿ãå®çŸ©ããä»»æã®ãã«ã ãã¯ãã«ç©ºéã§ããå¯èœæ§ããããŸãã norm
ååž°çã«åŒã³åºãããšã¯ã vecnorm
ãçŸåšè¡ã£ãŠããããšã§ãããããã vecnorm
ãnorm
ã«éæšå¥šã«ããããšãšäžèŽããŠããŸãã
@jebej ããã¹ã¿ãŒãš0.6ã®äž¡æ¹ã§dot
ã¯ãè€éãªé
åã§æ©èœããŸããããšãã°ã dot([3im],[4im])
ã¯12+0im
$ãæ£ããè¿ããŸãã
norm(matrix)
ããããããŠã¹ã®æšæºã«å€æŽããããšã®ãã1ã€ã®è¯ãç¹ã¯ãã¯ããã«å®ãããšã§ãã norm(A-B)
ã䜿çšããŠã2ã€ã®è¡åã®éããã©ãã»ã©å€§ããããææ¡ããã®ãäžè¬çã§ããããã«ã ã®ç¹å®ã®éžæã«ã€ããŠã¯ããŸãæ°ã«ããªãã§ãã ããããã ããå€ãã®ãŠãŒã¶ãŒã¯ãçŸåšã®ããã©ã«ãã«æ°ä»ããªãã§ãããã norm(matrix)
ã§ã¯ãSVDãèšç®ããå¿
èŠããããŸãã
ããã€ãã®äž»èŠãªãã€ã³ãã®åšãã«ã³ã³ã»ã³ãµã¹ã圢æãããã®ãèŠãã®ã¯çŽ æŽãããã§ãïŒ :)ïŒèª°ããç§ã殎ãïŒåž¯åå¹ ãããå Žåã¯ãã£ãŠãã ããïŒïŒããã¢ã«ãã¡ã¿ã°ãåã«ãããããªãéããïŒ26997ãåºè·ããåŸãçŸåšã®ã³ã³ã»ã³ãµã¹ãã€ã³ãã®å®è£ ãè¡ããŸããïŒãã¹ãïŒ
å°æ¥ã®åç §ã®ããã®å¥ã®ãªã³ã¯ïŒ https ïŒ//math.stackexchange.com/a/476742
ããã§æèçã«æ¡çšãããŠãã貧匱ãªåœåãšãåäžã®å¿ã«ãã£ãŠèª²ããã貧匱ãªæ±ºå®ã説æããããã å ç©ãšå ç©ã¯ãç°ãªãæ°åŠçç¹æ§ãæã£ãŠããŸãã ããªãã¯æ°åŠã®æç®ã§ããç¥ãããŠããããšã«å察ããŠã³ãã¥ããã£å šäœã匷å¶ããŠããŸãã
ãããŠå°æ¥ã®èªè ã®ããã«ãç§ãã¡ãéåçãªæ±ºå®ãäžããå Žåã代ããã«äœããã¹ãã ã£ããïŒ
# make dot what it is, a NOTATION
â
(x::AbstractVector, y::AbstractVector) = sum(x[i]*y[i] for i in indices(x))
# replace the name dot by the more general inner
inner(x, y) = # anything
ââ¿ä»¥å€ã®å ç©ã«ããããç©ããšããçšèªã䜿çšããã®ã¯ãå®å®ã§æåã®äººã«ãªããšæããŸãã ãã®ã€ãããŒã·ã§ã³ãäžçã«æŒãä»ããããã«ããã®ã¹ã¬ããã«ïŒäž»ã«ä»ã®éçºè ãè è¿«ããããšã«ãã£ãŠïŒèªåã®æå¿ãæŒãä»ããããšãã§ããã®ã¯è¯ãããšã§ãïŒ ãããç©ãåãªããè¡šèšãã«è¿œãããããããšã¯ãªããªããŸãã代ããã«ãå ç©ãæå³ããèšå·ã«ãªããŸãïŒãã¹ãŠã®äººãç¥ã£ãŠããããã«ãèšå·ã«æå³ãå²ãåœãŠãããšã¯ãè¡šèšãã®å察ã§ãïŒã
éåžžã«è¯ãææ決å®ïŒclapïŒããã¯ééããªãã³ã³ã»ã³ãµã¹ã§ããã äžèšã®ã³ã¡ã³ããèªããšã誰ããã©ã®ããã«åæããããããããŸãã ïŒ+1ïŒ
ãŸãã¯ããããã©ã®ããã«ã³ã³ã»ã³ãµã¹ã§ãã£ãããéåžžã«æ確ã«ããããã«ãããã€ãã®ã³ã¡ã³ããåŒçšããå¿ èŠããããŸãã
>>
å³-vecdotã¯innerã«ååãå€æŽã§ããŸã
@andyferrisã«ãã
ãªãã·ã§ã³2ïŒããããããè¯ãïŒïŒããæ°åŠçã«æ£ããååã䜿çšãã
å åŽ
寞æ³
ããããèŠç¯ãã©ããããïŒ
@Jutho
ç§ã¯åæããŸããvecdotã®ä»£ãããšããŠãæ°ããã¡ãœããinnerãå°å ¥ããããšãã§ããŸã
@Jutho
ãŸããvecdotã®ååã¯å¥åŠã ãšæããŸããå®éããããååšããããšããç¥ããããã®ããã«ç¬èªã®é¢æ°ãäœæããŠããŸãã...innerãšåŒã°ããŸãã
@jebejã«ãã£ãŠ
ãªã©ãªã©...
人ã ã¯äºãã«å£°é«ã«è°è«ããå€ãã®æèŠã®äžäžèŽãæèµ·ããããšãã§ããŸãããããã§ã説åŸãããè³åŠäž¡è«ã®ãã©ã³ã¹ããšãããšã«ãã£ãŠïŒå¿ ãããå šäŒäžèŽã§ã¯ãããŸãããïŒã³ã³ã»ã³ãµã¹ã«å°éããŸãã ïŒããã«åãªãã·ã§ã³ã®é·æãšçæã®äž¡æ¹ãããããšã«åæããŸããïŒããã§ïŒæ«å®çã«ïŒïŒã²ã«åããŠããããã«èŠããçµæãããªãã奜ãã çµæã§ã¯ãªãããšãæ®å¿µã«æããŸãããããªããã©ãæããããããŸããç§ã¯èªåã®æå¿ããæŒãä»ãããã
ïŒãã¡ãããæçµçãªæ±ºå®ãäžãããããã§ã¯ãããŸãããPRãããŸã ãããŸããããŸããŠããäœãããŒãžãããŠããŸãããïŒ
èšèªã®èŽè¡ã«åºã¥ããŠæ±ºå®ãäžãããããã®ã«ãšæããŸãã 誰ããJuliaãããŒã«ãšããŠéžãã å Žåããã®äººã¯å°ãªããšãinner
補åãšããçšèªãèããããšããããšæããŸãã ããã¯éåžžã«äººæ°ã®ããã³ã³ã»ããã§ããããšããŸããã¯ãšã¯ã»ã©é ããã®ã§ãã ãšããŸããã¯ãªãã®ã«ã¯ããæ°žç¶çãªãã¢ããžãŒãããéåè«ããªã©ããããŸãããããã¯ããŸãæ®åããŠãããããã®çš®ã®çšèªãå«ããããšã«ã¯å察ã§ãã
çµå±ã®ãšãããç§ã¯ç§åŠèšç®ãæ°åŠãªã©ã«æé©ãªèšèªã欲ããã ãã§ãã
@juliohm ããã¹ãŠã®è°è«ã¯ãèŽè¡ã誰ã§ããããšããããŒãºã«åºã¥ããŠãããç§ãã¡å šå¡ããžã¥ãªã¢ãå¯èœãªéãåªããèšèªã«ããããšããŠããŸãã æ°åŠã¯ã€ã¥ãã決å®ããªãã®ã§ãåççãªäººã ã¯çšèªã«ã€ããŠç°ãªãçµè«ã«éããå¯èœæ§ããããŸãã
ãŸããåè¿°ã®ããã«ã @ stevengjã®çŸåšã®ææ¡ã«ç¢ºãã«åæããå
ç©ã®äžè¬åãšããŠdot
ã«åºå·ããããšãã§ããŸãã ãŸããç§ã¯ãã®è°è«ã®é²ãæ¹ãå«ãã§ããã確ãã«æ£ããåŒçšãããããšæããŸãã @juliohm ãããªããç§ã«åž°ãã2çªç®ã®åŒçšã¯ç§ã®ãã®ã§ã¯ãããŸããã
ããã¯èšã£ãŠããè³åŠäž¡è«ãèæ
®ããæèã®ç³§ãšããŠã以äžã®ããšãè¿°ã¹ãããšæããŸãã 以äžã¯äž»ã«çæã§ããã@stevengjãèšåããé·æã«åæããŸãã dot
ãsum(x[i]*y[i] for i ...)
ãæå³ããã ãã®å Žåãå¥ã®ãŠãŒã¹ã±ãŒã¹ãç°¡åã«ååšããå¯èœæ§ããããŸãã äžçœ®ãããè¡šèšãæ°åŠã§æããã䜿çšãããå Žåãããã¯ç¢ºãã«éåžžã¯æå³ã§ãã å
ç©ãšããŠãäžçœ®ãããè¡šèšã¯éåžžïŒç¢ºãã«æä»çã§ã¯ãããŸãããïŒå®éã®ãã¯ãã«ç©ºéçšã«äºçŽãããŠããŸãã ä»ã®ãŠãŒã¹ã±ãŒã¹ã«ã¯ã Ï â
n
ã®ãããªãã®ãããŠãªè¡åã®ãã¯ãã«Ï
ãšã¹ã«ã©ãŒã®ãã¯ãã«n
ã§æå¹ã«ããããšãå«ãŸããŸãã ããã¯ãä»ã®ã¹ã¬ããã§ææãããããã«ã dot
ãçŸåšå®è£
ãããŠããæ¹æ³ã®èåŸã«ããåæ©ã®1ã€ã§ããã BLASãå®éã®ãã¯ãã«ã«dot
ã®ã¿ã䜿çšããè€çŽ æ°ãã¯ãã«ã«dotu
ãšdotc
ãåºå¥ããããšã決å®ãããšããäºå®ã¯ãèæ
®ãã¹ããã1ã€ã®åé¡ã§ãã BLASã®ããã¯ã°ã©ãŠã³ããæã€äººã
ã¯ãè€éãªãã¯ãã«ã䜿çšããŠãçã®å
ç©ïŒã€ãŸãã dotc
ïŒãå¿
èŠãªãšãã«dot(conj(u),v)
ãŸãã¯dot(u,v)
ãèšç®ãããã©ããæ··ä¹±ããå¯èœæ§ããããŸãã ããã«ã圌ãã¯æåã«æå
ã®ãã¯ãã«ã®å
±åœ¹ã³ããŒãäœæããã«dotu
ãå®è¡ããæ¹æ³ãæ¢ããããââããŸããã
@JuthoåŒçšã¯ããªãã®ãã®ã§ããããªãã®å®å šãªã³ã¡ã³ãã¯ä»¥äžã«ã³ããŒãããŸãïŒ
ç§ã¯ãvecdotã®ä»£ããã«ãæ°ããã¡ãœããinnerãå°å ¥ã§ããããšã«åæããŸãããvecnormãã眮ãæãããããã®é©åãªååãããããŸããã å®éãç§ã¯ãæªããã¯ãã«ãã«ã ããç§ãã¡ãæãæäœã®ååã«ç¢ºç«ãããæ瀺çãªçšèªã§ãããšããvecnormãèŠã€ããŸããã
ãããã«ãããåŒçšã¯ãç§ãã¡ããã®äž»é¡ã«ã€ããŠèãããšããããã§å€ãã®äººã®é¡æãäœã§ãããã瀺ãããšãç®çãšããŠããŸãïŒå°ãªããšãæåã®èªç¶ãªèããšããŠïŒã ããªããæéã®çµéãšãšãã«ããªãã®æ¬²æ±ãå€ãããªããããã¯å¥ã®è©±ã§ãã ç§èªèº«ããã«ãã«ã空éã䜿ã£ãã¢ããªã³ã°äžã«ããããããšããçšèªãé ããæµ®ãã³äžããããããšã¯æ±ºããŠãããŸããã§ããã ããã¯äžèªç¶ã§ãç§ãåŠãã ããšãšççŸããŠããããã«æããŸãã
@Jutho ïŒããã«ã圌ãã¯æåã«æå ã®ãã¯ãã«ã®å ±åœ¹ã³ããŒãäœæããã«
dotu
ãå®è¡ããæ¹æ³ãæ¢ããããââããŸããã
dotu
é¢æ°ããšã¯ã¹ããŒãããå¯èœæ§ãæã
åºãŠããŸããïŒäŸãã°ïŒ8300ãåç
§ïŒã ãããæã
æçšãªé¢æ°ã§ããããšã«åæããŸããè€éãªãã¯ãã«ç©ºéã«å¯ŸããŠã察称åç·åœ¢ïŒååç·ã§ã¯ãªãïŒåœ¢åŒã§ããéå
±åœ¹ãŠãŒã¯ãªãããå
ç©ãïŒå®éã«ã¯å
ç©ã§ã¯ãããŸããïŒ dotu(x,y) == dotu(y,x)
ïŒå
±åœ¹ã§ã¯ãããŸããïŒ ã ãããããã®æäœã®æçšæ§ã¯ââ¿ã«éå®ãããŸãããããšãã°ããã®çš®ã®ç©ã¯ã察称æ§ã®çµæãšããŠãã¯ã¹ãŠã§ã«ã®æ¹çšåŒã®ç¡é次å
ãã¯ãã«ç©ºéïŒé¢æ°ïŒã«çŸããããšããããããŸãïŒåºæ¬çã«ãå
žåçãªæ倱ã®ããææã®ãã¯ã¹ãŠã§ã«æŒç®åã¯ãè€çŽ 察称è¡åãã«é¡äŒŒâéå
±åœ¹ãå
ç©ãã®äžã§å¯Ÿç§°ïŒã ãããã£ãŠã dot(x,y)
ãäžè¬çãªãŠãŒã¯ãªããå
ç©ïŒæåã®åŒæ°ãå
±åœ¹ã§ããïŒãšããŠå®çŸ©ããå Žåãä»»æã®ãã¯ãã«ç©ºéã§éå
±åœ¹ãŠãŒã¯ãªããç©ã«å¯ŸããŠdotu(x,y)
é¢æ°ãå®çŸ©ããã®ã¯éåžžã«èªç¶ã§ãããããçã«ããªã£ãŠãããšããã ãã ãã dotu
é¢æ°ãdot
ã«å¯ŸããåŒæ°ãšããŠæ©èœããå¯èœæ§ã¯ãããŸããã ã»ãšãã©ã®å Žåãè€éãªãã¯ãã«ç©ºéã§äœæ¥ããŠãããšãã¯å
±åœ¹ç©ãå¿
èŠãªã®ã§ããããæ£ããããã©ã«ãã®åäœã§ãã
ãããã1ã€ã®å¯èœæ§ã¯ãçŸåšãã¹ã¿ãŒïŒ0.6ã§ã¯ãªãïŒã§å®çŸ©ãããŠããæ¹æ³ã§ããdot(x,y) = sum(x[i]'*y[i] for i = 1:length(x))
ãå®çŸ©ãã inner(x,y)
ãçã®å
ç©ãšããŠå®çŸ©ããããšã§ããããšã«åæããŸãã ããã«ã¯ãäž¡æ¹ã®æ©èœãæäŸã§ãããšããå©ç¹ããããã©ã¡ããç¹å®ã®å Žåã«åœ¹ç«ã€ããšããããŸãã ãã ããè¡åã®é
åãé€ããŠã»ãšãã©åžžã«äžèŽãã2ã€ã®é¢æ°ããããã©ã¡ãã䜿çšãããã決å®ããã®ã¯å°ãæ··ä¹±ããã§ãããã å€ãã®äººã¯inner
ãæå³ãããšãã«dot
ãšæžããã»ãšãã©ã®å Žåã¯åé¡ãªãæ©èœããŸãããè¡åã®é
åãæž¡ããããšãã³ãŒãã¯äºæããªãããšãããŸãã ç§ã®çæã¯ã99ïŒ
ã®å Žåã人ã
ã¯çã®å
ç©ãæãã§ãããå®éã«å¿
èŠãªå Žåã¯ãã補åã®åèšãããŒãžã§ã³ãããã±ãŒãžã«æ®ãããšãã§ãããšããããšã§ãïŒ sum
ãåŒã³åºãã ãã§ã¯ãããŸããïŒã ïŒã
@juliohm ãååãããããã®åŒçšç¬Šã®äžïŒäžã§ã¯ãªãïŒã«ãããšæã£ãã®ã§ãããªãã®æçš¿ãèªã¿ééããŸããããããã£ãŠã @jebejã®åŒçšç¬Šãç§ã«åž°ãããšæããŸããã ç³ãèš³ãããŸããã
@stevengj ãç§ã¯ç¢ºãã«dot(x,y) = sum(x[i]'*y[i] for i = 1:length(x))
ã劥åœãªããã©ã«ããšããŠæã€ããšãèããŠããŸããã§ããã Ï â
n
ã®ãããªå ŽåãæåãŸãã¯2çªç®ã®åŒæ°ã®è€çŽ æ°/ãšã«ããŒã掻çšã¯äžèŠã§ãã ã€ãŸããç§ãèšã£ãŠããã®ã¯ãç§åŠåŒã§äžçœ®ãããè¡šèšã䜿çšãããŠããå€ãã®ïŒå®éã«ã¯ãã¹ãŠã§ã¯ãªãïŒå Žåããã®æå³ã¯dotu
ãšäžèŽããŸããã€ãŸãã掻çšãªãã®sum(x[i]*y[i] for i = 1:length(x))
ã§ããããŸããå®éã®ãã¯ãã«ç©ºéã®å
ç©ãšããŠããŸãã¯ããäžè¬çãªæ§é ãšããŠã
ãããã£ãŠãç§ã代æ¿æ¡ãäœæããå ŽåïŒå¿ ããããããæå±ããŠããããã§ã¯ãããŸãããïŒã2ã€ã®æ©èœãæã€ããšã«ãªããŸãã
dot(x,y) = sum(x[i]*y[i] for i...)
ã¯ãå®éã®ãã¯ãã«ã®æ£ããå
ç©ã§ãïŒããã¯ãå
ç©ãšããçšèªã«ããŸã詳ãããªãããŸãã¯ããç¥ããªã人ã
ã®ãŠãŒã¹ã±ãŒã¹ã§ããå¯èœæ§ããããŸãïŒãã Ï â
n
ã®ãããªããäžè¬çãªæ§é ãå¯èœã«ããŸãã
inner(x,y)
ã¯åžžã«æå¹ãªå
ç©ã§ããã掻çšãšååž°ããããããäžè¬çãªæè¡çãªã³ã³ããã¹ãã§äººã
ã䜿çšããŸãã
ç§ã¯ãããJuliaèšèªã§æ¡çšããã®ã«é©ããéžæãšããŠæè·ããŠããŸãããããããå€ãã®æç®ã§äœ¿çšãããŠããæ¹æ³ã ãšæããŸãã äžçœ®ãããã䜿çšãããå Žåãããã¯å®éã®ãã¯ãã«ã®ã³ã³ããã¹ãã§ã®å
ç©ãšããŠããŸãã¯åã«åçž®ãæå³ããããã€ãã®ããäžè¬çãªæ§é ã®ãããããšããŠäœ¿çšãããŸãã ä»»æã®ãã¯ãã«ç©ºéã«é¢ããäžè¬çãªå
ç©ãæå³ãããŠããå Žåãã»ãšãã©ã®ç§åŠæç®ïŒãã ãã確ãã«åäŸã瀺ããŠããŸãïŒã¯<u,v>
ãŸãã¯<u|v>
ã«åãæ¿ãããŸãïŒæåã®è¡šèšã§ã¯ããŸã è°è«ããããŸãïŒ 2ã€ã®åŒæ°ã®ãã¡ã®1ã€ãå
±åœ¹ã§ãïŒã
ç§ã¯ãã®ææ¡ã§çããããšãã§ããŸããããäžè¬çãªå
ç©ãšããŠdot
ãããªãããšã§ãåæ§ã«ããŸãçããããšãã§ããŸããã çµå±ã®ãšãããããã¯åªããããã¥ã¡ã³ããæã£ãŠããããšã®åé¡ã§ãããç§ã誰ãããã®ããã¶ã€ã³ãã®éžæã«ã€ãŸãããšã¯ä¿¡ããããŸããã
@Jutho ãç§ã¯dot
ãåã«åçž®ãæå³ããããã«å®çŸ©ããããšã¯çãããªãããšã«åæããŸãã 確ãã«ãäž¡æ¹ã®æ¹æ³ã§äŸãèŠã€ããããšãã§ããŸãã ããšãã°ãããã°ã©ãã³ã°èšèªã人æ°ã®ããã©ã€ãã©ãªã§ã¯ã次ã®ããã«ãªããŸãã
éå
±åœ¹ïŒNumpy dot
ïŒãããŠãå¥åŠãªããšã«ã inner ïŒãMathematicaã®Dot
ãMaxima .
ãBLAS dotu
å
±åœ¹ïŒMatlabã®dot
ãFortranã®DOT_PRODUCT ãMapleã®DotProduct
ãPetscã®VecDot
ãNumpy vdot
ãBLAS dotc
ïŒ Fortran 77ã§ã®ãªãŒããŒããŒãã«ããããããdot
ãšåŒã¶ããšãã§ããªããªããŸããïŒãEigenã®ããã
äžæ¹ã§ã¯ãå
±åœ¹å
ç©ã¯éåžžãè€éãªãã¯ãã«ãžã®ããããç©ãæŠå¿µã®ãèªç¶ãªãæ¡åŒµãšããŠæç§æžã«å°å
¥ãããŸããéå
±åœ¹ããŒãžã§ã³ã¯ãããæå³ã§ãäžèªç¶ãªãæ¡åŒµã§ãããéåžžã¯ããã§ã¯ãããŸãããããªãã欲ãããã®ã ïŒæšæºã©ã€ãã©ãªã§å
±åœ¹dot
é¢æ°ãæäŸããèšèªïŒMatlabãFortranãJuliaãMapleïŒã®ãã¡ãMapleã®ã¿ãéå
±åœ¹ããªã¢ã³ããæäŸããéèŠããªãããšã瀺åããŠãããšããäºå®ãèæ
®ããŠãã ãããïŒäžæ¹ãéå
±åœ¹dotu
é¢æ°ã¯ãç¹å®ã®ç¹æ®ãªã±ãŒã¹ïŒäžèšã§èª¬æãããã®ã®äžéšïŒã§ã¯ïŒè£è¶³ãšããŠïŒäŸ¿å©ã§ãã
dot
ãšinner
ã®äž¡æ¹ãããå Žåãã³ãŒãã«inner
ãæ¬åœã«å¿
èŠãšããŠãããšãã«ã誀ã£ãŠdot
ã䜿çšããŠããŸã人ãå€ãã®ã§ã¯ãªãããšæããŸãããžã§ããªãã¯ã ïŒNumpyã®inner
ã¯ããŸãã«ãã®ãããªäºæ
ã®ããã«çµåãããŠããªãã«éããããŸãããå®éã®ã¢ã¬ã€ã念é ã«çœ®ããŠå®è£
ããå€æŽããã«ã¯æé
ãã«ãªããŸã§è€éãªã±ãŒã¹ã«ã€ããŠèããªãã£ããããè¿œå ããŸãããåä»ãªååã®vdot
ãïŒäžæ¹ã dot
ãšïŒããããïŒ dotu
ãããå Žåã dot
ãããã©ã«ãã®éžæã§ããã dotu
ã§ããããšãããæ確ã«ãªããŸãã
ïŒ âšu,vâ©
ã âšu|vâ©
ããŸãã¯(u,v)
ã¯ãä»»æã®ãã«ãã«ã空éã®å
ç©ã®ããäžè¬çãªè¡šèšæ³ã§ããããšã«åæããŸãããããã¯ç§ãé垞䜿çšãããã®ã§ããããããã®è¡šèšæ³ã¯Juliaã®åå¿è
ã§ã¯ãããŸãããUnicodeãã©ã±ãããé¢æ°/ãã¯ãåŒã³åºããšããŠè§£æããããšã«ã€ããŠã®è°è«ããããŸãããããšãã°ãïŒ8934ãïŒ8892ãªã©ã§ãããã©ãã«ãè¡ããŸããã§ããããããããã«å€ããå¯èœæ§ã¯äœãããã§ããïŒ
ç§ã¯ããªãã®è©äŸ¡@stevengjã«å®å šã«åæããŸãã
ç§ãã
ç§ãã¡ã®1人ããPRã§ã©ã¡ããã®å®è£ ãè©ŠããŠããããã©ã®ããã«æ©èœãããã確èªãããšããæ¥ãã®ã§ã¯ãªãããšæããŸãã
@Juthoç§ã¯ãã€ããããŠãªè¡åã䜿çšããå ç©ããé«æ¬¡ãã³ãœã«ã®åçž®ã®çç¥åœ¢ãšããŠèŠãŠããŸãã...ãã¯ãã«ç©ºéã®1ã€ã¯ãå®æ°ã®3Dã§ãã
âšuãvâ©ãâšu| vâ©ããŸãã¯ïŒuãvïŒã¯ãä»»æã®ãã«ãã«ã空éã®å ç©ã®ããäžè¬çãªè¡šèšæ³ã§ããããšã«åæããŸãããããã¯ç§ãé垞䜿çšãããã®ã§ããããããã®è¡šèšæ³ã¯Juliaã®åå¿è ã§ã¯ãããŸããã
âšu,vâ©
ãæ©èœãããããšã¯å®éã«ã¯å¯èœã§ãã
@StefanKarpinski ïŒâšuãvâ©ãæ©èœãããããšã¯å®éã«ã¯å¯èœã§ãã
絶察ã«ããããŠãã®æ£ç¢ºãªè¡šèšæ³ããµããŒãããããšã¯ïŒ8934ã§ææ¡ãããŸããããããã¯ã©ãã«ãè¡ããŸããã§ããã ïŒå±±ãã£ãã«ã¯ä»ã®äžè¬çãªçšéãããããšã«ã泚æããŠãã ãããããšãã°ãâšuâ©ã¯ããçš®ã®å¹³åãè¡šãããšããããããŸããïŒããã¯å£ããããšã¯ãªããããæç¹ã§è¿œå ãããå¯èœæ§ããããŸãããè¿ãã§æåŸ
ããã®ã¯åççã§ã¯ãªãããã§ããåŠæã ãŸãã \langle<tab> x, y \rangle<tab>
ãšå
¥åããã®ã¯éåžžã«é
ããããåºæ¬æäœã®ããã°ã©ãã³ã°ã®èŠ³ç¹ããã¯ããŸã䟿å©ã§ã¯ãããŸããã
<>ããªãŒããŒããŒãããããšã¯ã§ããŸããããïŒ
çªå·
ãã®å·šå€§ãªã¹ã¬ããã«é¢ãããã¹ãŠã®ã³ã¡ã³ããèªãã ãšã¯èšããŸããããããã€ãã®ãã€ã³ãã匷調ããããšæããŸãããã®ãã¡ã®ããã€ãã¯ä»¥åã«äœæããããã®ã§ãã
dot
ãå
±åœ¹ã«ããããšã¯ããããŸã§ã§æé«ã®ããšã§ãã ããã«æ±ºå®ç¹ã¯ãããŸããããããã®conj(dot())
ãå®è¡ããå¿
èŠããªããªã£ãããšãå¬ããæããŸããnorm
ã§åä»ã§ããæé©åã¢ã«ãŽãªãºã ãã³ãŒãã£ã³ã°ããŠããŠã norm(delta x) < eps
ã®ãã³ã«åæ¢ãããå Žåã¯ã norm
ãšèšè¿°ããŸãã ãããã次ã«ãç»åãªã©ãæé©åããå¿
èŠããããŸããã³ãŒããå®è¡ãããšãçªç¶ã倧ããªé
åã®ïŒBLASã®ããã«ïŒæ®ºããªãSVDãèµ·åããŸãã ããã¯åŠè¡çãªãã®ã§ã¯ãªããOptim.jlã§åé¡ãåŒãèµ·ãããä»ã®ããã±ãŒãžã§ãåé¡ãçºçããŠããããšã¯ééããããŸããã $ïŒ$ 5 $ïŒ$ãæ¢ãç¹å¥ãªçç±ããªãéãã誰ãvecnorm
ãååšããããšãç¥ããŸãããdot
ãšvecdot
ãããã³norm
ãšvecnorm
ãããŒãžãããœãªã¥ãŒã·ã§ã³ã¯ãé
åã®å Žåã èŠç¯ã«ã€ããŠã¯ãè€æ°ã®èŠç¯ãå®çŸ©ãããŠãããã®ïŒè¡åãªã©ïŒãæäœãããšãã«ããŠãŒã¶ãŒãæãã®ã¯ãç¹ã«ã©ããæ°ã«ããã«ãèŠç¯ãååŸããããã«norm
ãåŒã³åºãããšã§ãã èªå°ããããã«ã ã¯ãèšç®ãå°é£ãªãããã»ãšãã©ã®å Žåãå®éçãªé¢å¿ãããçè«çãªé¢å¿ããããŸãã ãŸãã2D-array-as-storageã®è§£éã§ã¯ãªãã2D-array-as-operatorã®è§£éã«åºæã§ãïŒã€ã¡ãŒãžã¯2Dé
åã§ãããæçšãªæå³ã§ã®æŒç®åã§ã¯ãããŸããïŒã ããããèšç®ããå¯èœæ§ãããã®ã¯è¯ãããšã§ãããããããããã©ã«ãã®norm
ã«ãªãã«å€ããããã§ã¯ãããŸããã åççã§ã·ã³ãã«ã§ååã«ææžåãããããã©ã«ãã§ãçºèŠå¯èœãªä»£æ¿æ¡ãããå Žåã¯ãå·§åŠããè©Šã¿ããããåªããŠããŸãïŒãŠãŒã¶ãŒãå·§åŠãªããšããããå Žåã¯ãæ瀺çã«å®è¡ãããŠãã ããïŒããããã£ãŠã @stevengjã®+1
ã¯ãããã®å€æŽãè¡ãå Žåãå¿ èŠãªã®ã¯ããããšãã«ã ã ãã ãšæããŸãïŒããã¯ãä»»æã®æ¬¡å ã®é åãŸãã¯é åã®é åã«å¯Ÿããååž°çãªãŠãŒã¯ãªããæŒç®ã§ããããã«ã ã®å Žåã¯ãnormïŒxãpïŒã次ã®ããã«å®çŸ©ããŸãã p-normïŒãšopnormã§ãããvecdotãŸãã¯vecnormã¯ãããããŸããã
norm / opnormã®ããããžã¥ãªã¢ã³ããªä»£æ¿æ段ã¯ã norm
ãopnormãå®è¡ãã2Dé
åãã©ããã§ããOperatorã¿ã€ããæã€ããšã§ãã ããã¯ãããã±ãŒãžã®ã¬ãã«ã§å®è¡ã§ããŸãïŒãã®ãã¡ã®ããã€ãã¯ãã§ã«ååšããŸãïŒ
norm(Operator(matrix))
opnorm(matrix)
ãšå
¥åãããâŠ
ããã®ããŒãããã®ã£ã©ãªãŒãããã£ã€ã ã鳎ãããŠããããã©ãã«è¡ãã®ãã奜ãã ãšèšããŸãâ vecnorm
ãšvecdot
ã¯ãã€ãç§ãæ©ãŸããŠããŸããã åžžã«ç§ã«ã¯ããªãå°éçã§ããããã«æãããæŒç®åãã«ã ãæ瀺çã«èŠæ±ããå¿
èŠãããããšã¯ãèšç®ãã¯ããã«é«éã§ç°¡åãªãã«ã ïŒããšãã°ãããããŠã¹ãã«ã ïŒãèŠæ±ããå¿
èŠããããããã¯ããã«è³¢æãªããã§ãã opnorm
æžãããšã¯ãæ¯èŒçå°éçãªæŒç®åã®èŠç¯ãæ±ããããã®åªããã€ã³ã¿ãŒãã§ãŒã¹ã®ããã«æããŸãã
ãŸãã dot
ãšinner
ã埮åŠã«åºå¥ãããšãæ··ä¹±ã暪è¡ãã誀çšã«ã€ãªããå¯èœæ§ãé«ããšæããŠããŸãã äž¡æ¹ã®æ©èœãå¿
èŠãªããšãå®è¡ããäžæ¹ã®æ©èœãç°¡åãªå Žåã«ãã©ã¡ãã®æ©èœã䜿çšãããã«ã€ããŠãŠãŒã¶ãŒã«èª¬æãããšãããŸãæ©èœããªãåŸåããããŸãã ç§ã®å°è±¡ã§ã¯ããžã§ããªãã¯ã³ãŒãã§ã¯ãçã®å
ç©âšu,vâ©
ãå®éã«ååšãããšãã«ã sum(x*y for (x,y) in zip(u,v))
ãå®éã«å¿
èŠãªãã®ã«ãªãããšã¯æ¯èŒçãŸãã§ãã ãããæ¬åœã«æ±ããããŠããã®ã§ããã°ããããèšç®ããããã«ãã®ãããªãã®ãæžãã ãã§ãããªãç°¡åã§ãæ確ã§ãå¹ççã§ãïŒJuliaãããã§ããããïŒã
uâ
v
é¢æ°dot
ãšinner
ã®ã©ã¡ãã§åŒã³åºããã¯ãããããã¹ãŠã®äžã§æãéèŠã§ãªãéšåã®ããã§ãã ã©ã¡ãã®éžæãæŽå²å®¶ã«ãã£ãŠçœå®³ãšããŠæ¯ãè¿ãããããšã¯ãªããšç§ã¯ããªã確信ããŠããŸãããæŽå²å®¶ããŸã£ããæ°ã«ããããšããèãã¯ç¢ºãã«ãäžèŸã§ãã äžæ¹ã§ã¯ã uâ
v
ã®ãçã®å
ç©ãã®æå³ãç¶æããããšã«åæããå Žåã¯ãã¯ãã inner
ãããæ£ç¢ºãªæ°åŠçšèªã§ãã äžæ¹ã察å¿ããé¢æ°åãæã€æ§æãããå Žåãååãæ§æãšäžèŽãããšããŠãŒã¶ãŒã®æ··ä¹±ãå°ãªããªãåŸåããããŸãã ããã§ã®æ§æã¯ãããã䜿çšããŠããããããã®çµéšåã§ã¯ããã®æäœã®ã¹ãã«ãdot
ãšããŠãµããŒãããŠããŸãã ãããããããã¯const dot = inner
ãå®çŸ©ããäž¡æ¹ããšã¯ã¹ããŒãããããã®åççãªã±ãŒã¹ãããããŸãããïŒ ããããã°ãåãååãªã®ã§ã奜ããªååã䜿çšãŸãã¯æ¡åŒµã§ããŸãã 誰ããã©ã¡ããã®ååãä»ã®äœãã«äœ¿çšãããå Žåãä»ã®ååã¯ããã©ã«ãã®æå³ã§åŒãç¶ã䜿çšã§ããŸãã ãã¡ãããåãé¢æ°ã«å¯ŸããŠ3ã€ã®ãšã¯ã¹ããŒããããååïŒ dot
ã inner
ã â
ïŒãäœæãããŸãããããã¯å°ãéå°ã«æããŸãã
â
èšå·ãåé€ãããã <u,v>
ã«çœ®ãæãããªãã·ã§ã³ã§ããïŒ
ã³ã¡ã³ãïŒ
<u,v> * M * x
察ã
u â
v * M * x
<u,v>
æ§æã¯ãé¢é£ä»ããæå³ããŸããæåã«u
ãšv
ãæäœãã次ã«åŒã®æ®ãã®éšåãæäœããŸãã
ãŠãŒã¶ãŒã<u,v>
ãšå
¥åããããšããå ŽåãåçŽãªsum(x[i]*y[i])
ã念é ã«çœ®ããŠããå¯èœæ§ã¯ã»ãšãã©ãããŸããã èšå·â
ã¯ç®ã§ã¹ããããããããä»ã«ãå€ãã®æå³ããããŸãã ç¹ã«ãç·åœ¢ä»£æ°ã§ã¯ãäœFäžã®ãã¯ãã«ç©ºéVã®å Žåãã¹ã«ã©ãŒÎ± â F
ãšãã¯ãã«v â V
ã®ç©ã¯ãããŸããŸãªæç§æžã§Î± â
v
ãšè¡šãããŸãã
â
ãåé€ãŸãã¯çœ®æãããšãè€æ°ã®ååããšã¯ã¹ããŒããããåé¡ã解æ¶ãããŸãã äžè¬çãªå
ç©ã®å Žåinner
ãš<,>
ã®ã¿ããšã¯ã¹ããŒãããå¿
èŠããããå埩å¯èœãªåèšã»ãã³ãã£ã¯ã¹ã«äžèŽããé
åã®ããã©ã«ãã®å®è£
ã䜿çšããŸãã
äœFäžã®ãã¯ãã«ç©ºéVã«å¯ŸããŠäžèšã®ãããªã¹ã«ã©ãŒããšã®ç©ãå®çŸ©ããå¿
èŠãããå Žåã圌/圌女ã¯ããã«å¯ŸããŠâ
è¡šèšãå®çŸ©ããããšãã§ããŸãã 次ã«ããã¯ãã«ç©ºéã¯çŽ æµãªçãæ§æã§å®å
šã«å®çŸ©ãããããã«<u,v>
ãå®çŸ©ããããšã§ãã«ãã«ã空éã«æ¡åŒµã§ããŸãã
æ§æ<u,v>
ã䜿çšããããšã¯çµ¶å¯Ÿã«ã§ããŸããã 䜿çšã§ããæ§æã¯âšu,vâ©
ã§ããUnicodeè§ãã£ãã«æ³šæããŠãã ããã倧ãªãèšå·ã§ã¯ãªãã <
ãš>
ã§ãã ãŸããå
ç©ãŸãã¯å
ç©ã®ããããã§ãããã®ã®æ§æãšããŠu'v
ããããŸããïŒ ïŒã©ã¡ããããããŸãã...ïŒ
ã¯ããç³ãèš³ãããŸããããUnicodeããŒãžã§ã³ã§ãã èªãã®ã¯éåžžã«æ確ã§ãããã ãŸããè€æ°ã®ååã§ãã®åé¡ã解決ããä»ã®ç®çã®ããã«â
ã解æŸããŸãã
â
ãä»ã®ç®çã«äœ¿çšããããªããšæããŸããæ··ä¹±ããããã§ãã
次ã®ãããªã³ãŒããèšè¿°ã§ãããšããããã©ãã»ã©çŽ æŽãããããšãæ³åããŠã¿ãŠãã ããã
âšÎ± â
u, vâ© + âšÎ² â
w, zâ©
æœè±¡ãã¯ãã«ïŒãŸãã¯åïŒ u,v,w,z â V
ããã³ã¹ã«ã©ãŒÎ±, β â F
ã®å Žåã
u'v
ã¯ãè¡åãªã©ã§ã¯ãªãã1次å
é
åã®ã¿ã®å
ç©ïŒããã³å
±åœ¹èŠåã«åŸãå Žåã¯å
ç©ïŒã§ãã ïŒããã¯ãäžçœ®ãããã1dé
åã«å¶éããããšãç¡æå³ã§ãããã1ã€ã®çç±ã§ããããã¯ããã®å Žåã®ç°¡æœãªè¡šèšæ³ããã§ã«ããããã§ããïŒ
ã¹ããã¡ã³ããæ£ããæ°åŠçšèªãã¯ã«ããŽãªãšã©ãŒã§ããæ°åŠçãªæ£ç¢ºãã¯ãçšèªãè¡šèšæ³ã«é©çšãããæŠå¿µã§ã¯ãããŸããã ïŒãæ£ãããããåŸæ¥ã®ãã«çœ®ãæããŸãããããããããããšãæžå¿µã¯ããã»ã©ç·æ¥ã§ã¯ãªããªããŸããïŒ
ã¢ã³ã°ã«ãã©ã±ããæ§æã®ææ¡ã«ã€ããŠã©ãæããŸããïŒ ããã§æèµ·ãããåé¡ã¯è§£æ±ºããŸããïŒ
ããã§ãããªãã®ææ¡ã¯æ£ç¢ºã«ã¯äœã§ããïŒ å€§ãŸãã«ããã§ããïŒ
dot
ãinner
ã«éæšå¥šuâ
v
ãâšu,vâ©
ã«éæšå¥šã§ã¯ã dot
é¢æ°ãâ
æŒç®åããããŸãããïŒ
ãã®å€æŽã¯åççãªãã®ã§ããããïŒ
è¿ä¿¡ãé ããŠç³ãèš³ãããŸããããã€ã³ã¿ãŒããããžã®ã¢ã¯ã»ã¹ãå¶éãããŠããäŒè°ã«åå ããŠããŸãã
ãããŠãæ確ããšå®å šæ§ã®ããã«ãããã§ã®å察ææ¡ã¯äœã§ããïŒ äœãããªãïŒ
ææ¡ãããã«æ確ã«ããããã«ãé¢é£ããæå³å€åããããŸãïŒäžè¬åãããå ç©ã
泚æïŒããã«ã€ããŠã¯ã0.7-alphaã«ãªããªãæ¬åœã®ãªã¹ã¯ããããšãããŸã§è°è«ããŸããã ããã¯ãã¢ã«ãã¡çã®åŸã§å€æŽã§ããªããšããæå³ã§ã¯ãããŸãããããã®åŸã¯å€æŽããããšã«æµæããããŸãã
ã¯ãããã£ãšåã«PRãæåºããã¹ãã«ãããã°ããã®ã«ãšæããŸãã ãããå®çŸããããšã¯ãéåžžã«éèŠãªæ©èœã§ãããšã¯æããŸãããç§ã®èœåãè¶ ããŠããŸãã
æŒç®åã®æ§æã®è³ªåãç¡èŠããŠããã»ãã³ãã£ãã¯æŠå¿µã®åã»ããïŒçŸåšã®dot
ãšvecdot
ããã³çŸåšã®norm
ãšvecnorm
ïŒã
dot
åŽã®å Žåããªãã·ã§ã³ã®ã¹ããŒã¹å
šäœïŒããã§ãå²åŒæŒç®åïŒã¯æ¬¡ã®ããã«ãªããŸãã
I. 0.7ã®åäœãæšæºã®ããã¯ãŒã³ãªãã®å
ç©ã«å€æŽããããšã«ãããé
åã®ãã¯ãã«ã§dot
ããµã€ã¬ã³ãã«è§£é€ããŸãïŒãã ããåäœãå€æŽãããŠããããšãèŠåã§ããŸãïŒã 0.7ã§ãvecdot
ãdot
ã«å»æ¢ããŸãã
IIã 0.7ã§ã¯ã inner
ãžã®ãã¹ãŠã®å
¥åã§vecdot
ãå»æ¢ããŸãã
IIIã 0.7ã§ã¯ãé
åã®ãã¯ãã«ã®dot
ããã®å®çŸ©ã«å¯ŸããŠéæšå¥šã«ããä»ã®å
¥åã®dot
ãš$ inner
ãžã®ãã¹ãŠã®å
¥åã®vecdot
ãéæšå¥šã«ããŸãã
IVã 0.7ã§ã¯ãé
åã®ãã¯ãã«ã®dot
ãšvecdot
ã®äž¡æ¹ãããšã¯ã¹ããŒããããŠããªãé¢æ°ãŸãã¯ãã®å®çŸ©ã®ããããã«éæšå¥šã«ãã dot
ãžã®ä»ã®ãã¹ãŠã®å
¥åã®vecdot
ãéæšå¥šã«ããŸãã 1.0ã§ã¯ãå
ç©ã»ãã³ãã£ã¯ã¹ãæã€é
åã®ãã¯ãã«ã«dot
ãè¿œå ããŸãã
æšæºåŽã§ã¯ãåäžã®ãã¹ã«ã€ããŠããã€ãã®ã³ã³ã»ã³ãµã¹ããããŸãïŒ0.7ã§ã¯ããããªãã¯ã¹ã®norm
ãopnorm
ã«éæšå¥šã«ããå Žåã«ãã£ãŠvecnorm
ãinnernorm
ã«éæšå¥šã«ããŸã;1.0ã§ã¯ãçŸåšã®vecnorm
ã»ãã³ãã£ã¯ã¹ãæã€è¡åã«norm
ãè¿œå ããŸãïŒãã1.0ã§ã¯è¿œå ã®ååïŒ vecnorm
ãŸãã¯innernorm
ïŒã«ãªããŸãïŒ; ãããåé¿ããæ¹æ³ã¯ã0.7ã®vecnorm
ãããšã¯ã¹ããŒããããååã§ã¯ãªãããã®å®çŸ©ãŸãã¯Base.vecnorm
ãªã©ã®ãšã¯ã¹ããŒããããŠããªãé¢æ°ã«å¯ŸããŠéæšå¥šã«ããããšã§ãã
...ãããã ç§ãç©äºã以åããããã£ãšã ã·ã«ããªãããšãæã¿ãŸãã
ã³ãŒãããŒã¹ã«ç²ŸéããŠãã人ã¯èª°ã§ãå€æŽã®PRãæåºã§ããŸããïŒ
誰ããåæããŠããããã«èŠããæšæºçãªãã®ãåå²ããŠãå°ãªããšããããæãéããããšã¯ã§ããŸããïŒ dot
察inner
ãããã¯ããªãç©è°ãéžããŠããŸãããããã§ãªãéšåããã®ã¹ãã£ããŒã«ãããªãããã«ããŸãããã
@StefanKarpinski ããããã¯ããçšåºŠçµåãããŠããããšã«æ³šæããŠãã ããããããïŒå ç©ïŒç©ãšãã«ã ã®äž¡æ¹ãããã¿ã€ãã®å Žåããããã¯äžè²«ããŠããå¿ èŠããããŸãã
ããããŸãããç§ã¯ãããã©ã¡ãã®æ¹åã«é²ããã¯æ¬åœã«æ°ã«ããŸããã ä»äºããã人ã¯èª°ã§ã決ããããšãã§ããŸãã
vecdot
ãååž°çã«ããããšã§ãçã®å
ç©ïŒããã³å¯Ÿå¿ãããã«ã ãšããŠvecnorm
ïŒãšããŠåäœãããPRïŒïŒ25093ïŒããããŸããã ããã¯ãå°æ¥ã®dot
ãšnorm
ãã©ã®ããã«ãªããã瀺ãåºçºç¹ãšããŠåœ¹ç«ã€å ŽåããããŸãã æ®å¿µãªãããgitã¹ãã«ãäžè¶³ããŠããããããã®PRãå°ç¡ãã«ããŠããŸããæ°ããå埩æ§æãå®äºããåŸã§PRã«æ»ãããšãèšç»ããŠãPRãéããŸããã
ãã ããæ°æ¥åã«2åç®ã®ç¶èŠªã«ãªã£ãã°ããã§ãããšããããšã¯ãçŸåšãç§ã®ã«ã¬ã³ããŒã«ã空ãæéãã®æéæ ããªãããšãæå³ããŸãã
æ°æ¥åã«äºåºŠç®ã®ç¶èŠªã«ãªã£ãã°ãã
ãžã¥ãããã§ãšãïŒ ð
ã¯ããããã§ãšãããããŸãïŒ
dot
ãšinner
ã®äž¡æ¹ãæã€ãšããèãã«ã€ããŠãããã€ãã®ã³ã³ã»ã³ãµã¹ã圢æãããŠããããã§ããããã§ã
inner
ã¯çã®ååž°å
ç©ã§ãdot = dot(x,y) = sum(x[i]'*y[i] for i = 1:length(x))
å
±åœ¹ã§ãããã©ããã«é¢ä¿ãªãããããã£ãŠVector{<:Number}
ãŸãã¯Vector{<:Real}
ã®dot
ãšéè€ããŸãããã«ããããïŒ
å€ãã®äººã¯ãå åŽãæå³ãããšãã«ããããèšè¿°ããã»ãšãã©ã®å Žåã¯åé¡ãªãæ©èœããŸãããè¡åã®é åãæž¡ããããšãã³ãŒãã¯äºæããªãåäœãããŸãã
ãããåé¡ã«ãªããšã¯æããªãã ããã¯ããªãçããæäœãªã®ã§ãå°ãªããšã人ã ããããäœãããã®ããèŠãããããã¥ã¡ã³ããèŠã«è¡ã£ããããããšãæåŸ ããŸãã
dot
ã®ã»ãã³ãã£ã¯ã¹ã¯ã»ãšãã©ã®å Žåå€æŽãããªããããäžèšã¯å€§ããªå€æŽã§ãããããã»ã©æ··ä¹±ãæãããšã¯ãªããšæããŸãã
dot
ãšinner
ã®äž¡æ¹ãæã€ãšããèãã«ã€ããŠãããã€ãã®ã³ã³ã»ã³ãµã¹ã圢æãããŠããããã§ãã
ããã©ãããã httpsïŒ //github.com/JuliaLang/julia/issues/25565#issuecomment -390069503ããã®è°è«ã¯ãããšãã°httpsïŒ// githubã«ç€ºãããŠããããã«ãã©ã¡ããäžæ¹ã䜿çšããããšãæ¯æããŠããããã§ãããäž¡æ¹ã䜿çšããããšã¯ã§ããŸããã com / JuliaLang / julia / issues / 25565ïŒissuecomment -390388230ã§ããããªã¢ã¯ã·ã§ã³ã§ååã«ãµããŒããããŠããŸãã
ãã¶ãinner
ïŒããã³dot
ïŒã¯ååž°çãªå
ç©/ããã/ã¹ã«ã©ãŒè£œåã§ããå¿
èŠããããå€ãåäœã¯dotc(x,y) = sum(x[i]' * y[i] for i in eachindex(x))
ãdotu(x,y) = sum(transpose(x[i]) * y[i] for i in eachindex(x))
ãªã©ã®é¢æ°ã§å®è£
ã§ããŸãã ïŒ dotu
ããã³dotc
ãšããååã¯ã察å¿ããBLASåãšäžèŽããŸãã
ïŒâšuãvâ©ãâšu|vâ©ããŸãã¯ïŒuãvïŒã¯ãä»»æã®ãã«ãã«ã空éã®å ç©ã®ããäžè¬çãªè¡šèšæ³ã§ããããšã«åæããŸãããããã¯ç§ãé垞䜿çšãããã®ã§ããããããã®è¡šèšæ³ã¯Juliaã®åå¿è ã§ã¯ãããŸããã ãUnicodeãã©ã±ãããé¢æ°/ãã¯ãåŒã³åºããšããŠè§£æããããšã«ã€ããŠã®è°è«ããããŸããïŒäŸïŒïŒ8934ããã³ïŒ8892ïŒããã©ãã«ãè¡ããŸããã§ãããããã¯ããã«å€ããå¯èœæ§ã¯äœãããã§ããïŒ
@stevengj ããã®æ®µèœãåã®ã³ã¡ã³ãã«èªåã§è¿œå ãããšããæ§æâšu,vâ©
ãèšèªã§å®è£
ããã®ã¯é£ãããšããããšã§ããïŒ
ãã®æ©èœãJuliav1.0ã«ç§»è¡ããå¯èœæ§ã¯ãããŸããïŒ äžè¬çãªå ç©ã®æŠå¿µã«äŸåããã¢ã€ãã¢ãããã±ãŒãžã¯ãããããããŸãã æåŸ ãäžããå¿ èŠããããã©ããæããŠãã ããã ãã€ããªãã€ã³ããŒããŠãã¿ãŸããã
ïŒ27401ãèŠãããšããããŸãããïŒ
@jebejã«æè¬ãã @ ranochaããªãŒãããŠãããŠããããšãïŒheartïŒ
ãã®æ®µèœãåã®ã³ã¡ã³ãã«èªåã§è¿œå ãããšããæ§æâšuãvâ©ãèšèªã§å®è£ ããã®ã¯é£ãããšããããšã§ããïŒ
ããŒãµãŒã«è¿œå ããããšã¯æè¡çã«é£ããããšã§ã¯ãããŸããããèšèªã§ã«ã¹ã¿ã ãã©ã±ãããè¡šçŸããæ¹æ³ïŒããã³è¡šçŸãããã©ããïŒã«ã€ããŠã³ã³ã»ã³ãµã¹ãåŸãã®ã¯é£ããããšã蚌æãããŠããŸãã 4幎åã«ã¯ã©ãã«ãè¡ããããã以æ¥åŸ©æŽ»ããŠããªãïŒ8934ã®è°è«ãåç §ããŠãã ããã ïŒããŸããŸãªåéã§ã人ã ã¯ããŸããŸãªããšã«åãæ¬åŒ§ã䜿çšããŠãããšããäºå®ã«å ããŠãããšãã°ãâšuâ©ã¯çµ±èšç©çåŠã®ã¢ã³ãµã³ãã«å¹³åã«äœ¿çšãããŸããïŒïŒ8892ã§æèµ·ãããå¥ã®åé¡ã¯ãå€ãã®ç°ãªãUnicodeã®èŠèŠçãªé¡äŒŒæ§ã§ãããã©ã±ããã
@stevengjã«æè¬ããŸããç§ã¯èª¬æã«æè¬ããŸãã ããã±ãŒãžå šäœã§æšæºåãããäžè¬çãªå ç©ãåŸãããããšã«ãç§ã¯ãã§ã«éåžžã«è奮ããŠããŸãã ïŒ100ïŒå±±ãã£ãè¡šèšã¯ãå°æ¥ã®å¥ã®ãªãªãŒã¹ãµã€ã¯ã«ã§èŒãå¯èœæ§ããããŸãã ããã»ã©éèŠã§ã¯ãããŸããããç§ãã¡ã®åºçç©ã®æ°åŠã®ãããªæåéãã®ã³ãŒããæžãããšãã§ããã®ã¯éåžžã«äŸ¿å©ã§ãã
âšargs...â©
ãanglebrackets
æŒç®åãªã©ãåŒã³åºãããã®æå¹ãªæ§æã§ããå ŽåïŒãã®æ§æãåŒã³åºãé¢æ°ãåŒã³åºãã«ã¯ãåäŸããªããããå®éã«ã¯å°ã泚æãå¿
èŠã§ãïŒãæ§æã«å¿
èŠãªæå³ãéžæããŸãã
@StefanKarpinski ãïŒ8934ã®è°è«ã¯ãããã¯ãã¯ãã§ããã¹ãã ãšãããã®ã§ããã åæã«éãããšã¯æããŸããã
ïŒBaseã§anglebrackets(a,b)
ãinner(a,b)
ãæå³ãããšæ±ºå®ããå Žåã決å®ã¯ãã§ã«è¡ãããŠããããã人ã
ãã奜ããªæå³ãéžæãããããšãæããšã©ãŸãããŸãã
ãã¡ãããããã¯ã²ã©ãéžæã§ã¯ãããŸãããã解æãããŠããéããBaseã§ããã«æå³ãå²ãåœãŠãå¿
èŠã¯ãªããããããŸãããïŒ
ãã®è°è«ã®è©³çŽ°ã¯æãåºããŸãããããã¯ããäœæããããšã¯ç§ã«ã¯æããã«æªãèãã®ããã«æããŸãã
ïŒ27401ã§ã¯ãå ç©ãçå£ã«åãæ¢ããããŠãããšèããããŸãã
åŸæ¥ãåé¡ã¯ãé¢é£ããPRãããŒãžãããå Žåã«ã®ã¿ã¯ããŒãºãããŸã...
ãã¡ãããéãããŸãŸã«ããŠããããšãã§ããŸãã ããªã¢ãŒãžã©ãã«ããå€ãããã£ãã ãã§ãã
ïŒ27401ãããŒãžãããã®ã§ããããéããå¿ èŠããããŸããïŒ
æãåèã«ãªãã³ã¡ã³ã
ïŒ27401ãããŒãžãããã®ã§ããããéããå¿ èŠããããŸããïŒ