.op
ã¯äžè¬ã«op
ã®ãã¯ãã«åããã圢åŒã§ããããã .'
ã'
ã®ãã¯ãã«åããã圢åŒã§ã¯ãªã転眮ãæå³ããããšã¯éåžžã«æ··ä¹±ããŠããŸãïŒé䌎ãå¥åctranspose ïŒã ãã®åé¡ã¯ã転眮ããã³/ãŸãã¯é䌎ã®ä»£æ¿æ§æã«ã€ããŠèª¬æããããã®ãã®ã§ãã
ã¢ã³ãã¬ã¢ã¹ã¯ïŒ19344ã§Aáµ
ïŒãããŠããããAᎎ
ïŒãè©ŠããŸããããããŸãè©å€ãè¯ããããŸããã§ããã åæ§ã«ã A^T
ã転眮ãããããã«ãç¹å¥ãªææ°ã¿ã€ãT
ïŒããã³ããããH
ïŒã䜿çšããŠ^
ãé§æŽèœã«ããããšãã§ããŸããããããããªãæªããã§ãã ãŸã ã¡ãã£ãš/ã¡ãã£ãšæ°åŠè¡šèšã®ããã«èŠããä»ã®å€ãã®è¯ããªãã·ã§ã³ããããã©ããã¯ããããŸããã
t(A)
ãæé«ãããããªããšæããŸãããå¥ã®1æåã®ååããçããã®ã¯æ®å¿µã§ãã
ç§ã®ã³ã¡ã³ããä»ã®åé¡ãã移åããŸãïŒãããäœãã解決ãããšããããã§ã¯ãããŸããã...ïŒïŒ
.'
以å€ã®ãã®ã䜿çšããå Žåã¯+1ã
ããŸãæçœã§ã¯ãªãâ
ã䜿çšããAPLãš*X
ã䜿çšããPythonïŒJuliaã«ãšã£ãŠæ··ä¹±ããïŒãé€ããŠã転眮ã®ããã®ç¹å¥ãªæ§æãæã€èšèªãèŠã€ããããšãã§ããŸããã§ããã ããã€ãã®èšèªã¯transpose(X)
ã䜿çšããŸã; Rã¯t(X)
ã䜿çšããŸãã ããã¯ãããã§ã¯ãããŸãããã .'
ããæªãã¯ãããŸããã å°ãªããšãã .'
ãšæ··åããããšã§ã '
ã䜿çšããåŸåãå°ãªããªããŸããããããéåžžã«ç°ãªãæäœã§ããããšã¯æããã§ãã
Rosettaã³ãŒããåç §ããŠãã ããã ïŒãšããã§ããžã¥ãªã¢ã®äŸã¯å®éã«å ±åœ¹è»¢çœ®ã瀺ããŠããŸã...ïŒ
ä»ã®ããã®1ã€ã䜿çšã§ããŸããïŒ `
ãŸãã¯"
-100ãé䌎äœçšçŽ ã«å€æŽããŸããããã¯ãJuliaã³ãŒããæ°åŠãæžãã®ãšåããããæ確ã«ããçŽ æŽããããã®ã®ã²ãšã€ã§ãããããã«å ±åœ¹è»¢çœ®ã¯éåžžããšã«ããå¿ èŠãªãã®ãªã®ã§ãæ§æãçç¥ããæ¹ãçã«ããªã£ãŠããŸãã
å
±åœ¹è»¢çœ®ã®åªããæ§æãããéããéåžžã®è»¢çœ®ã®æ¥å°ŸèŸæŒç®åã¯ã»ãšãã©äžèŠã®ããã«æãããã®ã§ãéåžžã®é¢æ°åŒã³åºãã«ããã ãã§åé¡ãªãããã«æããŸãã transpose
ãã§ã«æ©èœããŠããŸãã ãã ããã䜿ãããšãã§ããŸããã§ãããïŒ t(x)
R-ismã¯ãååããå®éã«äœãããã®ããæ確ã§ãªããããæ®å¿µãªããšã«æããŸãã
å¥ã®ç®çãã䜿çšãããšãã¡ãã£ãšå¥åŠã«ãªããŸããããšãã°ããã©ã³ãã«ãã£ãŠã¯A`
ãA'
ã®ããã«èŠãããã A"
ãA''
ã®ããã«èŠãããããããŸãã ã
ïŒ20978ã§å€æŽãå ãããšãæ¥å°ŸèŸã®è»¢çœ®ãå®éã«ã¯çŸåšããã䟿å©ã«ãªããŸãã ããšãã°ã2ã€ã®ãã¯ãã«x
ãšy
ãããããããã«f
ãã¢ããšã«é©çšããå Žåã¯ãããšãã°f.(x, y.')
...ãïŒ20978ã§å®è¡ã§ããŸãã ãããã¯ä»»æã®ã¿ã€ãã®é
åã«é©çšãããŸãã
æ£çŽãªãšãããç§ãã¡ã®æåã®éžæè¢ã¯ãããããã®ãŸãŸã«ããŠããããšã ãšæããŸãã ææ¡ã®ã©ããç§ã«ã¯æãããªæ¹åã®ããã«ã¯æããŸããã .'
ã«ã¯ãMatlabã«ç²ŸéããŠãããšããå©ç¹ããããŸãã .
ã¯ãå®éã«ã¯f.(x, y.')
ã®ãããªäŸã®ãããåŒã³åºãæ§æãšããçšåºŠäžèŽããŠããã転眮ããèåãããããšãïŒããçšåºŠæ£ããïŒç€ºåããŠããŸãïŒ RowVector
ã®ãããã§äžæçãªã³ããŒã¯çæãããŸããïŒ
å®éããããããã«é²ããŠã f.(x, g.(y).')
ãèåæäœã«ããããšãã§ããŸãã ã€ãŸãã .'
転眮ãéååž°çãªalaïŒ20978ã«å€æŽãããã®ã»ãã³ãã£ã¯ã¹ãæ¡åŒµããŠãä»ã®ãã¹ãããããããåŒã³åºããšã®èåãå«ããŸãã ïŒéèåããŒãžã§ã³ãå¿
èŠãªå Žåã¯ã transpose
ãåŒã³åºããŸããïŒ
ç§ã¯ãã®èšç»ããšãŠã奜ãã§ãã@stevengjã
1ã€ã®ããïŒãããã@.
ãã¯ãã¯y'
ãy.'
$ã«å€æããŸããïŒããã¯ééã£ãŠããããïŒã ãã ãã y'
ãããçš®ã®èåé䌎äœçšçŽ ã«å€ããããšãã§ããŸãã
äž»ãªåé¡ã¯ã f.(x, g.(y).')
ã«èåã»ãã³ãã£ã¯ã¹ãæãããããã®ã¯ãªãŒã³ãªæ¹æ³ãèŠã€ããããšã§ãã 1ã€ã®å¯èœæ§ã¯ããããf.(x, g.(y.'))
ã«å€æãããããã£ãŠbroadcast(x,y -> f(x, g(y)), x, y.')
ã«å€æããããšã§ãã
ãããæ£ããæ©èœããããã«ã¯ããã©ãŒã«ããã¯transpose(x) = x
ã¡ãœããã埩å
ããå¿
èŠãããå Žåãããããšã«æ³šæããŠãã ããããã®å Žåã転眮ãååž°çã«ç¶æããããšãã§ããŸãã
転眮ãååž°çã«ãããã©ããã®æ±ºå®ã¯ããããæ§æã®èåã«åå ããããã©ãããšçŽäº€ããŠãããšæããŸãã ãããéååž°çã«ãããšããéžæã¯ãããã«ãã£ãŠåæ©ä»ããããŠããŸããã
@StefanKarpinski ããã©ãŒã«ããã¯transpose(x) = x
ã埩å
ãããšãéååž°çã«å€æŽããåæ©ã®ã»ãšãã©ã倱ãããŸãã
ãã©ãŒã«ããã¯ã埩å ãããŠãã転眮ãéååž°çã§ããå Žåã®åé¡ã¯äœã§ããïŒ
@jebej ãå垰転眮ã¯ãç·åœ¢æŒç®åã®æ°åŠæŒç®ãšããŠäœ¿çšãããšãããæ£ç¢ºã«ãªããŸãã ç§ã®èšæ¶ãæ£ãããã°ãéååž°çã«ããäž»ãªçç±ã¯ãMethodErrorãã¹ããŒããã®ã§ã¯ãªãã transpose(x) = x
ãã©ãŒã«ããã¯ãå®çŸ©ããå¿
èŠããªãããã§ãã
ãããããã©ãŒã«ããã¯ãããããšã¯ã²ã©ãããšã§ã¯ãããŸããããããã§ãååž°çã§ã¯ãããŸããã
2ã€ã®ã³ã¡ã³ããè¿œå ããŸãããïŒç§ã¯ä»¥åã®è°è«ã調ã¹ãŸãããããããã«æ°ã¥ããŠããŸããã§ãã-äœããçç¥ããå Žåã¯ç³ãèš³ãããŸããïŒïŒ
permutedims
ã®ããã¥ã¡ã³ãã«ã¯ãããã¯å€æ¬¡å
é
åã®è»¢çœ®ã®äžè¬åã§ãããšæžãããŠããŸãã transpose
é¢æ°ã®äžè¬åã瀺åããŠããã®ã§ãå°ã誀解ãæããŸãããããã§ã¯ãããŸãããx=["a", "b"]
ã®è»¢çœ®ãã©ã®ããã«è¡ãããšã«ãªã£ãŠããŸããïŒ å®éy=x.'
ãæ©èœããŠæ°ããå€æ°ãäœæããŸããã getindex
ã¯å€±æããŸãã AFAIKã䜿çšããã«ã¯ã reshape(x, 1, :)
ãŸãã¯ã¯ããã«é
ãhcat(x...)
ã䜿çšããå¿
èŠããããŸããã Vector
ã«å¥ã®æ§æã䜿çšããã®ã¯äžèªç¶ã§ãïŒ permutedims
ã¯ããã§ã¯æ©èœããŸããïŒ ïŒãæååã®ãã¯ãã«ã転眮ããããã®ãŠãŒã¹ã±ãŒã¹ã¯äœã§ããïŒ
ããšãã°ã次ã®ã·ããªãªãèããŠã¿ãŸãããã
x = ["$(j+i)" for j in 1:3, i in 1:5]
y = ["$i" for i in 5:9]
ãããŠã x
ã®æåŸã®è¡ã®åŸã«y
ãè¿œå ããããšæããŸãã ãããŠãæãç°¡åãªæ¹æ³ã¯ã vcat
ãy
ã®è»¢çœ®ããããšã§ãã
å®éã«ã¯ãããã¹ãããŒã¿ãMatrix{String}
ã«æ®µéçã«èšé²ãããšãã«çºçããŸãïŒ Vector{Vector{String}}
ã䜿çšã§ããŸãïŒããå€ãã®å Žåããããªãã¯ã¹ã®æ¹ã䟿å©ã§ãïŒãŸãã¯ã Vector{Vector{String}}
ãå€æããæ¹æ³ã«ã€ããŠã質åããããŸãïŒãé£ç¶ããèŠçŽ ãåçŽæ¹åã«é£çµããããšã«ããã Matrix{String}
ïŒã
å¥ã®äœ¿çšäŸïŒè»¢çœ®ã¯ããã«ã«ãç©ïŒ f.(v, w.')
ïŒã§é¢æ°ããããŒããã£ã¹ãããããã«ã2ã€ã®ãã¯ãã«ãäºãã«çŽäº€ãããæãç°¡åãªæ¹æ³ã§ãã
ããŒã¿ãã€ã³ãïŒæšæ¥ãæ¥å°ŸèŸãbroadcast-adjointãæŒç®åãšãããã転眮ã®ããã«åäœããçç±ã«ãã£ãŠæ··ä¹±ããŠããããŒãã£ãŒã«ééããŸããã äžçªïŒ
FWIWãç§ã¯.'
æ§æãåãé€ãã¹ãã ãšåŒ·ãæããŠããŸãã MatlabãããJuliaã«ç²ŸéããŠãã人ãšããŠãç§ã¯ããããã¯ãã«åãããé䌎äœçšçŽ ãæå³ãããšæã£ãŠããŸããããããã§ãªããšãã¯æ¬åœã«ã€ãŸãããŸããã Juliaã¯Matlabã§ã¯ãªããããMatlabã®èŠåã«ææãããã¹ãã§ã¯ãããŸãããJuliaã§ããããé£æ¥ããé¢æ°ã®ãã¯ãã«åãæå³ããå Žåãããã¯èšèªå
šäœã§äžè²«ããŠããå¿
èŠãããã .'
ãšãã1ã€ã®æãããäŸå€ãã©ã³ãã ã«çºçããããšã¯ãããŸããã '
ãšã¯ç¡é¢ä¿ã§ãã
transpose
ãç¹å¥ãªãç®çããè¡šèšãªãã§äœ¿çšããã®ã¯åé¡ãªããšæããŸããã»ãšãã©ã®å Žåãå®æ°ã®è¡åã§åŒã³åºãããããã '
ã¯ã次ã®å Žåãšåçã«ãªããŸããæ¬åœã«ã¿ã€ãã³ã°ãç¯çŽãããã 転眮ã®èåããŒãžã§ã³ãäœæãããå Žåã .'
ãæ£ããæ§æã§ãããšã¯æ¬åœã«æããŸããã
ããã¯è¯ãç¹ã§ãã ãããããé䌎äœçšçŽ ã ããè¶ ã³ã³ãã¯ããªæ§æãå¿ èŠãšããŸãã
ããtranspose
ãšåŒã³ã$ïŒ$ 1 .'
ïŒ$ãå»æ¢ããŠã¿ãŸãããã å°æ¥çã«ã¯ã .'
ããã€ã³ãããšã®é䌎ãšããŠäœ¿çšããããMatlabãŠãŒã¶ãŒã®ãã©ãããåé¿ããããã«æ°žç¶çã«éæšå¥šã®ãŸãŸã«ããããæ€èšã§ããŸãã
ç»é²æžã¿ã®ããã±ãŒãžã調ã¹ããšããã600以äžã®.'
ã®äœ¿çšæ³ãèŠã€ãã£ãã®ã§ãããã»ã©çããããšã§ã¯ãªãããšã«æ³šæããŠãã ããã ãããŠããããåŒã³åºã/ broadcast
ïŒ0.6ã§ã®ã¿éæ°å€ããŒã¿ãå®å
šã«åŠçãå§ããïŒã§ã¯ãéæ°å€é
åïŒé䌎ãããŸãæå³ããªããªãïŒãæ æ°ã«è»¢çœ®ããããšããé¡æãããããã¯ããã«äžè¬çã«ãªãã§ããããã³ã³ãã¯ããªæ§æã®è°è«ã¯ãã匷åãããŠããŸãã
次ã«ãããå€ãã®ã³ãŒããæªã䜿çšãã¿ãŒã³ã«éã蟌ããããåã«ãã§ããã ãæ©ã.'
ãå»æ¢ããããšããå§ãããŸãã
ãªãæªãã®ã§ããïŒ
åé¡ã¯ã .'
ããç¹ç·ã®æŒç®åãšããŠæå³ããŠããããã«èŠããããšãæå³ããªãããšã§ãã
äžã§è¿°ã¹ãããã«ã .
ã¯ãã¯ãã«åãæå³ãããã¯ãã«åãããé䌎äœçšçŽ ãæå³ããããã«èŠãããšããäžè¬çãªãã¿ãŒã³ã«éåããŠããããã§ãïŒç¹ã«Matlabã«ç²ŸéããŠããªã人ã«ãšã£ãŠïŒã
@stevengjã¯è¯ãç¹ã ãšæããŸãâããã¯åçŽãªéååž°çãªè»¢çœ®ã®æ¬²æ±ãšçµã³ã€ããŠããŸãã
人æ°ããªãã£ãããšã¯ç¥ã£ãŠããŸãããã¢ã³ãã¬ã¢ã¹ã®ïŒ19344ãáµ
ã§æ¯æãå§ããŠããŸãã ãã®æç¹ã§ãèå¥åãšããŠã®_all_äžä»ãæåã®äœ¿çšãå»æ¢ãã_any_æ«å°Ÿã®äžä»ãæåãæ¥å°ŸèŸæŒç®åãšããŠè§£éããããšããå§ãããŸãã ããã¯ãŸããäžä»ãæåã®æ°åã䜿çšããŠã literal_pow
åšèŸºã®äžåšçšãã®äžéšã解決ããããã®ãã¹ãæäŸããŸãã ã¯ããå€æ°åãªã©ã®Ï²
ã倱ãã®ã¯æ²ããããšã§ãããã¡ãªããã¯ãã¡ãªãããäžåã£ãŠãããšæããŸãã
ãã®æç¹ã§ãèå¥åãšããŠã®_all_äžä»ãæåã®äœ¿çšãå»æ¢ãã_any_æ«å°Ÿã®äžä»ãæåãæ¥å°ŸèŸæŒç®åãšããŠè§£éããããšããå§ãããŸãã
ã³ãŒãããªããã³ã°ãã
ãã®æç¹ã§ãèå¥åãšããŠã®ãã¹ãŠã®äžä»ãæåã®äœ¿çšãå»æ¢ããããšããå§ãããŸã
T
ã ãã§ãå°æ¥çã«ã¯ä»ã«ãããã€ãå¿
èŠãªå Žåã¯ããããå¿
èŠã«ãªããšã¯æããŸããã
ã¯ãã転眮ã«.'
ã䜿çšããããšã¯å°ãäžè²«æ§ããããŸãããããããŸã§ã«ææ¡ããããã¹ãŠã®ä»£æ¿æ¡ã¯ãã£ãšæªãããã§ãã ã .'
ã¯è»¢çœ®ã§ããããããæŒç®åã«é¢ããéåžžã®èŠåã®äŸå€ã§ãããšèšãã®ã¯äžçã§ææªã®ããšã§ã¯ãããŸããã ããªãã¯ãããåŠã³ã次ã«é²ã¿ãŸãã
.'
ãããããããŒããã£ã¹ãã§ã¯ãªãããšã«é¢ããæœåšçãªæ··ä¹±ã«åœ¹ç«ã€å¯èœæ§ãããããšã«æ³šæããããšã®1ã€ã¯ããã¬ãã£ãã¯ã¹ãããŒããã£ã¹ããop.
ã§ãããã€ã³ãã£ãã¯ã¹ã.op
ã§ããã®ã«å¯Ÿããããã¯åŸçœ®æŒç®åã§ãããšããããšã§ãã ãããã£ãŠã .
ã¯ãæ¥å°ŸèŸã®å Žåã®ãããŒããã£ã¹ããæå³ãããã®ã§ã¯ãªããšèšããŸãã æ¥å°ŸèŸ.
ã®ä»ã®äœ¿çšæ³ã¯ãã£ãŒã«ãã«ãã¯ã¢ããã§ããã getfield(x, ')
ã¯æå³ããªããªããããä»ã®æå³ãšã¯ç°ãªããŸãã
ïŒãšã¯ãããç§ã¯.'
transpose(x)
ã奜ã¿ãŸããïŒ
@stevengjäžèšã®ç»é²æžã¿ããã±ãŒãžã§ã®600以äžã®äœ¿çšã®å€ãïŒããããã»ãšãã©ïŒã¯ãèªã¿ããããšã³ãŒããç ç²ã«ããããšãªãã$ïŒ .'
'
ã«çœ®ãæããããšãã§ãããšæããŸããåäœãç¶ããŸãã
ãããã人æ°ã¯ãããŸããããæ¥å°ŸèŸ"
ãš`
ããŸã ååšããå¯èœæ§ããããŸããïŒ
ã®äœ¿çšã äžèšã®ç»é²æžã¿ããã±ãŒãžã§ã¯ãèªã¿ããããç ç²ã«ããããšãªã'ã«çœ®ãæããããšãã§ããã³ãŒãã¯åŒãç¶ãæ©èœããŸãã
ïŒ23424ãå°éãããšãæååã®é
åãªã©ã§transpose
ã䜿çšã§ããããã«ãªããŸããã adjoint
ã¯äœ¿çšã§ããªãããšã«æ³šæããŠãã ããã x.'
ã®ç·åœ¢ä»£æ°äœ¿çšã®ãã¹ããã©ã¯ãã£ã¹ã¯ãããããconj(x')
ã®ãããªãã®ã«ãªããŸãïŒããŸãããã°ãããã¯æ æ°ã§ãã€ãŸãç¡æã§ãïŒã ã³ã³ãã¯ããã®ããã«.'
ã䜿çšããã®ã倧奜ãã§ããããããããããåãé€ããšãç·åœ¢ä»£æ°ãŠãŒã¶ãŒã¯æ£ãããã®ã䜿çšããããŒã¿é
åãŠãŒã¶ãŒã¯ã¹ãã«ã¢ãŠããããtranspose
ã䜿çšããããã«ãªããŸãã
æ¥å°ŸèŸ"ãš`ããŸã ããå¯èœæ§ããããŸããïŒ
transpose()
ã®æ°ããæ§æã¯ãããªãææå°æ©ã®ããã§ãã ç§èŠã§ã¯ãå¿
èŠã«å¿ããŠconj(x')
ãštranspose
ã«çœ®ãæããããšããå§ãããŸããã .'
ãå»æ¢ããããšããå§ãããŸãã
.'
ã¯ãäž»ã«ããã¹ãŠããããªãã¯ã¹ã§ããããšããmatlabã®äž»åŒµãšãããŸããŸãªå Žæã«ã©ã³ãã ãªè»¢çœ®ãæ¿å
¥ããå¿
èŠããããããªäžè²«ããã¹ã©ã€ã¹ã«ãŒã«ããªããããmatlabã§éåžžã«åœ¹ç«ã€ãšæããŠããŸããç©äºãæ©èœãããã
ããã§è°è«ãèŠçŽãããšïŒ
.'
ã¯ããããä»ãæŒç®åãšããŠå¯äžã®ååºãããã®ã«ãªããŸãããããã¯ããããããªãã®æŒç®åãèŠçŽ ããšã«é©çšããããšããæå³ã§ã¯ãããŸããã Matlabããæ¥ãŠããªãæ°ãããŠãŒã¶ãŒã¯ããããé©ãã¹ãçœ ã ãšæããŠããŸãã
.'
ã¯å®è³ªçã«ãããŸãã«ãªããŸããïŒ transpose
ãæå³ããŸãããããããšãconj(x')
ãæå³ããŸãããïŒ ååãšããŠã .'
ã®ãã¹ãŠã®ã¬ã¬ã·ãŒäœ¿çšæ³ã¯ã2次å
é
åã®ã€ã³ããã¯ã¹ã䞊ã¹æ¿ããŠããã®ãããããšããéå
±åœ¹é䌎ããè¡ã£ãŠããã®ããå€æããããã«ç²Ÿæ»ããå¿
èŠããããŸãã
æåã®åé¡ã¯åé¡ããããŸãããããèªäœã¯èŽåœçã§ã¯ãããŸããã 2çªç®ã®åé¡ã¯æ¬åœã«æªãåé¡ã§ããããã¯ãã¯ãåäžã®äžè²«ããæäœã§ã¯ãªãã2ã€ã®å¥ã ã®æå³ã«åå²ãããŸãã
.'
ããèŠçŽ ããšã®é䌎ããæå³ããããã«å€æŽããå Žåã conj(x')
ã¯x'.'
ãšã»ãŒåçã«ãªãã conj(x)'
ã¯ã»ãŒx.''
ã«ãªããŸãã x.'
ã«éåžžã«è¿ãã§ãð¬ã
ãããã人æ°ã¯ãããŸããããããã§ãæ¥å°ŸèŸãããšãïŒããååšããå¯èœæ§ããããŸãã
貌ãä»ããã³ãŒããSlackã«ã³ããŒããŠãæ§æã®åŒ·èª¿è¡šç€ºãç Žæ£ããããšã確èªãããš...
ãã£ã¹ãããã¡ã«ããºã ããã®ä»ã®çãç°¡æœãªãŠãŒã¹ã±ãŒã¹ãä»ããŠã補åãã¯ãã¹ãããã®ãç°¡åã«ãªããããäœã§ã転眮ã§ããã®ã¯çŽ æŽãããããšã§ãã ãã®çš®ã®ãã®ã®ç°¡åãªãã©ãŒã«ããã¯ããªãå Žåã®åé¡ã¯ãåžžã«ããããäœæããããã«transpose(x) = x
ãã©ãŒã«ããã¯ïŒãŸãã¯Baseã¿ã€ããã€ãŸãããã±ãŒãžå
ã®ã¿ã€ãèäœæš©äŸµå®³ïŒãå®çŸ©ããããšã§ããããçš®ã®ãã®ã¯ç°¡åã«åäœããŸãã ããã¯ç§ã«èããããŸãïŒãªãComplex
ã¯å¥åŠãªãã®ã§ã¯ãªãã®ã§ããïŒ ã»ãšãã©ã®æ°ã®é䌎äœçšçŽ ã¯ããèªäœã§ãããããè€éãªé䌎äœçšçŽ ãå°éã«ãªããŸãããããæ°ãè¶
ããŠæ¡åŒµããããšã¯ã§ããŸãããïŒ
ããã«2ã€ã®éåžžã«é¢é£ãããã®ããããŸãã
1ïŒ x'
ã¯æ°å€ä»¥å€ã®ã¿ã€ãã§ã¯æ©èœããªããããä»ã®ããŒã¿ã§ããããç°¡åã«å®è¡ã§ããæ¹æ³ãå¿
èŠã§ãã
2ïŒ transpose(x)
ã¯x.'
ã»ã©åçŽã§ã¯ãããŸããã è€éãªè¡åã転眮ãããŠãŒã¹ã±ãŒã¹ã¯ã¯ããã«ãŸãã§ãããããããã¯äž»ã«ïŒ1ïŒã®å Žåã«åœãŠã¯ãŸããŸãã
ããããïŒ2ïŒãäžãã代ããã«ãïŒ1ïŒãé©åã«ä¿®æ£ããŠã¿ãŸãããïŒ
ãã¶ããåççãªä¿®æ£ã¯ã '
ãé䌎ã§ã¯ãªã転眮ãæå³ãããã¯ãã«ããã ãã§ããïŒ
ããããïŒ2ïŒãäžãã代ããã«ãïŒ1ïŒãé©åã«ä¿®æ£ããŠã¿ãŸãããïŒ
ç§ãã¡ã¯ãã§ã«ãã®éãé²ãã§ãããããã€ãã¯ããã«é£æ¥ããŠããŸãã ããããä»ã®èª°ããèžçããããšãã§ããçµæãšããŠå€§éã®è°è«ããããŸããããèŠçŽãããšãããã¯ããŸããããŸããã åºæ¬çã«ãæ°åŠçãªadjoint
æŒç®ã¯ãæ°å€ã§ã¯ãªããã®ã«ã¯æå³ããããŸããã ç°¡æœãªæ§æã奜ãã§ãããšããçç±ã ãã§éæ°å€ã«'
ã䜿çšããããšã¯æªãããšã§ããããã¯ææªã®çš®é¡ã®æŒç®åã®ãããã§ããããã®çš®ã®æå³ã®ä¹±çšããæªãããšãèµ·ããããšã¯é©ãã¹ãããšã§ã¯ãããŸããã adjoint
é¢æ°ã¯ãé䌎äœçšçŽ ãåãããšãçã«ããªã£ãŠãããã®ã«ã®ã¿å®çŸ©ããå¿
èŠãããã '
ã¯ãããæå³ããããã«ã®ã¿äœ¿çšããå¿
èŠããããŸãã
çŸåšäœ¿çšãããŠãã.'
ã¯ãåºæ¬çã«2ã€ã®ç°ãªãæäœã§ããããšã«æ³šæããŠãã ãããé
å転眮ãšéå
±åœ¹é䌎ã§ãã å垰転眮åé¡ã¯ãããããç°ãªãæäœã§ããããããã£ãŠããããè¡šçŸããããã®ç°ãªãæ¹æ³ãå¿
èŠã§ãããšããäºå®ãæµ®ã圫ãã«ããŸãã ãã·ãŒã®äººã
ã¯ãéå
±åœ¹é䌎äœçšãïŒaïŒéèŠã§ãããïŒbïŒåçŽãªæ¬¡å
ã®äº€æãšã¯ç°ãªãããšãæåºãšããŠäž»åŒµããŠããããã§ãã ç¹ã«ãæ£ç¢ºã«ã¯ãéå
±åœ¹é䌎äœçšçŽ ã¯ååž°çã§ããå¿
èŠããããŸãã äžæ¹ããžã§ããªãã¯é
åã®æ¬¡å
ã®äº€æã¯æããã«ååž°çã§ãã£ãŠã¯ãªããŸããã ãããã£ãŠããããã®æäœã¯å¥ã®æ¹æ³ã§èšè¿°ããå¿
èŠãããã .'
ã®æ¢åã®äœ¿çšæ³ã¯ãããããã®æå³ãæã€ãã®ãšããŠæ確ã«ããå¿
èŠããããŸãã .'
ã®å»æ¢ã¯ãããã匷å¶ããæ¹æ³ã§ãã
æåŸã«ã permutedims(x, (2, 1))
ã¯2次å
é
åã®æ¬¡å
ã亀æããã«ã¯æããã«äžäŸ¿ã ãšåŒ·ãæããŠããŸããã transpose(x)
ã¯äžäŸ¿ãããŠçŽåŸããããªããšããè°è«ãèŠã€ããŸããã ãã®æäœã¯éåžžã«äžè¬çã§ãããããåçŽã§æ確ãªé¢æ°åãä»ããã®ã¯å€ãããŸããïŒ æ¬åœã«ïŒ é
åã®æ¬¡å
ã亀æããããšã¯ãé¢æ°åãšé¢æ°åŒã³åºãæ§æã䜿çšããèšèªã®ä»ã®ãã¹ãŠã®ãã®ãããã¯ããã«äžè¬çãŸãã¯éèŠã§ããïŒ v'v
ã v*v'
ã v'A*v
ã®ãããªãã®ãæžãããã®ã§ãããŠã¹ãã«ããŒè¡šèšã¯adjoint
ãéåžžã«ç¹å¥ãªãã®ã«ããŸãã ãã®ããã adjoint
ã¯éåžžã«åªããæ§æã«ãªããŸãã ããããé
åã®æ¬¡å
ã亀æããŸããïŒ ç§ã®æèŠã§ã¯ãããã¯ãªãã¬ãŒã¿ãŒãä¿èšŒãããã®ã§ã¯ãããŸããã
匷åãªè°è«ã§ã¯ãããŸããããããšãã°ãç»é¢ã«åæã«ããã€ãã®ãã¯ãã«ã®ã³ã³ãã³ãã衚瀺ãããå Žåãªã©ãããã³ã³ãã¯ããªé
åãå°å·ããããã«'
æŒç®åã䜿çšããããšããããããŸãïŒåçŽãªã³ã³ãããŒãšããŠäœ¿çšããå ŽåïŒïŒèŠçŽ ã転眮ã§ããªãããã倱æãããšå¿
ãã€ã©ã€ã©ããŸãïŒã ãããã£ãŠãREPLã®çãæ§æã¯ééããªã䟿å©ã§ãã ïŒãŸããããã«ãããç¹ã«2次å
é
åã䜿çšããŠã¢ã«ãŽãªãºã ãjuliaã«ç§»æ€ããå Žåã«ãè¡ãåªå
ããé
åã«æ
£ããŠãã人ã
ããé åºãåãæ¿ãããç°¡åãªæ¹æ³ãç°¡åã«å©çšã§ããããã«ãªããŸããã確ãã«åŒ·åãªè°è«ã§ã¯ãããŸããïŒã ããã¯ãç·åœ¢ä»£æ°äž»çŸ©è
ã ãã«åœ¹ç«ã€ããã§ã¯ãªããç°¡æœã§åªããæ§æã§ãããšèšããŸãã
https://github.com/JuliaLang/julia/pull/19344#issuecomment -261621763ã§ããã€ãã®æ§æã®ã¢ã€ãã¢ã«ã³ã¡ã³ãããŸããããåºæ¬çã«ã¯æ¬¡ã®ãšããã§ãã
julia> const áµ, ᎎ = transpose, ctranspose;
julia> for op in (áµ, ᎎ)
<strong i="7">@eval</strong> Base.:*(x::AbstractArray{T}, f::typeof($op)) where {T<:Number} = f(x)
end
julia> A = rand(2, 2)
2Ã2 Array{Float64,2}:
0.919332 0.651938
0.387085 0.16784
julia> Aáµ = (A)áµ # variable definition and function application are both available!
2Ã2 Array{Float64,2}:
0.919332 0.387085
0.651938 0.16784
julia> Aᎎ = (A)ᎎ
2Ã2 Array{Float64,2}:
0.919332 0.387085
0.651938 0.16784
ãããããã¡ããããã¯ããªããã°ãããçš®ã®ãåŸçœ®é¢æ°é©çšãããããæ¬åŒ§(x)f
ãå¿
èŠã§ãããšããèãã ãã§ãç¹ç·ã®ããŒãžã§ã³ã¯æ¬¡ã®ããã«ãªããŸã(x).f
ïŒ xf
f
ãäžä»ãèšå·ã§ãã£ãŠãã xf
ã¯èå¥åã«ãªããŸãïŒã
ãã®ããã¯ã®äŸã¯ã以åã¯0.6ã§æ©èœããŠããŸããããçŸåšã¯æ¬¡ã®ããã«ãªã£ãŠããŸãã
julia> Aáµ = (A)áµ
ERROR: syntax: invalid operator
julia> Aáµ = (A)transpose
2Ã2 Array{Float64,2}:
0.995848 0.549117
0.69401 0.908227
julia> Aᎎ = (A)ᎎ
ERROR: syntax: invalid operator
julia> Aᎎ = (A)ctranspose # or adjoint or whatever
2Ã2 Array{Float64,2}:
0.995848 0.549117
0.69401 0.908227
æ²ããããšã«ãç§ã¯ããšããšæš©åã®ããã«ãããããããã£ãã®ã§ãã
julia> square(n) = n^2; cube(n) = n^3;
julia> Base.:*(n, f::typeof(square)) = f(n)
julia> Base.:*(n, f::typeof(cube)) = f(n)
julia> const ² = square # why?
syntax: invalid character "²"
julia> const ³ = cube # why?
syntax: invalid character "³"
n² = (n)²
ãn³ = (n)³
ã®ãããªæ§æãå¯èœã«ãªããšç§ã¯çŽ æŽã«æã£ãŠããŸããããã©ããªçš®é¡ã®æ°å€èå¥åãæåã®äœçœ®ã«çœ®ãããšã¯çŠæ¢ãããŠããŸããã (A)â»Â¹
ãæ©èœããŸããã â»Â¹
ã¯const â»Â¹ = inv
ãã
InfixFunctions.jlã«ãåæ§ã®ããã¯ãå®è£ ããŸããã
ãŠãŒã¶ãŒãšããŠãç§ã¯PostfixFunctions.jl
ããã±ãŒãžãå®è¡ããã ãã§ãããã§æé«ã®ãã®ãèŠã€ããŠæºè¶³ããããšãã§ããŸããã ããããçŸåšããã®æ§æäžã®å¶éã¯æ¬¡ã®ãšããã§ãã
x * á¶
ïŒããã¯ã§ã®æé»ã®ä¹ç®ïŒ (x)á¶
ã¯èš±å¯ãããŠããŸããç§ã«ã¯å°ãå€ãããããã§ãããå°ãªããšãæ°å€ã®äžä»ãæåã§å§ãŸãèå¥åãå®çŸ©ã§ããããã«ãããã®ã§ãããããäžè¬çã«ã¯ãæ°å€ã®ã»ãã³ãã£ã¯ã¹ã§0ã9ã®å®éã®æ°å€ã®ã¿ãç¡å¹ã«ããŸããèå¥åãããã¯çŽ æŽãããã§ãããã ð
也æ¯ïŒ
èå¥åãšããŠã®ä»ã®æ°åã®èª¬æã«ã€ããŠã¯ãïŒ10762ãåç §ããŠãã ããã
ãã1ã€ã®åé¡ã¯ãïŒ22089ãæŒç®åã®ãµãã£ãã¯ã¹ã«é¢é£ããŠããŸãã +áµ
ã¯æå¹ãªæŒç®åã«ãªããŸãããããã¯ãæŒç®åãæåŸ
ãããã³ã³ããã¹ãã§æåãçµã¿åãããã ãã§æ§æãããèå¥åãïŒããããå¶ç¶ã«ïŒèš±å¯ããŸããã§ããã ããã¯ç§ã«ã¯ãã°ã®ããã§ãã áµ
ãæå¹ãªèå¥åã§ããã®ã«ã -áµ
ã-(áµ)
ãå®è¡ããªãã®ãå°ãå¥åŠã§ãã ããããããã¯äžçã®çµããã§ã¯ãªããIMOããããä¿®æ£ããããšã¯ã áµ
ã®ä»ã®å¯èœãªäœ¿çšæ³ã倱ã䟡å€ããªãã§ãããã
.'
ãæ¥å°ŸèŸã®è»¢çœ®æŒç®åãšããŠäœ¿çšããããšã¯ãããã®è¡šã«ããããŸããïŒåé¡ã®äž»é¡ãäœãèšã£ãŠãããã«ãããããïŒãå®éã«ã¯ã .'
ãæ¥å°ŸèŸæŒç®åãšããŠä¿æããå¿
èŠããããã©ãããèæ
®ãããŸããéå
±åœ¹é䌎ã®å Žåãããã¯ååž°çã§ãã ããã¯ã移調ãšåãã§ããããšããããããŸãããäžè¬çã«åãæäœã§ã¯ãããŸããã ç·åœ¢ä»£æ°ã®äººã
ã.'
ã«äžè¬çãªé
åã®è»¢çœ®ãæå³ãããããšãããšããªãã®ã§ããã°ãããã¯å¥ã®è©±ã§ãããç§ã®å°è±¡ã¯åãå
¥ããããªããšããããšã§ãã
@ Ismael-VCãäžä»ãæåã®æ¥å°ŸèŸé¢æ°æ§æãšããŠ(x)áµ
ãèš±å¯ããŠããããšãããããŸããä»ã«äœãæå³ããã®ã§ããããïŒ ããªãã®ææ¡ã人ã
ãééã£ãæ¹æ³ã§æã¿å§ããã®ã¯ãæ¥å°ŸèŸæ§æã®é¢æ°ãšããŠä»»æã®èå¥åãé©çšã§ããããã«ããããšã ãšæããŸãã äžä»ãæåã«éå®ããŸãã
@StefanKarpinski ãã³ã³ã»ã³ãµã¹ã¯ã .'
ãéååž°çãéå
±åœ¹é
å転眮ãæå³ããããšãæ£ç¢ºã«èš±å¯ããããšã§ãããšæããŸããïŒãã®æŒç®åãããå ŽåïŒãã '
ã¯ååž°çã§å
±åœ¹ã§ãé䌎äœçšã
æ¥å°ŸèŸã®è»¢çœ®æŒç®åã«áµ
ã䜿çšãããšããã¢ã€ãã¢ã¯æ¬åœã«å«ãã§ãã aáµa
ãLáµDL = ltdlfact(A)
ã®ããã«ãå€æ°åã«äžä»ãæåãä»ããã®ã¯éåžžã«äŸ¿å©ã§ãã ïŒæŒç®åã«áµ
ã®ã¿ã䜿çšããIDã§ä»ã®äžä»ãæåãæå¹ã§ãããšããäºå®ã«å ããŠãå¥åŠãªããšã«ãªããŸããïŒ
ããã¯ç§ã®ç解ã§ã¯ãããŸããã§ããâ linalgã®äººã
ã¯ã a.'
ããã®ãŸãŸãã€ãŸãconj(a)'
ãç¶æããããšã«è³æã ãšæããŸããã .'
ç¶æããŸããããã®æå³ãé
å転眮ã«å€æŽããããšã¯ãŸã£ããç°ãªããŸãâããã«ã€ããŠã©ãæããããããŸããã æ¥å°ŸèŸæŒç®åãšããŠáµ
ãããªãããšã¯ãç
©ãããäžè²«æ§ããªãããšã«åæããŸãã ç§ã¯@Ismael-VCã®(a)áµ
ææ¡ã奜ãã§ãããååãšããŠaáµ
ã䜿çšããããšã劚ããããšã¯ãããŸããã
ãããã®è°è«ã®ç§ã®èšæ¶ã¯ã¹ãã£ãŒãã³ã®ãããåæ ããŠããŸãã ååž°çãªéå ±åœ¹è»¢çœ®ã¯ãŸãã§ãããäžè¬çã«ããªãå¥åŠã§ãã ããã«ãŸãšããªèŠçŽïŒ https ïŒ//github.com/JuliaLang/julia/issues/20978#issuecomment-316141984ã
æ¥å°ŸèŸ'
ã¯é䌎ã§ããããã®ãŸãŸã«ããŠããã¹ãã ãšããããšã«ç§ãã¡ã¯çåæããŠãããšæããŸãã
æ¥å°ŸèŸ.'
ãæé©ã§ã¯ãªãæ§æã§ããããšã«ç§ãã¡ã¯çåæãããšæããŸãã
éååž°çïŒæ§é çïŒè»¢çœ®ãååž°ç転眮ãããæçšã§ããããšã«æãåæãããšæããŸãã
ããŠã誰ããåæããŠããããã«èŠããç¹ïŒ
adjoint(a)
$ã«ã¯a'
ã䜿çšããŸãconj(a)'
ãŸãã¯conj(a')
ã䜿çšããŸãããããã£ãŠãå¯äžã®è«ç¹ã¯ãé å転眮ã®èšè¿°æ¹æ³ã§ãã
a.'
ãŸãã¯transpose(a)
ãŸãã¯(a)áµ
ãšããŠããã®è©äŸ¡ã¯æ£ããã§ããïŒ
ã¯ããããæããŸãïŒãé å転眮ããéååž°çã§ããå ŽåïŒã
ãŸããç§ãç解ããŠããããã«ã transpose(a)
ã¯ééããªãæå¹ãªæ§æïŒããã³éååž°çïŒã§ããå¿
èŠãããããšã«èª°ããåæããŸããäžäžèŽã®å¯äžã®ãã€ã³ãã¯ã .'
ããã³/ãŸãã¯(a)áµ
ãã©ããã§ãã
https://github.com/JuliaLang/julia/issues/20978#issuecomment -315902532ããã®ã¢ãããŒãïŒ1ïŒãããã¯ããªãã®ãµããŒããåããŸããïŒäŸïŒhttpsïŒ//github.com/JuliaLang/julia/issues/20978# issuecomment-316080448ïŒãå¯èœæ§ã¯æ®ã£ãŠããŸãã æçš¿ã§ãããã®ã¢ãããŒãïŒ flip(A)
ã®çŽ¹ä»ïŒãå®çŸãããã©ã³ãããããŸãã
ãã®äŸ¡å€ã«ã€ããŠã¯ã .'
ã®å»æ¢ããµããŒãããŸãã ãã®ã¹ã¬ããã®æ··ä¹±ãšãããŸããã¯ãããèªäœãããããããšã匷ã䞻匵ããŠããŸãã äžçªïŒ
æ¥å°ŸèŸ'
ãããéãã人ã
ã¯ããã䜿çšããŠã f.(v, w')
ã®ãã¯ãã«ã®ãã«ã«ãç©ã§f
ããããŒããã£ã¹ãããããšæãã§ãããã ãããŠã人ã
ã¯ããã䜿çšããŠãæååã®ãã¯ãã«ãããŒãã«ã®ãããªæ§é ã®ããããŒã®è¡ãã¯ãã«ã«å圢æããããšæãã§ãããã ã§ããããç§ãã¡ãæ瀺ã§ããã·ã³ãã«ã§äœ¿ãããã代æ¿åãæã«å
¥ããããšã¯ç§ã«ãšã£ãŠé
åçã§ãã
æ€èšããŠããªããªãã·ã§ã³ã¯æ¬¡ã®ãšããã§ãã A*'
âæ°ãããã€ã°ã©ãã å
žåçãªæ°åŠè¡šèšã¯ãããconj(A)'
ãšããŠè§£éãããããããŸããããããã¯å®éã«ã¯ç§ãã¡ãæããã®ã«ããªãè¿ããã®ã§ãã 0.6ã§å©çšå¯èœã§ãããã0.7ã§ã¯ã *
ã䜿çšããŠæåãé£çµã§ããŸãâŠãã ããåŒãç¶ãæ©èœããŸãã
è¡æ«ãè¶
ããŠè§£æããã«ã¹ã¿ã æååãªãã©ã«ã®ãããæ¥å°ŸèŸ"
ãš`
ã䜿çšã§ãããšã¯æããŸããã åãçç±ã§ãPostfix *
èªäœã䜿çšã§ããŸããã æ¥å°ŸèŸã®çŽ æ°Aâ²
ã¯ãããããæãäžè¬çã«äœ¿çšãããUnicodeèå¥åã®1ã€ã§ããããã Aáµ
ãããããã«å€ããªããŸãã
æ£çŽãªãšãããç§ã®ã³ãŒããèŠãåŸãç§ã¯.'
ããŸã£ãã䜿çšããªãã®ã§ã transpose(a)
ã¯ããããåé¡ãããŸããã
ç»é²ãããããã±ãŒãžãgrepãããšããã600以äžã®äœ¿çšæ³ãèŠã€ãã£ãã®ã§ãããã»ã©çããããšã§ã¯ãªãããšã«æ³šæããŠãã ããã
ãã®ã¹ãããã¯ã '
$ãåé¡ãªãå Žæã§$ .'
ã䜿çšãããŠããªããã©ããã確èªããããã«ãŸã£ãããã§ãã¯ãããŸãããïŒ ç§ã¯ãããçå®ãããããªããšæãå§ããŠããŸãã ããã§ãªããã°ã .'
ã®åæ³çãªäœ¿çšãèŠãå¯äžã®å Žæã¯ãPlots.jlã©ãã«ããã¯ãã«ãèš±å¯ããåã§ããïŒä»£ããã«æååã®è¡ãã¯ãã«ãå¿
èŠã§ããïŒããããã¯å€æŽãããŸããã ãããæ¬åœã«é »ç¹ã«å¿
èŠãªã³ãŒãã®å ŽåãããŒã«ã«ã§T = transpose
ãå®è¡ãããããã¯ããã¹ããŒããŠ'
ãtranspose
ã«å€æŽãããšæããŸãã
<strong i="17">@transpose</strong> A = A'*A*B'*B*C'*C
ãã®ãŸããªã±ãŒã¹ã§ã¯ç§ã«ã¯åé¡ãªãã§ãããã
人ã ã¯ããã䜿çšããŠãfãïŒvãw'ïŒã䜿çšãããã¯ãã«ã®ãã«ã«ãç©ã§fããããŒããã£ã¹ãããããšæãã§ãããã ãããŠã人ã ã¯ããã䜿çšããŠãæååã®ãã¯ãã«ãããŒãã«ã®ãããªæ§é ã®ããããŒã®è¡ãã¯ãã«ã«å圢æããããšæãã§ãããã ã§ããããç§ãã¡ãæ瀺ã§ããã·ã³ãã«ã§äœ¿ãããã代æ¿åãæã«å ¥ããããšã¯ç§ã«ãšã£ãŠé åçã§ãã
ã¹ããŒãã¡ã³ãã«1åãã衚瀺ãããªãå Žåã¯ã transpose
ã䜿çšããŠã倧äžå€«ã§ã¯ãããŸãããïŒ
å
±åœ¹é䌎äœçšçŽ ã®a*'
æ§æã¯éåžžã«åªããŠããŸãããããè¯ãæ§æãå¿
èŠãªæäœã§ã¯ãªãããã§ãã &a
ã¯ãŸããªãå©çšå¯èœã«ãªããç©äºã亀æããããšãææ¡ããŸãããããã¯åŸæ¥ã®è¡šèšæ³ãšã¯ããªãç°ãªããŸãã
å€åããã¯ããã®äžè«èª¿æ»ã®æéã§ããïŒ
ïŒãããŸãã«ææ¡é ã«ãçµµæååã®å€æã¯ããã§ã¯ãããŸããïŒ
A.'
âæå³ãå€æŽããæ§æãåãã«ä¿ã€transpose(A)
âç¹å¥ãªæ§æã¯ãããŸããt(A)
ãŸãã¯tr(A)
âç¹å¥ãªæ§æã¯ãããŸããããçãååããšã¯ã¹ããŒãããŸãAáµ
â áµ
ãšãèå¥åããç¹æ®ãªã±ãŒã¹ã«å
¥ãããã1ã€ãŸãã¯2ã€ã®äžä»ãæå(A)áµ
âãã¹ãŠã®äžä»ãæåãèå¥åããåé¢ãããŠæ¥å°ŸèŸæŒç®åã®ããã«åäœããŸãA*'
âãã®äžæ°å³ã®è°·ã®çäžã«å
æ²¢ããããæ§é çãªè»¢çœ®ãæå³ããŸã&A
ããåžæã®å Žåã¯ãããäžã®Stefanã®æçš¿ã«ðãæããŠãã ããïŒçµµæåããªããªããŸããïŒconj(xâ)
ã¯æ¯èŒçãŸãã§ãããããLinAlgã®è°è«ã§ã¯ãéååž°çãªè»¢çœ®äœ¿çšã«.â
ãèŽãããšã«ã€ããŠå®éã«è©±ããŠããŸããã ãã ãáµ
ã¯æ°åŠçãªæ§æã§ãããå®éã«ã¯æ°åŠçãªæå³ãæã£ãŠããå¿
èŠããããŸãïŒããå ŽåïŒã
tr(A)
ãå¹³åè¡å転眮ã«ããããšã«éåžžã«åŒ·ãå察ããŸã-誰ãããããè¡åãã¬ãŒã¹ãæå³ãããšèããã§ãããïŒhttpsïŒ //en.wikipedia.org/wiki/Trace_ ïŒlinear_algebraïŒ
äžä»ãæåãèå¥åãšããŠéæšå¥šã«ããªãå ŽåïŒãããã1.0ããåã«çå£ã«æ€èšããå¿
èŠããããŸãïŒã áµ(A)
ãå¯èœæ§ããããŸãã
ææ¡(A)áµ
ã«é¢é£ããŠã次ã®çºèšã§ãã®è°è«ããããã«çãããããšããè©«ã³ããŸãã
åé
æŒç®åãšããŠâ
ã䜿çšã§ããããã«ããããšã¯ããããŸã§ããŸãæ°ã«ããŸããã§ãããç¹ã«ã â(...)
ãã 1ã€ãŸãã¯æ°æåã ããã«ãç§ã¯åžžã«a²
ãšâa
ã®æ©èœã®éããéåžžã«äººå·¥çã§ããããšãçºèŠããŸããã Unicodeã¯ã©ã¹ãªã©ã«ã€ããŠç¥ã£ãŠããã°ããããçã«ããªã£ãŠããŸãããä»ã®äººã«ãšã£ãŠã¯ããã¯ã°ãããŠããããã«æãããã«éããããŸããã a²
ãæå¹ãªå€æ°åãšããŠäœ¿çšãããšäŸ¿å©ã§ãããåæ§ã«ã âa
ã¯ãè€æ°ã®å€æ°ã䜿çšããå¿
èŠãããå Žåã«ã a
ã®å¹³æ¹æ ¹ãæ ŒçŽããããã®äŸ¿å©ãªå€æ°åã«ãªããŸããåæ°ã ãŸãã¯ã a²b
ãšãã®å¹³æ¹æ ¹aâb
ã®ãããªããè€éãªåŒãåè
ã¯æå¹ãªèå¥åã§ãããåŸè
ã¯æå¹ãªèå¥åã§ã¯ãããŸããã ãšããããç§ã¯äžè²«æ§ã奜ãã§ãã
ãããã£ãŠãäžè²«æ§ãä¿ã€ããã«ãæ¬åŒ§(A)áµ
ã (a)²
ã䜿çšãããšãã«ãUnicodeåé
æŒç®åâ
ïŒããã³ãã®èŠªæïŒãåé€ããããšãšçµã¿åãããŠãæ¥å°ŸèŸæŒç®åã䜿çšãããšããææ¡ã奜ãã§ããèå¥åã§äœ¿çšããããšãã§ããŸãïŒéåžžã®é¢æ°åŒã³åºãâ(a)
ãšããŠåŒãç¶ãã¢ã¯ã»ã¹ã§ããŸãïŒã
ç§ã¯@Juthoãèšã£ãããšã«100ïŒ
åæããäœåºŠããããèããŠããŸããã @Juthoãããåé¡ãéããŠããã ããŸãããïŒ ææ¡ïŒèå¥ååã«â
ãèš±å¯ããopãšããŠåŒã³åºãã«ã¯â(x)
ãå¿
èŠã§ãã
次ã®è³ªå-> 2 |> â
ã©ãã§ããïŒ
å¥ã®ã¹ã¬ããã§â
ã«ã€ããŠèª¬æããŸãããããã ããç°¡åã«èšããšã 2 |> â
ã¯â(2)
$ãæå³ããŸãã
ããŒãµãŒã®å€æŽãå¿
èŠãšãããå
¥åãç°¡åãªå¥ã®ä»£æ¿æ¹æ³ã¯ã転眮çšã®A^T
ã§ãïŒ T
ã^
ã¡ãœããã䜿çšããã·ã³ã°ã«ãã³ã¿ã€ããšããŠå®çŸ©ããããšã«ããïŒã âŠããã @mbaumanããã®ã¢ã€ãã¢ãæã£ãŠããããã§ãã å°ãéãã§ããã A.'
以äžã§ãã
ç§ã«ã¯å°éç¥èã¯ãããŸããããäœæ¥ã®éçšã§è¡ååŒãå«ãæ°åè¡ãå ¥åããå¯èœæ§ãé«ãããããã®ãã£ã¹ã«ãã·ã§ã³ã®çµæã«éåžžã«æè³ããŠããŸãã
transpose(A) # with no special syntax
ã¯äžèšã®æ祚ã«åã£ãŠããŸãããç§ã®ç®ãšæã«ã¯èŠçããããŸãã
Pythonã§ã®äžè¬çãªäœ¿çšæ³ã¯ãããããnumpyãšã次ã®ããã«èŠããŠããã»ã©æªããªããã®ãããããããããšã§ãã
import numpy as np
# define matrix X of n columns, with m rows of observations
error = X.dot(Theta.T) - Y
gradient = (1 / m) * (X.dot(Theta.T) - Y).T.dot(X)
ç§ã¯ããå¿ èŠã¯ãããŸããïŒ
grad = 1/m * transpose(X * transpose(Theta) - Y)) * X
ããã¯ã転眮ã®ç²Ÿç¥çãªæŠå¿µããæ°åŠè¡šèšæ³ãå®çããæ
£ç¿ããå®å
šã«å€æŽããŸããããã¯ãæ¥å°ŸèŸã®èšå·è¡šçŸã§ãããéåžžã¯Aáµ
ãŸãã¯Aáµ
ã§ãã
å人çã«ã¯ãé䌎äœçšçŽ ã䜿çšãããåã®Juliav.0.6ã§æ©èœããA'
ã«éåžžã«æºè¶³ããŠããŸãã é䌎äœçšçŽ ã¯éåžžã«é »ç¹ã«äœ¿çšãããŸããïŒ
ãããç§ã®ã³ã¡ã³ãã§ãã
Aáµ or Aáµ if the world won't accept unicode operators, let them use transpose(A)
A' close to math notation, easy to type and *especially* easy to read
A^' this could signal `^` not to be parsed as Exponentiation.
A.' conflicts with dotted operator syntax, but at face value OK
A^T or A^t these are pretty good, but what if variable `T` is meant to be an exponent?
A.T same as numpy, same dotted operator collision
t(A) nesting reverses semantics, 3 keystrokes and two of them with shift key.
transpose(A) with no special syntax # please don't do this.
å人çã«ã¯ãé䌎äœçšçŽ ã«åã蟌ãŸããåã®Juliav.0.6ã§æ©èœãã
A'
ã«éåžžã«æºè¶³ããŠããŸãã é䌎äœçšçŽ ã¯éåžžã«é »ç¹ã«äœ¿çšãããŸããïŒ
ããããŸãããã A'
ã¯åžžã«A
ã®é䌎äœçšçŽ ã§ããã 以åã¯ãå
±åœ¹è»¢çœ®ã®åºç€ãšãªãé¢æ°ctranspose
ãåŒã³åºããŠããŸããããæ©èœãå€æŽããã«ãåçã®çšèªadjoint
ã«ååãå€æŽããŸããã
ç·åœ¢ä»£æ°ãå®è¡ããŠããå Žåã¯ããšã«ããå
±åœ¹è»¢çœ®ãå¿
èŠã«ãªãå¯èœæ§ãé«ãããã transpose(A)
A'
ãšå
¥åããŸãã éå
±åœ¹è»¢çœ®ã®ç¹å¥ãªæ§æãå®çŸ©ããªãããšã®äººæ°ã¯ãïŒããããïŒã»ãšãã©ã®ç·åœ¢ä»£æ°ã®äœ¿çšã§éå
±åœ¹è»¢çœ®ãå¿
èŠã«ãªãããšã¯å®éã«ã¯ããã»ã©äžè¬çã§ã¯ãªããšããäºå®ã«ãããã®ã§ãã
ç·åœ¢ä»£æ°ãå®è¡ããŠããå Žåã¯...
ããŒã«ããã³ããŒã®å Žå...:)
...ãžã¥ãªã¢ãäžè¬çãªããã°ã©ãã³ã°èšèªã«æé·ããå¯èœæ§ã«ã€ããŠèããå¿ èŠããããŸãã
å€åããã§ã¯ãªããããããŸãããå€åããã¯ç·åœ¢ä»£æ°ã®ã¢ãŒãŽããã®ãŸãŸã§ããã§ããã-ããã¯ç§ã®ãããªããã°ã©ããŒã«ã€ããŠèããªããã°ãªããªãå¯èœæ§ã§ãã :)
@mahiki ãããªãã¯NumPyã®äŸã§ãïŒ
import numpy as np
# define matrix X of n columns, with m rows of observations
error = X.dot(Theta.T) - Y
gradient = (1 / m) * (X.dot(Theta.T) - Y).T.dot(X)
ãžã¥ãªã¢ã§ã¯æåéã次ã®ããã«æžãããŸãïŒ
error = X*Î' - Y
gradient = (1/m) * (X*Î' - Y)' * X
ãŸãã¯ããã¯ãã«ããã®NumPyã®äŸã§ã¯è¡ã§ãããJuliaã§ã¯åã§ãããšä»®å®ããŸãã
error = X'Î - Y
gradient = (1/m) * (X'Î - Y) * X'
ããã¯ããããåŸãã®ãšåããããæ確ã§æ°åŠçãªããã§ãã ããŒã¿ãå®éã®å Žåãé䌎ãšè»¢çœ®ã¯åãæäœã§ããããããäžèšã®è»¢çœ®ã䜿çšããŠããçç±ãããããŸããããæ°åŠçã«ã¯é䌎ãæ£ããæäœã§ãã @ararslanãèšã£ãããã«ã X'
ã¯ãJuliaïŒããã³Matlabã§ãïŒã§ã¯åžžã«adjoint
ãæå³ããŠããŸããã 以åã¯ãå
±åœ¹è»¢çœ®ãã®ç¥ã§ctranspose
ãšåŒã°ããŠããŸããããæŒç®åã®å®çŸ©ããããã£ã次ã®ããã«ãªã£ãŠããããããã®ååã¯èª€ã£ãååã§ããã
dot(A*x, y) == dot(x, A'y)
ããã¯ãšã«ããŒãé䌎ã®å®çŸ©ç¹æ§ã§ããã A
ãè€çŽ è¡åã®å Žåãå
±åœ¹è»¢çœ®ã«ãã£ãŠæºããããŸãã ãã®ããããé䌎ãã¯ãã®æŒç®åã®æ£ããç·ç§°ã§ãã
ãšã¯ããã a.'
ãæ§é ç転眮ãæå³ããã®ã¯åé¡ãªããšæãã®ã§ãç§ã¯transpose(a)
ãša.'
ã®äž¡æ¹ã«æ祚ããŸããã ããã¯æåŸ
ã©ããã«æ©èœããŸããååž°çã§ã¯ãªããããäžéšã®æ±çšã³ãŒãã§ã¯ãæ°åŠçã«æ£ããããããŸããããæåŸ
ã©ããã«æ©èœããããšã§ååãªããã§ãã ãããŠããžã§ããªãã¯ã³ãŒãã§conj(a')
ã䜿çšããããšãæ€èšããããã«äººã
ã«æ瀺ããããšã¯ãç§ãã¡ãæ¬åœã«äººã
ãé ãã殎ãå¿
èŠããããã®ã§ã¯ãªããæè²çãªããšã®ããã«æããŸãã
@mahikiäœããã®çç±ã§ãã³ãŒãã§adjoint
transpose
$ãäœåºŠã䜿çšããå¿
èŠãããå Žåã¯ã$ïŒã®ãšã€ãªã¢ã¹ã§ããtranspose
@t
ã®ãããªçããã¯ããå®çŸ©ã§ããŸãã transpose
ïŒç¹ã«ãä»ã®äººãšã³ãŒããæžããŠããå Žåã¯ããã®ãœãªã¥ãŒã·ã§ã³ãçæ³çã§ã¯ãªãããšã¯ããã£ãŠããŸããïŒã
Juliaãäžè¬çãªããã°ã©ãã³ã°èšèªã«æé·ããå¯èœæ§ã«ã€ããŠèããå¿ èŠããããŸãã
@Liso77ããã§ãã å€ãã®äŸã®1ã€ãšããŠãNanosoldierã¯GitHubã€ãã³ãããªãã¹ã³ãããªã³ããã³ãã§ããã©ãŒãã³ã¹ãã³ãããŒã¯ãå®è¡ããWebãµãŒããŒããã¹ãŠJuliaã§å®è¡ããŸãã ããã¯äœè«ã§ãããç§ã¯ãã®ã¹ã¬ããã話é¡ããå€ããããšãæãã§ããŸããã
ããçš®ã®è¡åãæ°å€ä»¥å€ã®ããŒã¿ã§è»¢çœ®ããå ŽåïŒããã¯å®å
šã«æå¹ãªãŠãŒã¹ã±ãŒã¹ã§ãïŒãæ°åŠçãªè»¢çœ®è¡šèšã¯å®éã«ã¯é§æŽèœã®ããã«èŠããŸãã ãã®å Žåã¯ãããšãã°transpose
ïŒãŸãã¯ç¹å®ã®ããŒãºã«ãã£ãŠã¯permutedims
ïŒãªã©ãäœãæ±ããŠããã®ããããæ確ã«ããæ¹ããããšæããŸãã
ããçš®ã®è¡åãæ°å€ä»¥å€ã®ããŒã¿ã§è»¢çœ®ããå ŽåïŒããã¯å®å šã«æå¹ãªãŠãŒã¹ã±ãŒã¹ã§ãïŒãæ°åŠçãªè»¢çœ®è¡šèšã¯å®éã«ã¯é§æŽèœã®ããã«èŠããŸãã
A.'
ã¯ãéåžžã®æå³ã§ã¯å®éã«ã¯ãæ°åŠçãªè»¢çœ®è¡šèšãã§ã¯ãªãããããããè³æãŸãã¯å察ã®è°è«ã§ãããšã¯æããŸããã
@ararslanã¯ãæ¢åã®.'
ã«å察ããŠããã®ã§ã¯ãªããäžä»ãæå-Tæ§æã®å°å
¥ã«å察ããŠãããšæããŸãã ç§ã¯åæããåŸåããããŸã-é䌎ã®ç·åœ¢ä»£æ°ã®æŠå¿µãæå³ããå Žåã¯ã '
ã䜿çšããå¿
èŠããããŸãïŒè¡åãå®éã«ååšããå Žåã§ãïŒã ãŸããæ°å€ä»¥å€ã®ããŒã¿ã®è¡åãããå Žåã¯ã2ã€ã®ã€ã³ããã¯ã¹ã䞊ã¹æ¿ããããšã¯ãã¡ããå®å
šã«æ£åœã§ããããã®æäœã¯ãéåžžèããããŠããããã«å®éã«ã¯ã転眮ãã§ã¯ãªããæ°åŠçãªäžä»ãæåã䜿çšããŸã-Tè¡šèšã¯ãããããæ確ã«ãããããæ··ä¹±ããå¯èœæ§ãé«ãã§ãããã äžä»ãæå-Tè¡šèšãå®éã«é©åã§ããå¯äžã®ç¶æ³ã¯ãã€ã³ããã¯ã¹ã䞊ã¹æ¿ãããæ°å€è¡åãããããé䌎ç·åœ¢æŒç®åã¯å®éã«ã¯å¿
èŠãªãå Žåã§ãã ãã®ãããªç¶æ³ã¯ç¢ºãã«ååšããŸãããæ°ããæ§æãå°å
¥ããããšãæ£åœåããã«ã¯ãŸããããå¯èœæ§ããããŸãã
åç §ã https://github.com/JuliaLang/julia/issues/20978#issuecomment-315902532 ã äžçªïŒ
...ãããããã®æäœã¯ãç§ãã¡ãéåžžèããããã«ãå®éã«ã¯ã転眮ãã§ã¯ãããŸãã...
ãããéåžžã«çããå Žåããªãararslanãä»ã®å€ãã®äººãtranspose(A)
ãšããŠæ§é 転眮ã®ã¹ãã«ã«æ祚ããã®ã§ããïŒ
ããããšã@StefanKarpinski @ ararslan@ ttparkerã ç·åœ¢ä»£æ°ã®ããã¹ãã«æ»ã£ãŠãé䌎äœçšçŽ ãåçºèŠããå¿ èŠããããŸããã ç§ã¯è€çŽ 解æã®åã«ãããåããŸãããããããç§ãããã«æ°ã¥ããªãã£ãçç±ã
ç§ã¯ãããã§ããã®ã倧奜ãã§ãgradient = (1/m) * (X'Î - Y) * X'
ç§ã®æ··ä¹±ã¯ãåç
§ããã¥ã¡ã³ããè«æãæç§æžãªã©ã§ã®ã転眮ãïŒäžä»ãæåTãšããŠïŒã®åºç¯ãªäœ¿çšã«èµ·å ããŸããããšãã°ã Andrew Ngã®ã¹ã¿ã³ãã©ãŒãCS229è¬çŸ©ããŒãã§ã¯ã察å¿ããJuliaã³ãŒãã¯adjoint
ã次ã®ããã«äœ¿çšããŸããäžèšã®@StefanKarpinskiã®ãã£ãããšããäŸã§ã ããã¯ãé䌎ãšè»¢çœ®ãâ ïŒå³ïŒïŒã§åçã§ããããã§ãã æŽæ°ïŒãã
転眮ã®ç§ã®å¥œã¿ã®è¡šèšæ³ã¯ãè«ççã«äžè²«ããŠãããã®ã§ãã æãã.'
ã¯ç¹ç·ã®æŒç®åæ§æãšã®ç«¶åã«ãããã®ã§ã¯ãªããUnicodeã®äžä»ãæåãé€ããŠãé©åãªç¹å¥ãªæ§æãå©çšã§ããªãããã«èŠãããããç¹å¥ãªæ§æããªãtranspose(A)
ã«ç°è°ã¯ãããŸããã
transpose
@t
ã®è»¢çœ®ãããããæžããŠããããšã«æ°ä»ããå Žåã¯ã @ttparkerãœãªã¥ãŒã·ã§ã³ã奜ãã§ãã
ç¹°ãè¿ããŸãããç§ã¯æ¬¡ã®ããã«èª€è§£ããŸããã
transpose(A) with no special syntax # please don't do this.
倧åŠé¢ã¬ãã«ã®æ°åŠã®è²§åŒ±ãªæœèšã«ãããããããç§ã®ã³ã¡ã³ããçå£ã«åãæ¢ããŠãããŠããããšãã
ïŒè«è©±ãããïŒ
'
ãf'
ã'(f)
ã«ãããããä¿®æ£åŸã®æŒç®åã«ãããã®ã§ããã Base.:'(x::AbstractMatrix) = adjoint(x)
ã§ããŠãŒã¶ãŒã¯ä»ã®ã¡ãœãããèªç±ã«è¿œå ã§ããŸããé䌎ãšã¯äœã®é¢ä¿ããããŸããã ïŒããšãã°ã f'
ãdf / dtãåç
§ããããšã奜ã人ãããŸããïŒ
0.7ã§å°å
¥ãããæŒç®åã®æ¥å°ŸèŸã䜿çšãããšã f'áµ
ã'áµ(f)
ãªã©ã«ãããããããŠãŒã¶ãŒãç¬èªã®æ¥å°ŸèŸæŒç®åãå®çŸ©ã§ããããã«ãªããŸãã ããã«ããã Base.:'áµ(x::AbstractMatrix) = transpose(x)
ãBase.:'â»Â¹(x::Union{AbstractMatrix,Number}) = inv(x)
ãªã©ã䜿çšã§ããããã«ãªããŸãã
A'áµ
ãæžãããšã¯ãããããAáµ
ã»ã©ãããã§ã¯ãããŸãããã áµ
ã§çµããå€æ°åãå»æ¢ããå¿
èŠã¯ãããŸããã
äžèŠãããã¯éç Žå£çãªæ©èœã§ããå¯èœæ§ãããããã«èŠããŸãã ããã¯éåžžã«è³¢ã劥åã§ãã ããã¯ããã§ããã
ç§ã«ã¯åççãªããã§ãã æãé£ããéšåã¯ã '
é¢æ°ã®ååãèãåºãããšã§ãããã®å Žåããã¬ãã£ãã¯ã¹æ§æã¯æ©èœããŸããã
æãé£ããéšåã¯ã'é¢æ°ã®ååãèãåºãããšã§ã
apostrophe
ïŒ æåéãããããããããŸãã...
ãã¬ãã£ãã¯ã¹æ§æãæ©èœãããããšã¯å¯èœã§ããïŒããšãã°ãæ瀺çãª(')(A)
æ§æã䜿çšããŸããïŒïŒïŒ ããã§ãªãå Žåã¯ã httpsïŒ//github.com/JuliaLangã«ãã£ãŠå°å
¥ãããif-you-can-define-the-symbol-name-then-you-can-override-its-syntaxã«ãŒã«ã«éåãããããããã¯åé¡ã§ãã
ç·šéïŒå©çšå¯èœã«èŠããŸãïŒ
julia> (')(A)
ERROR: syntax: incomplete: invalid character literal
julia> (')(A) = 2
ERROR: syntax: incomplete: invalid character literal
æ®å¿µãªããã '
ã¯ãéåžžã«é«ãåªå
é äœïŒèå¥åèªäœã®åªå
é äœãšåãïŒãæã€å¥ã®çš®é¡ã®ã¢ãã ïŒæåïŒãå°å
¥ãããããèå¥ååãšããŠäœ¿çšããã®ãæãé£ããæåã®1ã€ã§ãã ããšãã°ã (')'
ã¯ããèªäœã«'
ãé©çšããã®ã§ããããããšããªãŒãã³ãã¬ã³ã®åŸã«')'
ãªãã©ã«ãç¶ãã®ã§ããïŒ
çæçã«ã¯å®çšçã§ã¯ãªããªãã·ã§ã³ã®1ã€ã¯ãæåãªãã©ã«ã'
ã®äŸ¡å€ããªããšå®£èšãã代ããã«c"_"
ã®ãããªæååãã¯ãã䜿çšããããšã§ãã
$ïŒ$ 0 $ïŒ$ã®åã«ãããã³ãã³ãä»ããŠããå Žåã«ã '
ãèå¥åãšããŠè§£æããã Base.:'
ãæ©èœããå Žåã¯ã©ãã§ããããã
ãã¡ãã ç·šéïŒãããã (@__MODULE__).:'(x) = function_body
ãæžãã®ã¯å°ãé¢åãããããŸãããã (x)' = function_body
ã¯åãããã«æ©èœããã¯ãã§ãã(x)'
ã¯Base
ã®'
ã®åŒã³åºãã«ãããããå¿
èŠãããããã§ãã çŸåšã®ã¢ãžã¥ãŒã«ã§'
é¢æ°ãå®çŸ©ããã®ã¯é¢åã§ããããããè¡ãçç±ããããŸããã
ãŸãã¯ã ''
ãèå¥å'
ãšããŠè§£æãããã®ã¯ã©ãã§ãããããããã§ãªããã°ã空ã®æåãªãã©ã«ãšããŠè§£æãããŸãïŒããã¯çŸåšè§£æã¬ãã«ã®ãšã©ãŒã§ãïŒã åæ§ã«ã ''áµ
ã¯èå¥å'áµ
ãªã©ãšããŠè§£æãããŸãã
çŸåšæ§æãšã©ãŒã§ã¯ãªããã®ã¯ãã¹ãŠä»¥åãšåãããã«è§£æãããŸãïŒããšãã°ã 2''
ã¯åŸçœ®'
ã2
ã«2åé©çšãããŸãïŒãã 2*''
ã¯ä»ã§ã¯'
ã®2åãšããŠè§£æããŸãã
a'' === a
ã''(a) === a'
ã«ãªãã®ã¯ãçŽããããããã§ãã 代ããã«Base.apostrophe
ãååãšããŠäœ¿çšããæ¹ãè¯ãããã§ãïŒãŸãã¯ãã®ãããªãã®ïŒã
è¡åã®è»¢çœ®ã«çŽæ¥é¢ä¿ããªã'
æ§æã«é¢ãããã®ãªã®ã§ããã®è°è«ãæ°ããGithubã®åé¡ã«åå²ããæ¹ãããã§ããããã
åé¡ãåå²ããèªååãããæ¹æ³ã¯ãããŸããããããšãåã«æ°ãããã®ãéããŠããã®ãã£ã¹ã«ãã·ã§ã³ã«ãªã³ã¯ããå¿ èŠããããŸããïŒ
åŸè
äžä»ãæå-Tè¡šèšãå®éã«é©åã§ããå¯äžã®ç¶æ³ã¯ãã€ã³ããã¯ã¹ã䞊ã¹æ¿ãããæ°å€è¡åãããããé䌎ç·åœ¢æŒç®åã¯å®éã«ã¯å¿ èŠãªãå Žåã§ãã ãã®ãããªç¶æ³ã¯ç¢ºãã«ååšããŸãããæ°ããæ§æãå°å ¥ããããšãæ£åœåããã«ã¯ãŸããããå¯èœæ§ããããŸãã
è°è«ããã«ã¯é
ããããšæããŸãããèšåãã䟡å€ããããšæã1ã€ã®äœ¿çšæ³ãææããããšæããŸããè€éãªã¹ãããã®åŸ®åãå
éšã«transpose
ãæã€å®æ°å€é¢æ°ã«é©çšããããšã§ããããã ïŒç§ã¯ããã®ç¹å®ã®çç±ãããMATLABãšjuliaã§.'
ãå¿
èŠã§ãããšå人çã«èããŸãããïŒ
transpose
ãè€æ°åçºçããäŸã瀺ããŸãïŒãã®æ¹æ³ã§ãããåé¿ã§ããå¯èœæ§ããããŸããïŒïŒ
using LinearAlgebra
# f : Râ¿ â R
# x ⊠f(x) = xᵠ* x / 2
f(x) = 0.5 * transpose(x) * x
# Fréchet derivative of f
# Df : Râ¿ â L(Râ¿, R)
# x ⊠Df(x) : Râ¿ â R (linear, so expressed via multiplication)
# h ⊠Df(x)(h) = Df(x) * h
Df(x) = transpose(x)
# Complex-step method version of Df
function CSDf(x)
out = zeros(eltype(x), 1, length(x))
for i = 1:length(x)
x2 = copy(x) .+ 0im
h = x[i] * 1e-50
x2[i] += im * h
out[i] = imag(f(x2)) / h
end
return out
end
# 2nd Fréchet derivative
# D2f : Râ¿ â L(Râ¿ â Râ¿, R)
# x ⊠D2f(x) : Râ¿ â Râ¿ â R (linear, so expressed via multiplication)
# hâ â hâ ⊠D2f(x)(hâ â hâ) = hâáµ * D2f(x) * hâ
D2f(x) = Matrix{eltype(x)}(I, length(x), length(x))
# Complex-step method version of D2f
function CSD2f(x)
out = zeros(eltype(x), length(x), length(x))
for i = 1:length(x)
x2 = copy(x) .+ 0im
h = x[i] * 1e-50
x2[i] += im * h
out[i, :] .= transpose(imag(Df(x2)) / h)
end
return out
end
# Test on random vector x of size n
n = 5
x = rand(n)
Df(x) â CSDf(x)
D2f(x) â CSD2f(x)
# test that the 1st derivative is correct Fréchet derivative
xϵ = âeps(norm(x))
for i = 1:10
h = xϵ * randn(n) # random small y
println(norm(f(x + h) - f(x) - Df(x) * h) / norm(h)) # Fréchet check
end
# test that the 2nd derivative is correct 2nd Fréchet derivative
for i = 1:10
hâ = randn(n) # random hâ
hâ = xϵ * randn(n) # random small hâ
println(norm(Df(x + hâ) * hâ - Df(x) * hâ - transpose(hâ) * D2f(x) * hâ) / norm(hâ)) # Fréchet check
end
# Because f is quadratic, we can even check that f is equal to its Taylor expansion
h = rand(n)
f(x + h) â f(x) + Df(x) * h + 0.5 * transpose(h) * D2f(x) * h
éèŠãªã®ã¯ã f
ãšDf
ã¯transpose
ã䜿çšããŠå®çŸ©ããå¿
èŠããããé䌎äœçšçŽ ã䜿çšããŠã¯ãªããªããšããããšã§ãã
è€éãªã¹ãããã®æ¹æ³ã¯ããžã¥ãªã¢ã«ã¯ããŸãé¢ä¿ããªããšæããŸãã èšèªãå¹ççãªçµã¿èŸŒã¿ã®è€çŽ æ°ããµããŒãããŠããããåçã«å¹ççãªDual
ã®æ°å€ã¿ã€ããå®çŸ©ã§ããªãå Žåã«ãèªå埮åãååŸããã®ã¯å·§åŠãªããã¯/åé¿çã§ã¯ãããŸãããïŒ ããã¯ãéåžžã«åªããèªå埮åã©ã€ãã©ãªãåãããžã¥ãªã¢ã«ã¯åœãŠã¯ãŸããŸããã
è€éãªã¹ãããã®æ¹æ³ã®ä»£ããã«äºéæ°ã䜿çšããããšã«åæããŸããããã¯éåžžã«è¯ãç¹ã§ãïŒç§ã¯å人çã«ããžã¥ãªã¢ã§ãã¹ãŠã®è€éãªã¹ãããã®æ¹æ³ã®è©äŸ¡ãäºéæ°ã®è©äŸ¡ã«çœ®ãæããŸããïŒã ãã ããããã¯ããã¢ã³ã¹ãã¬ãŒã·ã§ã³ã®ç®çãããªãã¯ã®æå°ïŒããšãã°ã Julia Con2018ã§ã®è€éãªã¹ãããã®æ¹æ³ã«ã€ããŠè©±ããŠããNickHighamãåç §ïŒãããã³ç§»æ€æ§ïŒã€ãŸããè€çŽ æ°ã䜿çšããäžèšã®MATLABã®ã³ãŒãã®ããŒãžã§ã³ã¯ããã¯ãªãŒã³ã§ãïŒã
å®éã®é åãããè€éãªé åã䜿çšãããšã³ãžãã¢ãããããç©çåŠè ã®äžçããæ¥ãŠã転眮æŒç®åããªãã®ã¯å°ãé¢åã§ãã ïŒèª¿åæéäŸåæ§ã®è€éãªãã§ãŒã¶è¡šçŸã¯ãç§ãã¡ã®åéã§ã¯ã©ãã«ã§ããããŸããïŒç§ã®å¯äžã®èæ ®äºé ã¯ç°¡æœãã§ãããç§ã¯å人çã«xHãšxTã®numpyæ§æã奜ã¿ãŸãã
ç§ã®ã³ãŒãã§ã¯ããšã«ããŒã転眮ã«å¯Ÿãã転眮æŒç®åã®å¯åºŠã¯çŽ1察1ã§ãã ãããã£ãŠãéå ±åœ¹è»¢çœ®ãåæ§ã«éèŠã§ãã 転眮ã®å€ãã®çšéã¯ãå€ç©ãäœæããä»ã®ã³ãŒããšã®ã€ã³ã¿ãŒãã§ãŒã¹ãè¡åã®ä¹ç®ã®ããã«é åã®ãµã€ãºãæ£ããèšå®ããããšã§ãã
ä»ã®ãšãããæäœã«ãã¯ããŸãã¯1æåã®é¢æ°ãæäŸããã ãã§ãããå€ãæ©èœã§ããtransposeïŒïŒãŸãã¯permutedimsïŒïŒã«çžåœãããã®ã¯äœã§ããïŒ
transpose
ã¯ç·åœ¢ä»£æ°ã察象ãšããŠãããååž°çã§ãã permutedims
ã¯ãããããã¿ã€ãã®ããŒã¿ãéååž°çã«é
眮ããããã®ãã®ã§ãã
é䌎ãšåãããã転眮ã䜿çšãããšèšãã®ã¯èå³æ·±ãããšã§ãã 以åã¯åãã§ããããäž»ã«ããŒã¿ãå®éã®å Žæã§ééããç¯ããã¡ã ã£ãããã転眮ããåŸåããããŸããããå®éã«ã¯é䌎äœçšçŽ ãæ£ããæäœã§ããïŒè€éãªã±ãŒã¹ã«äžè¬åãããŸãã-é䌎äœçšçŽ ã¯ç§ã®ã¢ã«ãŽãªãºã ã«ãšã£ãŠæ£ããæäœã§ããïŒã ãã¡ãããïŒå€ãã®ïŒæå¹ãªäŸå€ããããŸãã
é»æ°ååŠã«é¢é£ãããã¹ãŠã®å Žåã空éã®ãããªãã¯ãã«ã䜿çšããããšãå€ããR ^ nïŒéåžžã¯n = 3ïŒã§ãã¯ãã«æŒç®ã䜿çšãããå ŽåããããŸããã€ãŸãããã¯ãã«ãè€çŽ æ°å€ã§ãããããç¹ã«transpose
ã§ããããŒãªãšå€æãè¡ããŸããã @mattcbroããã®çš®ã®ã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠè©±ããŠããããã§ãã
ããã¯èšã£ãŠããæ§æã®è°è«ãèªãã§ãããšããç§ã¯å人çã«ãããå°ãåé·ãªæ§æãããã°ã©ãã³ã°ã®é床ãå¹çãé ããããã®ã ãšã¯æ³åã§ããªãã£ããšããèããŠããŸãã ã¢ã«ãŽãªãºã èªäœãšãããå®è£ ããæãèªç¶ã§å¹ççãªæ¹æ³ã«ã€ããŠèãããšãã¯ããã«æéãããããŸãã
é»æ°ååŠã«é¢é£ãããã¹ãŠã®å Žåã空éã®ãããªãã¯ãã«ã䜿çšããããšãå€ããR ^ nïŒéåžžã¯n = 3ïŒã§ãã¯ãã«æŒç®ã䜿çšããŸããã€ãŸããããŒãªãšã䜿çšããããã«ãã¯ãã«ãè€çŽ æ°å€ã§ãã£ãŠããç¹ã«è»¢çœ®ããŸããå€èº«ã
å¿ ãããã å€ãã®å ŽåãããŒãªãšæ¯å¹ ããã®æéå¹³åéãå¿ èŠã§ãããã®å Žåãè€çŽ ãããç©ã䜿çšããŸããããšãã°ãÂœâ[ð*Ãð]ã¯è€çŽ ããŒãªãšæåããã®æéå¹³åãã€ã³ãã£ã³ã°ãã©ãã¯ã¹ã§ãããŒεâ|ð|²ã¯æéå¹³åç空ãšãã«ã®ãŒå¯åºŠã äžæ¹ããã¯ã¹ãŠã§ã«æŒç®åã¯ïŒéåžžïŒè€çŽ 察称æŒç®åïŒãéæ°ãïŒã§ããããããã£ãŒã«ãðïŒð±ïŒãªã©ã®ïŒç¡é次å ïŒä»£æ°ã«éå ±åœ¹ã®ãå ç©ãã䜿çšããããšããããããŸãããã¹ãŠã®ã¹ããŒã¹ã
ããã¯æ¬åœã§ããç§ã¯æåã®æã«ãã°ãã°ãã®åèªãæã£ãŠããŸãããããããããæããã«åé€ããŸãã:-)ã
ããã«è¡ãããã®ã§ããã°ãé»ç£éã¯ããã°ãã°å¹Ÿäœä»£æ°ãšåŒã°ããã¯ãªãã©ãŒã代æ°ã®å®åŒåã§ããã«ç°¡æœã«æžãããŠããŸãã ãããã®ä»£æ°ã«ã¯ãç¹ã«æ£ä¹±åé¡ãèæ ®ããå Žåã«ãçè«ã®å®åŒåã«ãããŠéèŠãªåœ¹å²ãæããè€æ°ã®èªå·±ååãšåèªå·±ååããããŸãã
ãããã®ä»£æ°ã¯éåžžãç°¡æœãªè¡åè¡šçŸãæã¡ããããã®å°ã¯ãè€éãªè»¢çœ®ããšã«ããŒã転眮ãããã³æŽ»çšãä»ããŠç°¡åã«èšç®ãããããšããããããŸãã
ããã§ããåã«è¿°ã¹ãããã«ã転眮ã®äž»ãªçšéã¯ãé åãä»ã®é åãä»ã®ã³ãŒããšã€ã³ã¿ãŒãã§ã€ã¹ããããã«é 眮ããè¡åã®ä¹ç®ããã©ããåãããé åã®æ£ãã次å ã«å¯ŸããŠæ©èœãããããšã§ãã
ç§ã¯å人çã«xHãšxTã®numpyæ§æã奜ã¿ãŸã
1.0ã§ç°¡åã«å®è£ ã§ããå¹ççã§ããã¯ãã§ãã
function Base.getproperty(x::AbstractMatrix, name::Symbol)
if name === :T
return transpose(x)
#elseif name === :H # can also do this, though not sure why we'd want to overload with `'`
# return adjoint(x)
else
return getfield(x, name)
end
end
ããã¯é©ãã»ã©ç°¡åã§ãã¡ãã£ãšãã£ããããŠããŸãã æ¬ ç¹ã¯ã getproperty
ã®çŽäº€äœ¿çšãäºãã«æ§æãããªãããšã§ãã ãããã£ãŠãç¹å®ã®ãããªãã¯ã¹ã¿ã€ãã«getproperty
ãå®è£
ãã人ã¯ãäžè¬çãªåäœãæåã§å®è£
ããå¿
èŠããããŸãã
getpropertyã®çŽäº€äœ¿çšã¯æ§æãããŸãã
ããŒãã ããã¯ãxTãgetproperty(x, Val(:T))
ã«ãäžããããã¹ãã ã£ããããšãæå³ããã®ã ãããã ããããããã貧匱ãªã³ã³ãã€ã©ã«äœãããããããèãããšãç§ã¯éããŸãã
誰ããèªåã®æèŠãæã£ãŠãããšç¢ºä¿¡ããŠããŸãããç§ã«ãšã£ãŠã¯ããããæ§æããæ±çšã€ã³ã¿ãŒãã§ã€ã¹ãæ§ç¯ããã®ãé£ãããšããã®ã¯ã»ãšãã©æ©èœã§ãã 誀解ããªãã§ãã ãããããã¯æ¬åœã«çŽ æŽãããæ©èœã§ãããååä»ãã¿ãã«ã®ãããªæ§é äœãªã©ãå®çŸ©ããã®ã«æé©ã§ãã
ïŒ Val
ãã£ã¹ãããã¬ã€ã€ãŒãã¿ã€ãã«éåžžã«ç°¡åã«è¿œå ããããšãå¯èœã§ãïŒã
@c42fã®ã³ãŒãã¯é åã®ããã«æ©èœããŸãã æ®å¿µãªãããããŒãžã§ã³0.64以éã§åäœããã³ãŒããäœæããããšããŠããŸããããã«ããã転眮ãŸãã¯ç¬èªã«å®çŸ©ããé¢æ°TïŒAïŒ= transposeïŒAïŒã®ããããã䜿çšããå¿ èŠããããŸãã ããããããã¯ãã¯ããå°ãã¯ãªãŒã³ã§å°ãå¹ççã ã£ãã§ãããã
æ確ã«ããããã«ããã®ç¹å®ã®getproperty
ãå®çŸ©ããããšããŠãŒã¶ãŒã³ãŒãã«ãšã£ãŠè¯ãèãã§ããããšã瀺åããŠããããã§ã¯ãããŸããã é·æçã«ã¯åé¡ãçºçããå¯èœæ§ããããŸã;-)ãããããã€ã®æ¥ãã x.T
ãBase
ã§å®çŸ©ã§ãããšããçµæãååã«æããããšãã§ããã§ãããã
ããããäžè¬çãªæå³ã§ããžã§ããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã²ãã¿ãŒããå®çŸ©ããããã®ãã®çš®ã®ããããã£ã®äœ¿çšãå®éã«æªãã®ã¯ãªãã ãããã ããšãã°ãäžè¬çãªãã£ãŒã«ãã²ãã¿ãŒé¢æ°ã«ã¯çŸåšã getproperty
ãé©åã«äœ¿çšããããšã§ç°¡åã«è§£æ±ºã§ãããéåžžã«å€§ããªåå空éã®åé¡ããããŸãã MyModule.A(x)
ã get_my_A(x)
ã®ãããªãã£ãšé·ãéãé¢æ°åãæžããããã x.A
ãæžãæ¹ãã¯ããã«è¯ãã§ãããŸãã¯ãŠãŒã¶ãŒããéåžžã«äžè¬çãªååA
ããšã¯ã¹ããŒãããã¢ãžã¥ãŒã«ã ç§ãèŠãŠããå¯äžã®åé¡ã¯ãã¹ãŒããŒã¿ã€ãã§äžè¬çã«å®çŸ©ãããŠãã.A
ãšã¯é¢ä¿ãªãããµãã¿ã€ãã®.B
ã®æå³ããªãŒããŒã©ã€ãããæ©èœãæåŸ
ãããããšã§ãã ãããã£ãŠã Val
ã«ã€ããŠã®ååæ·±å»ãªã³ã¡ã³ãã
é¢çœãã¢ã€ãã¢ïŒ
julia> x'Ì
ERROR: syntax: invalid character "Ì"
ãã£ã©ã¯ã¿ãŒã¯T
ã®ããã«èŠããŸãããå®éã«ã¯'
ã®äžã«ããŒããããŸãã æ·±å»ãã©ããããããªã...
ãããç§ã«ãGitHubã§ãã®ããã«èŠããŸãã ããããããã¯ãªãŒããŒããŒã§ãã ã¿ãŒããã«ã·ã§ãŒã«ã³ããŒããŠè²Œãä»ããŸãã
è³¢ãããŠããããã ãã ããç§ã¯ãŸã çµåæåã奜ãã§ã 'áµ
ã¯ãããšæããŸãã
-100ãé䌎äœçšçŽ ã«å€æŽããŸããããã¯ãJuliaã³ãŒããæ°åŠãæžãã®ãšåããããæ確ã«ããçŽ æŽããããã®ã®ã²ãšã€ã§ãããããã«å ±åœ¹è»¢çœ®ã¯éåžžããšã«ããå¿ èŠãªãã®ãªã®ã§ãæ§æãçç¥ããæ¹ãçã«ããªã£ãŠããŸãã
ãã®ãããªçºèšã«ã¯å²æ
¢ãããããŸãã éçºè
ã®äžéšã®æéã®å²åãæ瀺çã«adjoint()
ãæãã§ããªããã transpose()
ãå¿
èŠãšããŠããããšãèæ
®ããŠãã ããã
ããã©ã«ãã®'
æŒç®åãã¢ãã«åããããã®ã·ã³ããªãã¯èšç®ã䜿çšããå Žåã®ã±ãŒã¹ãšãã€ã³ãã¯ãããšãã°ãç䌌éè¡å(A'*A)\(A
* bïŒãŸãã¯2次圢åŒv'*A*v
ã誀ã£ãŠè¿ãããåå ã«ãªããŸããé·ããŠè€éãªçµæãæžããããšã¯ã§ããŸããã
ãããã解決çã¯ã '
ã®æå³ã宣èšããããçš®ã®ã³ã³ãã€ã©æ什ã§ãã
æãåèã«ãªãã³ã¡ã³ã
tr(A)
ãå¹³åè¡å転眮ã«ããããšã«éåžžã«åŒ·ãå察ããŸã-誰ãããããè¡åãã¬ãŒã¹ãæå³ãããšèããã§ãããïŒhttpsïŒ //en.wikipedia.org/wiki/Trace_ ïŒlinear_algebraïŒ