@alanedelmanããïŒ
ãã¯ãã«ã®è»¢çœ®ãããŸããŸãªA_*op*_B*
ã¡ãœããããã£ã¹ãããããæ¹æ³ã«ã€ããŠæ
éã«æ€èšããå¿
èŠããããŸãã æ°ããã¿ã€ããéãæ°åŠãé¿ããããšãå¯èœã§ãªããã°ãªããŸããã ããšãã°ããã¯ãã« 'ãã¯ãã«'ã¯ãã¯ãã«ïŒïŒ2472ãïŒ2936ïŒãçæãããã¯ãã« 'ã¯è¡åãçæãããã¯ãã«' 'ã¯è¡åïŒïŒ2686ïŒãçæããŸãããããã¯ãã¹ãŠæªãæ°åŠã§ãã
ç§ã«ãšã£ãŠæ°åŠçã«æ©èœããã®ã¯ïŒæ°ããã¿ã€ãã®å°å
¥ãåé¿ããïŒã1次å
ã®Vector
v
ã§ãïŒ
v'
ã¯äœãããŸããïŒã€ãŸãã v
è¿ãã ãã§ãïŒãv'v
ãŸãã¯v'*v
ã¯ã¹ã«ã©ãŒã§ãããv*v'
ã¯è¡åã§ãããv'A
ãŸãã¯v'*A
ïŒ A
ã¯AbstractMatrix
ïŒã¯ãã¯ãã«ã§ãäžè¬çãª_N_次å ã®è»¢çœ®ã¯ãã€ã³ããã¯ã¹ã®é åºãéã«ããŸãã 1ã€ã®ã€ã³ããã¯ã¹ãæã€ãã¯ãã«ã¯ã転眮ã®äžã§äžå€ã§ããå¿ èŠããããŸãã
å®éã«ã¯ã v'
ãåç¬ã§äœ¿çšãããããšã¯ãã£ãã«ãªããéåžžãè¡å-ãã¯ãã«ç©ããã³è¡å-è¡åç©ã§çºçããŸãã äžè¬çãªäŸã¯ãå
±åœ¹åŸé
æ³ãã¬ã€ãªãŒåãªã©ã§äœ¿çšãããåç·åœ¢åœ¢åŒv'A*w
ãš2次圢åŒv'A*v
ãäœæããããšã§ãã
æ°ããTranspose{Vector}
ã¿ã€ããå°å
¥ããå¯äžã®çç±ã¯ãåå€ãã¯ãã«ãšå
±å€ãã¯ãã«ã®éããè¡šãããšã§ãããããã¯ååã«èª¬åŸåããããšã¯æããŸããã
ããšãã°ããã¯ãã« 'ãã¯ãã«'ã¯ãã¯ãã«ïŒïŒ2472ãïŒ2936ïŒãçæãããã¯ãã« 'ã¯è¡åãçæãããã¯ãã«' 'ã¯è¡åïŒïŒ2686ïŒãçæããŸãããããã¯ãã¹ãŠæªãæ°åŠã§ãã
æé次å ã®ãã¯ãã«ç©ºéã®å察ã¯ããããšååã§ãããåäžã§ã¯ãããŸããã ã§ãããããããã©ã®ããã«æªãæ°åŠãªã®ãã¯ã£ããããŠããŸããã 人éã®è³ã¯ãã®ãããªæ»ããããææ§ããåŠçããæ£ããããšãããã®ãåŸæãªã®ã§ãæ°åŠã§ååã§ãããã®ã®éããç解ããåŸåããããŸãã ãšã¯ããããããæ¹åããå¿ èŠãããããšã«åæããŸãããæ°åŠçã«æ£ãããªãããã§ã¯ãªããç ©ãããããã§ãã
v' == v
ããããv'*v != v*v
ã©ãããã°ããã§ããïŒ x' * y
ãç¬èªã®æŒç®åã§ãããšç§ãã¡ãæã£ãŠãããããçã«ããªã£ãŠããŸããïŒ
æé次å ã®ãã¯ãã«ç©ºéã®å察ã¯ããããšååã§ãããåäžã§ã¯ãããŸããã
ïŒä»ç§èªèº«ãšèšãã°ïŒããã¯åãªãååã§ã¯ãªããèªç¶ã«ååã§ããã€ãŸããååã¯åºåºã®éžæãšã¯ç¡é¢ä¿ã§ãã ãã®çš®ã®ååãšã¢ã€ãã³ãã£ãã£ãåºå¥ãã䟡å€ã®ããå®çšçãªã¢ããªã±ãŒã·ã§ã³ã¯èããããŸããã IMOã®ç ©ãããã®èŠå ã¯ããã®çš®ã®åºå¥ãããããšããæ¥ãŠããŸãã
x' * y
ãç¬èªã®æŒç®åã§ãããšæã£ãŠãããããçã«ããªã£ãŠããŸããïŒ
ããããä»æ¥ã®ååŸã®@alanedelmanãšã®è©±ãåãããåŸãå°è±¡ã§ããã
ãžã§ããæ±ããŠããã®ã¯ãéã®åé¡ã ãšæããŸã...ããã¯x'_yã®ããã«èŠãå§ããŠãããx_y 'ã¯ããå€ãã皌ãã§ããŸã
ãããŸã§ä»¥äžã«ã»ã³ã¹ã
ç§ã¯@stefanãšæŽåçã«åæããŠããŸãã æªãæ°åŠã¯ãééã£ãæ°åŠãæå³ãããã®ã§ã¯ãããŸããã§ããã
è¿·æãªæ°åŠãæå³ããããšãæå³ããŸããã æè¡çã«ã¯æ£ãããã®ããããããããŸãããããŸãè¯ããããŸãã...ã
ãã®ããžãã¯ã䜿çšããå Žåãããã«2ã€ã®éžæè¢ããããŸã
x_xã¯ãšã©ãŒã®ãŸãŸã§ã.....ããããããããã䜿çšãããããšããææ¡ããããŸã
ãŸãã¯x_xã¯å
ç©ã§ãïŒç§ã¯ãã®éžæã奜ãã§ã¯ãããŸããïŒ
x
ãšx'
ãåããã®ã§ããå Žåã (x')*y
ãdot(x,y)
ãæå³ããããã«ãããå Žåã¯ã x*y
ãdot(x,y)
ããããšãæå³ããŸãã x'y
ãšx'*y
ãå¥ã®æäœã«ããããšãã§ããŸããããããçŽ æŽãããã¢ã€ãã¢ãã©ããã¯ããããŸããã 人ã
ã¯ãããæçœãªæ¹æ³ã§æ¬åŒ§ã§ããããããã§ãæ©èœãããããšæã£ãŠããŸãã
x*x
ãå
ç©ãæå³ããããšãèš±å¯ããå Žåãåºæ¬çã«æ»ãããšã¯ã§ããªãããšãææããŠãããŸãã ããã¯è³ãæã§äººã
ã®ã³ãŒãã«å
¥ãããããããæ ¹çµ¶ããããšã¯æªå€¢ã«ãªãã§ãããã ãããã£ãŠãèªç¶ååã§ããããšãªããããšãããã¯çŽç²æ°åŠã§ã¯ãªããã³ã³ãã¥ãŒã¿ãŒå
ã®ããŸããŸãªãã®ãç°ãªããšããäºå®ã«å¯ŸåŠããå¿
èŠããããŸãã
ããããç§ã奜ããªãã¢ããã¿ãã«ããšãããŠã³ã¿ãã«ããåºå¥ããããã®å®è·µçãªè°è«ã§ãã
http://mitpress.mit.edu/sites/default/files/titles/content/sicm/book-ZH-79.html#ïŒ _idx_3310
ãvectorãããdualããªã©ã®åèªã¯æ éã«é¿ããè¿·æãªäººãé¿ããããã§ãã ããããåå°é¢æ°ãžã®é©çšã¯èª¬åŸåããããšæããŸãã
http://mitpress.mit.edu/sites/default/files/titles/content/sicm/book-ZH-79.html#ïŒ _sec_Temp_453
M[1,:]
ãšM[:,1]
ãåºå¥ãããã1ã€ã®çç±ã¯ãçŸåšããããŒããã£ã¹ãåäœã«ãã£ãŠãã®éåžžã«äŸ¿å©ãªåäœãèš±å¯ãããŠããããšã§ãã M./sum(M,1)
ã¯å確ççã§ããã M./sum(M,2)
ã¯è¡ç¢ºççã§ãã ã norm
é¢æ°ããä¿®æ£ãããŠãè¡ãšåã«ç°¡åã«é©çšã§ããããã«ãããšãæ£èŠåã«ã€ããŠãåãããšãã§ããŸãã ãã¡ãããäžäžã®ãã¯ãã«ã®ä»£ããã«sum(M,1)
ãšsum(M,2)
æ»ãè¡åã䜿çšããããšãã§ããŸãããããã¯å°ããããŠããããã§ãã
ç§ã¯äžäžã®ãã¯ãã«ã®ã¢ã€ãã¢ã奜ãã§ãã åé¡ã¯ãå®å šã«çæ°ã§ã¯ãªãæ¹æ³ã§ãããããé«ã次å ã«äžè¬åããããšã§ãã ãŸãã¯ããã¯ãã«ãç¹å¥ãªå Žåã«ããããšãã§ããŸãã ãããããããééã£ãŠãããšæããŸãã
ã¢ãã/ããŠã³ã¯å¥ã®çè«ãããããªãã®ã¯äºå®ã§ãã ããããäžè¬åããã¢ãããŒãã¯ãã¹ããããæ§é ã®ããã§ãããããã¯ç©äºãç°ãªãæ¹åã«å°ããŸãã 圌ãããããããã¯ãã«ãšåŒã°ãªãçç±ãããå¯èœæ§ãéåžžã«é«ãã§ãã
ãŸãã x*y = dot(x,y)
ã¯ã x*(y*z)
ãš(x*y)*z
ããã«ã *
éé£æ³ã«ããŸãã ãããé¿ããããããšãå¿ããé¡ã£ãŠããŸãã
ã¯ãã ç§ã«ãšã£ãŠãããã¯å®å
šã«åãå
¥ããããŸããã ã€ãŸããæè¡çã«ã¯ãæµ®åå°æ°ç¹*
ã¯éé£æ³çã§ãããã»ãŒé£æ³çã§ãããããã¯æããã«éé£æ³çã§ãã
x*x
ã¯å
ç©ã§ãã£ãŠã¯ãªããªãããšã«ç§ãã¡ã¯çåæããŸãã
v'w
ãšv'*w
ãå
ç©ãšèããããšãã§ãããã©ãããšããçåãæ®ããŸã-
ç§ã¯ããããã®ããã«æ©èœããã®ãæ¬åœã«å¥œãã§ãã
@JeffBezansonãšç§ã¯ãã£ããããŠããŸãã
ææ¡ã¯æ¬¡ã®ãšããã§ãã
v'
ã¯ãã¯ãã«ã®ãšã©ãŒã§ãïŒããã¯æ°åŠãè¡ãããšã§ãïŒ
v'w
ããã³v'*w
ã¯å
ç©ã§ãïŒçµæ=ã¹ã«ã©ãŒïŒ
v*w
ã¯å€ç©è¡åã§ãïŒçµæ=è¡åïŒ
è¡ãšåã®ãã¯ãã«ã®åºå¥ã¯ãããŸããã ãšã«ããããã奜ãã ã£ã
æ°åŠã®åäŸãèŠãŠããããã£ã
mathematicaããïŒ http ïŒ
Mathematicaããã¯ãã«ãšè¡åãè¡šãããã«ãªã¹ãã䜿çšããæ¹æ³ã®ããããè¡ããã¯ãã«ãšãåããã¯ãã«ãåºå¥ããå¿
èŠã¯ãããŸããã
ãŠãŒã¶ãŒã¯ãè¡ãã¯ãã«....æéããªãããšã«æ³šæããå¿ èŠããããŸãã
ãããã£ãŠã M
ãè¡åã®å Žå
M[1,:]*v
ã¯ãšã©ãŒã§ã.....ïŒ M[1,:]
ã䜿çšãããšä»®å®ãããšãã¹ã«ã©ãŒã§ã
èŠåã¯ã dot
ãŸãã¯'*
ãŸãã¯M[i:i,:]
è©Šãããšã瀺åããŠããå¯èœæ§ããããŸã
M[[1],:]*v
ãŸãã¯M[1:1,:]*v
ã¯é·ã1ã®ãã¯ãã«ã§ãïŒããã¯ãšã«ãããžã¥ãªã¢ã®çŸåšã®åäœã§ãïŒ
https://groups.google.com/forum/#!topic/julia -users / L3vPeZ7kewsã®å¯æ¥ã«é¢é£ããåé¡ã«ã€ããŠ
Mathematicaã¯ã¹ã«ã©ãŒã®ãããªé åã»ã¯ã·ã§ã³ãå§çž®ããŸãïŒ
m = Array[a, {2, 2, 2}]
Out[49]= {{{a[1, 1, 1], a[1, 1, 2]}, {a[1, 2, 1],
a[1, 2, 2]}}, {{a[2, 1, 1], a[2, 1, 2]}, {a[2, 2, 1], a[2, 2, 2]}}}
In[123]:= Dimensions[m]
Dimensions[m[[All, 1, All]]]
Dimensions[m[[2, 1, All]]]
Dimensions[m[[2, 1 ;; 1, All]]]
Out[123]= {2, 2, 2}
Out[124]= {2, 2}
Out[125]= {2}
Out[126]= {1, 2}
[ç·šéïŒã³ãŒããã©ãŒãããâ @StefanKarpinski]
@alanedelman
M [1 ãïŒ]ã¯ã¹ã«ã©ãŒã§ãããšä»®å®ããŸã
M [1 ãïŒ]ã¯åãªããã¯ãã«ãšããæå³ã§ããïŒ
ããããããã ç§ã®èãã¯ãM [1 ã:]ãã¹ã«ã©ãŒ1ãåŠçããŠããããšãæå³ããŸãã:-)
Mathematicaã¯ã¢ã¹ã¿ãªã¹ã¯*
ã§ã¯ãªãããªãªã.
䜿çšããŸã
次ã«ã9ã€ãŒãå
šäœã移åããïŒvector .vectorïŒãã¹ã«ã©ãŒã«ããŸããããã¯ãŸãã«ç§ãã¡ãé¿ããŠããããšã§ãã
ã¢ã¹ã¿ãªã¹ã¯ä»ãã
æéã«ã¯ééããªãå€ãã®åé¡ããããŸããããã®1ã€ã¯ããã§ã¯ãªããšããããšã§ã
ãããç©ã®ãããããã®ããã«èŠããŸããããã1ã€ã¯ããããè¡çªããããšã§ãã
ãããã®ããã€ã³ãã¯ã€ãºæäœãã®èªã¿ã
Unicodeã¯ãããããæŒç®åããšããååã®æåãéåžžã«ããŸãæäŸããŸã
â
(char(8901))
ããã¯ç§ãã¡ãæäŸããããšãæ³åã§ããŸã
ãããã£ãŠã (v â
w)
ã(v'*w)
å矩èªã«ããããšãã§ããŸãã
èŠçŽãããšãè°è«ã®å¯Ÿè±¡ãšãªãçŸåšã®ææ¡ã¯æ¬¡ã®ãšããã§ãã
A[i,:]
ã¯ã A[:,i,j]
åæ§ã«ãã¯ãã«ã§ããA[ i:i , : ]
ãŸãã¯A[ [i], : ]
ã¯ã1è¡ã®è¡åãè¿ããŸãv'w
ãŸãã¯v'*w
ã¯ããã¯ãã«ã®å
ç©ã§ãïŒåæ§ã«ãå€ç©ã®å Žåã¯v*w'
ïŒãv'
ã¯ãã¯ãã«ã«å¯ŸããŠæªå®çŸ©ã§ãïŒãŠãŒã¶ãŒãpermutedims(v,1)
ãã€ã³ãããŸãã????ïŒv*A
ã¯ãã¯ãã«ãè¿ããŸãvâ
w
ãå
ç©ãè¿ããŸãïŒãã ããè¡åãæäœããããšã«ãããæ°åŠã®.
ãŸã§ã¯è¡ããŸããv*w
ã¯ãã¯ã¿ãŒã«å¯ŸããŠæªå®çŸ©ã§ãããèŠåããŠãŒã¶ãŒã«æ¬¡ã®ãããªé©åãªææ¡ãæäŸããå¯èœæ§ããããŸãâ
çµæã¯ããã§ã
aã åãã¯ãã«ã§ãããã¹ãŠã®ãã¯ãã«ã«åºå·ãããšããã¹ãŠãæ©èœããŸã
bã ãã¹ãŠããããªãã¯ã¹ã«ãããšããã¹ãŠã確å®ã«æ©èœãããã¹ãŠããããªãã¯ã¹ã«ããã®ã¯ç°¡åã§ãã
cã è¡ãã¯ãã«ãš1è¡ã®è¡åãåºå¥ã§ããªãå Žåã¯ãæè²ãåããå¯èœæ§ããããŸãã
äžå¯§ãã€åªé
ã«
dã ãã®ãããè¡šèšâ
ã¯ãèŠãç®ã«ã¯å¿å°ãããã®ã§ãã
ææ¡5ïŒç§ã«ã¯éåžžã«å¥åŠã«èŠããŸãã å察ãã¯ãã«ã䜿çšããŠããããšãæ瀺ãããããã«ã v'*A
ã䜿çšããŸãã ããã¯ããã¥ã¢ã«ãåãªãã圢ç¶ãå€æã§ã¯ãªãè€éãªãã¯ãã«ç©ºéã§ç¹ã«éèŠã§ãã
@StefanKarpinskiã«ããã®ãã¹ãŠã§ç°¡æœãªãããŒããã£ã¹ãåäœã倱ãã®ã¯ããªãæ®å¿µã ãšåé¿ããããšæããŸãã ãã®å€æŽåŸããã¯ãã«v
ãååŸãããããã®å€ã«ãã£ãŠè¡åA
ã®åãæ£èŠåããããã®ç°¡æœãªæ§æã¯äœã§ããïŒ çŸåšã A ./ v'
䜿çšã§ããŸãã ããã¯ãããŒã¿æäœã«éåžžã«é©ããŠããŸãã
è¯ã質å
ç§ã®ã¹ããŒã ã¯ã v'*A
ãvã®è€çŽ å
±åœ¹ãåããAã§ä¹ç®ããããšãæé€ããŠããŸããã
ãããŠãç§ããŸã æ瀺çã«èšåããªãã£ãããããã«ã§ããä»ã®ããŸããŸãªã±ãŒã¹ãã¹ãŠ
5ãæé€ããããšãã§ããŸã
ãããããããæãŸãã
åãã¯ãã«ã®ã«ãŒã«ã«æºæ ããŠããŸãã
æŸéãžã®ãã®ã¢ãããŒãã¯ãããããŠäžåšçšã§ã
çŸåšã®è§£æ±ºçã®1ã€ã¯A ./ v[:,[1]]
ã©ã®ãã£ã¡ã³ã·ã§ã³ããããŒããã£ã¹ããããŠããããææžåãããšããå©ç¹ããããŸã
ããé«æ¬¡å
ã®é
åã«äžè¬åããŸã
ããã v[:,[1]]
ãœãªã¥ãŒã·ã§ã³ã«ã¯ãè€çŽ å
±åœ¹ããšããªããšããå©ç¹ããããŸã
ããã¯ãããããŠãŒã¶ãŒãæå³ããŠããããšã§ã.....
æåã®äŸã¯ç·åœ¢ä»£æ°ã®äŸã§ãããããããã2ã€ã®äŸã奜ãã§ã
è€çŽ å
±åœ¹ãéåžžã«é »ç¹ã«å¿
èŠãšãããå Žåã2çªç®ã®äŸã¯
ç©äºããã¹ãŠã®æ¬¡å
ã§æ©èœããããå€æ¬¡å
ããŒã¿ã®äŸ
è¡åã ãã§ãªããè€éãªå
±åœ¹ã¯å¿
èŠãªãå¯èœæ§ãéåžžã«é«ãã§ã
â
ã¯ïŒ552ãå¿
èŠã§ãã éå»2é±éã§3åç®ã§ãã
M [1 ãïŒ]ãšM [ïŒã1]ãåºå¥ãããã1ã€ã®çç±ã¯ãçŸåšããããŒããã£ã¹ãåäœã«ãã£ãŠãã®éåžžã«äŸ¿å©ãªåäœãå¯èœã«ãªãããšã§ããMã/ sumïŒMã1ïŒã¯å確ççã§ãããMã/ sumïŒMã 2ïŒè¡ç¢ºççã§ãã ãã«ã é¢æ°ããä¿®æ£ãããŠè¡ãšåã«ç°¡åã«é©çšã§ããããã«ããã°ãæ£èŠåã«ã€ããŠãåãããšãã§ããŸãã ãã¡ãããäžäžã®ãã¯ãã«ã®ä»£ããã«sumïŒMã1ïŒãšsumïŒMã2ïŒã®æ»ãè¡åã䜿çšããããšãã§ããŸãããããã¯å°ããããŠããããã§ãã
æŸéã®æ¯ãèããè¯ãå Žåãããããã«æããŸããããããã®äœåãªãŠããããçµããªããã°ãªããªãããšããããŸãã ãããã£ãŠãã·ã¹ãã ã®æ®ãã®éšåãåªããŠããå Žåã¯ãéã®ããšãè¡ãå¿ èŠãããå Žåã¯åé¡ãããŸããïŒã¹ã«ã©ãŒæ¬¡å ãåé€ãããšãã·ã¹ãã ãåªãããã®ã«ãªããšæããŸãïŒã ãããã£ãŠã次ã®ãããªé¢æ°ãå¿ èŠã«ãªããŸã
julia> widen(A::AbstractArray,dim::Int) = reshape(A,insert!([size(A)...],dim,1)...)
# methods for generic function widen
widen(A::AbstractArray{T,N},dim::Int64) at none:1
ããã«ããã M ./ widen(sum(M,2),2)
ãA ./ widen(v,1)
ãããªã³ãŒããèš±å¯ãããŸãïŒäžèšã®@blakejohnsonã®äŸãåç
§ïŒ
M [ïŒã0 ãïŒ]ããã³v [ïŒã0] ?????
åæžã®åé¡ã«ã€ããŠã¯ã @ blakejohnsonã®æ¹ã奜ãã§ãã å人çã«ã¯ã widen
ãããsqueeze
ã®æ¹ãæ確ã ãšæããŸãã widen
ãæå®ãããã€ã³ããã¯ã¹ã®ååŸã«ãã£ã¡ã³ã·ã§ã³ãæ¿å
¥ãããã©ãããå€æããããã«ããã¥ã¡ã³ãã絶ãã調ã¹ãŠãããšæããŸããäžåºŠã«è€æ°ã®ãã£ã¡ã³ã·ã§ã³ã«æ¡å€§ããå Žåã¯ãçªå·ä»ããå°ãè€éã«ãªããŸãã ïŒäœwiden(v, (1, 2))
ãã¯ãã«ã«å¯ŸããŠv
ãããã®ãããã®ã§ããïŒïŒã®ããã®åé¡ã§ããsqueeze
ã
ããã©ã«ãã§æ¡å€§ãããçž®å°ãããã«é¢ä¿ãªããæ¡å€§ã«é¢ããŠã¯Juliaãnumpyã®å
å°ã«åŸãã v[:, newaxis]
ãããªãã®ãèš±å¯ããå¿
èŠããããšæããŸãã ããããç§ã¯å¯žæ³ãç Žæ£ããã®ã§ã¯ãªãä¿æããããšã奜ããšä¿¡ããŠããŸããééã£ãæ¹åã«çµã£ããšããããã誀ã£ãŠééã£ãæ¹åã«åºãããã°ãèŠã€ããã®ã¯é£ããã§ãïŒéåžžã¯ãšã©ãŒãçºçããŸãïŒã
@alanedelmanã®ãªã¹ã
ç§ã¯ãã®ããã«æãã
Aãè¡åã®å Žåãv * Aã¯ãã¯ãã«ãè¿ããŸã
è¯ããªãã
Aã1x1ïŒã€ã³ããã¯ã¹ã®ç¯å²ã®äžäžèŽïŒã§ãªãå Žåãv_Aã¯ãšã©ãŒã«ãªããŸãã
v'_Aã¯ãããè¡ãããã®é©åãªæ¹æ³ã§ããå¿
èŠããããŸãã
ãã®åé¡ãåŠçãã1ã€ã®æ¹æ³ã¯ããã¯ãã«vãnx1è¡åã«èªåçã«å€æããããšã§ãïŒå¿
èŠãªå ŽåïŒã
åžžã«v 'ã1xnè¡åãšããŠæ±ããŸãïŒãã¯ãã«ãŸãã¯nx1è¡åã«å€æããªãã§ãã ããïŒ
ãŸãã1x1è¡åãã¹ã±ãŒã©ãŒçªå·ã«èªåçã«å€æããããšãã§ããŸãïŒå¿
èŠãªå ŽåïŒã
ããã¯ãç·åœ¢ä»£æ°ã«ã€ããŠã®äžè²«ããåäžãªèãæ¹ãè¡šããŠãããšæããŸãã ïŒè¯ãæ°åŠïŒ
ããããã¹ãŠã®åé¡ãåŠçããããã®çµ±äžãããæ¹æ³ã¯ãèªåïŒåïŒïŒå€æãèš±å¯ããããšã§ãïŒå¿
èŠãªå ŽåïŒ
ãµã€ãºïŒnïŒãïŒnã1ïŒãïŒnã1,1ïŒãïŒnã1,1,1ïŒãªã©ã®é
åéïŒãã ãããµã€ãºïŒnã1ïŒãšïŒ1ãnïŒã®é
åéã§ã¯ãããŸããïŒ ïŒ
ïŒå¿
èŠã«å¿ããŠå®æ°ãè€çŽ æ°ã«èªåçã«å€æããã®ãšåãããã«ïŒ
ãã®å Žåããµã€ãºïŒ1,1ïŒã®é åãïŒå¿ èŠã«å¿ããŠïŒæ°å€ã«å€æã§ããŸãïŒïŒ4797ãåç §ïŒã
Xiao-GangïŒç©çåŠè ïŒ
ããã¯v'_Aãæ®ããŸãããã....ç§ã¯æ¬åœã«v'_A * wãæ©èœããããã§ã
ãžã¥ãªã¢ã§ã®ç·åœ¢ä»£æ°ã®ç§ã®å°è±¡ã¯ãã¹ã«ã©ãŒãšçã®ãã¯ãã«ãååšããã«ããããããããããè¡å代æ°ã®ããã«éåžžã«çµç¹åãããŠãããšããããšã§ãïŒããã¯è¯ããšæããŸãïŒïŒ
x*y*z*w
ãããªç©ãåŠçããæ¹æ³ãèããŠã¿ãŸããããããã§ãåå åã¯ã¹ã«ã©ãŒããã¯ãã«ããŸãã¯è¡åã§ããããããã転眮ãããŠããŸãã è¡å代æ°ã¯ãè¡åã®ç©ãå®çŸ©ããŸããããã§ãè¡åã®ãµã€ãºã¯n x m
ã§ãã 1ã€ã®ã¢ãããŒãã¯ããã®å®çŸ©ãæ¡åŒµããŠã n
ãŸãã¯m
ãabsent
ã«çœ®ãæããããšã§ããããã¯ã補åã®èšç®ã«é¢ããéãã1ã®å€ã®ããã«æ©èœããŸãã ããã ããã¹ã«ã©ãŒãšãã¯ãã«ãè¡åããåºå¥ããããã«äœ¿çšãããŸãã
absent x absent
n x absent
absent x n
çæ³çã«ã¯ãè¡ãã¯ãã«ãè¡šãå¿
èŠããªãããã«é
眮ãããã®ã§ããã x'*y
ãx*y'
ãããªæäœãå®è£
ããã ãã§ååã§ãã ãããç§ãã¡ã®å€ããæ¢ããŠããã¹ããŒã ã®å³ã ãšæããŸãã
ãããããã®çš®ã®ã¹ããŒã ã§è¡ãã¯ãã«ãçŠæ¢ãããšãã³ã¹ããé«ããªãã®ã§ã¯ãªãããšç§ã¯èãå§ããŠããŸãã äŸïŒäžéã¹ãããã§è¡ãã¯ãã«ã圢æãããªãããã«ã補åãæ¬åŒ§ã§å²ãå¿
èŠãããæ¹æ³ãæ€èšããŠãã ããïŒ a
ã¯ã¹ã«ã©ãŒã u
ããã³v
ã¯ãã¯ãã«ã§ãïŒ
a*u'*v = a*(u'*v) // a*u' is forbidden
v*u'*a = (v*u')*a // u'*a is forbidden
è¡ãã¯ãã«ã®çæãé¿ããªããç©x*y'*z
ãè©äŸ¡ããã«ã¯ãä¹ç®ã®é åºãéžæããåã«ãå åã®ã¿ã€ããç¥ãå¿
èŠããããŸãã ãŠãŒã¶ãŒãèªåã§ãããè¡ãå¿
èŠãããå Žåãããã¯ãžã§ããªãã¯ããã°ã©ãã³ã°ã®é害ã®ããã«æãããŸãã ãããŠããžã¥ãªã¢ãã©ããã£ãŠãããæ£ããæ¹æ³ã§èªåçã«è¡ãããšãã§ããã®ãããããŸããã
ä¹ç®ã®é åºãäºåã«åºå®ããªããã1ã€ã®çç±ïŒåçèšç»æ³ã䜿çšããŠãå¿
èŠãªæäœã®æ°ãæå°éã«æããããã«*(x,y,z,w)
ã®æé©ãªè©äŸ¡é åºãéžæãããšããã¢ã€ãã¢ããã£ãããšãèŠããŠããããã§ãã è¡ãã¯ãã«ã®åœ¢æãåé¿ããããã«è¡ãããšã¯ãããã劚ããå¯èœæ§ããããŸãã
ãããã£ãŠãçŸæç¹ã§ã¯ã転眮ãã¯ãã«åãå°å ¥ããããšã¯ãç§ã«ãšã£ãŠæãæ£æ°ãªä»£æ¿æ段ã®ããã«æããŸãã ããããŸãã¯ä»ã®ããã«ãã¹ãŠãå®è¡ããŸãããããããä¿æãããšãã«æ«å°Ÿã®ã·ã³ã°ã«ãã³ãã£ã¡ã³ã·ã§ã³ãåé€ãããšããšã©ãŒãçºçããŸãã
転眮ã¯ãã¢ãŒãã䞊ã¹æ¿ããç¹å®ã®æ¹æ³ã§ãã v.'
ãèš±å¯ããå ŽåïŒ v
ã¯ãã¯ãã«ïŒã permutedims(v,[2 1])
ã¯ãŸã£ããåããã®ãè¿ãã¯ãã§ãã ã©ã¡ããç¹å¥ãªè¡ãã¯ãã«ã¿ã€ããè¿ãããæ°ãããã£ã¡ã³ã·ã§ã³ãå°å
¥ããŸãã
è¡ãã¯ãã«ã«ç¹å¥ãªã¿ã€ãã䜿çšããããšã¯ãç§ã«ã¯è¯ã解決çã®ããã«ã¯èŠããŸãããä»ã®ã¿ã€ãã®ã¢ãŒãnãã¯ãã«ãããšãã°permutedims([1:4],[3 2 1])
ã©ãããã®ã§ããããã 決å®ãäžãåã«ãå€éç·åœ¢ä»£æ°ãèæ
®ã«å
¥ããããšããå§ãããŸãã
@toivohã¯ãããè¿°ã¹ãŸãã
ã1ã€ã®ã¢ãããŒãã¯ããã®å®çŸ©ãæ¡åŒµããŠãnãŸãã¯mãäžåšã«çœ®ãæããããšã§ããããã¯ãç©ã®èšç®ã«é¢ããŠã¯1ã®å€ã®ããã«æ©èœããŸãããã¹ã«ã©ãŒãšãã¯ãã«ãè¡åããåºå¥ããããã«äœ¿çšãããŸãã
å€éç·åœ¢ä»£æ°ïŒãŸãã¯é«ã©ã³ããã³ãœã«ã®å ŽåïŒã§ã¯ãäžèšã®ææ¡ã¯ãäžåšãè¡šãããã«äœ¿çšããªãããšã«å¯Ÿå¿ããŸãã
ç¯å²1ã®å€ãã®ã€ã³ããã¯ã¹ãã€ãŸããµã€ãºïŒmãnãabsentïŒã¯ãïŒmãnïŒãïŒmãnã1ïŒãïŒmãnã1,1ïŒãªã©ã«å¯Ÿå¿ããå ŽåããããŸãã
ãã®äžåšã®è§£éã䜿çšããå Žåã1ããš2.ã¯åé¡ãªãããããããã§ããã3ãã¯åé¡ãªãå¯èœæ§ããããŸãã
ãµã€ãºïŒ1ãnïŒãšïŒ1,1ãnïŒã®é
åãæ··åšãããããããŸããã
ç§ã¯ãã³ãœã«çè«ã®å°é家ã§ã¯ãããŸããããç·åœ¢ä»£æ°ãå«ãå®è³ªçãªãããžã§ã¯ãã«ã¯ãäžèšã®ãã¹ãŠã®ã·ã¹ãã ïŒã¢ããªã³ããã±ãŒãžãªãïŒã䜿çšããŸããã
[TL; DRïŒæŠèŠã«ã¹ããã]
ããã¯ãäžè¬çãªè¡å-ãã¯ãã«æŒç®ãããé ååŠçã®äžè¬æ§ãé«ããå¿ èŠããããšç§ãæããæãäžè¬çãªã·ããªãªã§ãã
ïŒ1ïŒé¢æ°è§£æïŒããšãã°ããã¯ãã«å€é¢æ°ã®ããã»è¡åã䜿çšãããšããã«ãé«éãã³ãœã«ãæ©èœããå¿ èŠããããŸãã ããªããããããã®æ°åŠãæžããŠãããªãããããã®å Žåã®ããã«ç¹å¥ãªæ§æã䜿ããªããã°ãªããªãããšã¯å€§ããªèŠçã§ãããã
ïŒ2ïŒè©äŸ¡ç®¡çïŒããšãã°ãèšç®å¯èœãªè£œåãããã°ããã®è£œåã®ãµããšã³ãã£ãã£ãåå¥ã«èšç®ã§ããå¿
èŠããããŸããããã¯ãè€æ°ã®ç°ãªããµããšã³ãã£ãã£ãšçµã¿åãããŠç°ãªã補åã圢æãããå Žåãããããã§ãã ãããã£ãŠãããšãã°a*u'
ãçŠæ¢ãããŠãããšããToivoã®æžå¿µã¯ãã³ã³ãã€ã«ã®æžå¿µã ãã§ãªããããã°ã©ãã³ã°ã®æžå¿µã§ããããŸãã ããã«äžè¬çãªããªã¢ã³ãã¯ã x'Q
ãäºåã«èšç®ããŠã2次圢åŒx'Q*y1
ã x'Q*y2
ã...ãèšç®ããããšã§ãïŒãããã¯é çªã«å®è¡ããå¿
èŠããããŸãïŒã
ïŒ3ïŒã³ãŒãã®ç°¡ç¥åïŒå€æ¬¡å ããŒã¿ã»ããã«ãããã³ã°ãããç®è¡æŒç®ãåŠçãããšãã«ãã·ã¹ãã ã§6ã7è¡ã®äžå¯è§£ãªã«ãŒããŸãã¯é¢æ°ãããã³ã°ã³ãŒãã1ã€ãŸãã¯2ã€ã®ç°¡åãªé åæŒç®ã«çœ®ãæããããšãã§ããããšãäœåºŠãçºèŠããŸãããé©åãªäžè¬æ§ãæäŸããŸãã ã¯ããã«èªã¿ããããã¯ããã«é«éã§ãã
äžèšã®ã·ã¹ãã ã§ã®ç§ã®äžè¬çãªçµéšã¯æ¬¡ã®ãšããã§ãã
MATLABïŒã³ã¢èšèªã¯ããããµããè¡å-ãã¯ãã«æŒç®ãè¶ ããŠå¶éãããŠãããããéåžžãã€ã³ããã¯ã¹ã䜿çšããŠã«ãŒããäœæããããšã«ãªããŸãã
NumPyïŒMATLABãããäžè¬çãªæ©èœã§ãããé¢åã§è€éã§ãã ã»ãšãã©ãã¹ãŠã®éèŠãªåé¡ã®ã€ã³ã¹ã¿ã³ã¹ã«ã€ããŠãããã¥ã¡ã³ããåç §ããå¿ èŠããããŸããããããã§ããçŽæçã«å®çŸ©ããå¿ èŠããããšæããé åæäœãèªåã§å®è£ ããå¿ èŠãããããšã«æ°ä»ãããšããããŸããã ã·ã¹ãã ã«ã¯éåžžã«å€ãã®åå¥ã®ã¢ã€ãã¢ããããããç¹å®ã®ãŠãŒã¶ãŒãšéçºè ã¯ãçžæãäœãã«ã€ããŠã©ãèããããèªåçã«æšæž¬ããã®ã«èŠåŽããããã§ãã éåžžããããè¡ãããã®çããŠå¹ççãªæ¹æ³ãèŠã€ããããšã¯å¯èœã§ããããã®æ¹æ³ã¯ãã©ã€ã¿ãŒãŸãã¯ãªãŒããŒã«ãšã£ãŠåžžã«æçœã§ãããšã¯éããŸããã ç¹ã«ãã¯ââã€ãåãšã·ã³ã°ã«ãã³ãã£ã¡ã³ã·ã§ã³ã®å¿ èŠæ§ã¯ãæŒç®åãé©çšããããã®å®è£ ã®äžè¬æ§ã®æ¬ åŠãåæ ããŠãããšæããŠããŸãïŒãã ããããçŽæçã«æãã人ãããŸãïŒã
MathematicaïŒã¯ãªãŒã³ã§éåžžã«äžè¬ç---ç¹ã«ãé¢é£ãããã¹ãŠã®æŒç®åã¯é«éãã³ãœã«ã®æ¯ãèãã念é ã«çœ®ããŠèšèšãããŠããŸãã ãããã®ä»ã«ãããšãã°ããã©ã³ã¹ããŒãºããã©ããå/ããŒãã£ã·ã§ã³ãããã³å éš/å€éšã«é¢ããããã¥ã¡ã³ããåç §ããŠãã ããã ãããã®æäœã ããçµã¿åãããããšã§ãã»ãšãã©ã®é åãžã£ã°ãªã³ã°ã®ãŠãŒã¹ã±ãŒã¹ããã§ã«ã«ããŒã§ããŸããããŒãžã§ã³9ã§ã¯ãã³ã¢èšèªã«è¿œå ã®ãã³ãœã«ä»£æ°æäœãè¿œå ãããŠããŸãã æ¬ ç¹ã¯ãMathematicaã§äœããè¡ãæ¹æ³ãã¯ãªãŒã³ã§çã«ããªã£ãŠãããšããŠãïŒèšèªãç¥ã£ãŠããå ŽåïŒããããè¡ãããã®éåžžã®æ°åŠè¡šèšã«æããã«å¯Ÿå¿ããŠããªãå¯èœæ§ãããããšã§ãã ãããŠãã¡ãããäžè¬æ§ã®ããã«ãã³ãŒããã©ã®ããã«å®è¡ãããããç¥ãããšã¯å°é£ã§ãã
scmutilsïŒæ©èœåæã®å Žåãããã¯ã¯ãªãŒã³ã§äžè¬çã§ãããäžèšã®ããããã§æãæ°åŠçã«çŽæçãªæäœïŒæžã蟌ã¿ãšèªã¿åãã®äž¡æ¹ïŒãæäŸããŸãã ã¢ãã/ããŠã³ã¿ãã«ã®ã¢ã€ãã¢ã¯ãå®éã«ã¯ã転眮èšå·ã埮åèŠåãããã³ãã®ä»ã®åæšæºåãããæŠå¿µã䜿çšããŠãæžãããæ°åŠã§äººã ãããè¡ãããšã®ãããäžè²«æ§ã®ãããããäžè¬çãªæ¡åŒµã§ãã ãããããã¹ãŠãããŸããããŸãã ïŒå士è«æãæžãããã«ãç§ã¯åŸæ¥ã®æ°åŠè¡šèšã«äŒŒãŠããããSussmanïŒWisdomã®SICMæ§æãšååã§ããäžè²«æ§ã®ããæ確ãªè¡šèšãéçºããããšã«ãªããŸãããïŒåœŒãã¯ãŸããå·®åãžãªã¡ããªã®å®è£ [1]ã«ã䜿çšããŸããã SymPyãžã®ç§»æ€ã«åœ±é¿ãäžããŸãã[2]ã ç§ã¯ãããããŒã¿åæã«äœ¿çšããŠããŸãããã1çš®é¡ã®ã¿ãã«ïŒMathematicaã®ãªã¹ããªã©ïŒã ããå¿ èŠãªäžè¬çãªé åã³ã³ããã¹ãã§ã¯ãæ £äŸã«ãã1ã€ïŒãäžãïŒãéžæã§ãããšæããŸãã ç¹°ãè¿ãã«ãªããŸãããäžè¬æ§ã¯ããã°ã©ããŒã®ããã©ãŒãã³ã¹ã«é¢ããèæ ®äºé ããããŸãã«ããŸããããããJuliaãåªããŠããé åã§ããããšãé¡ã£ãŠããŸãã
æŠèŠ
ææ¡ããã転眮ãã¯ãã«ã¿ã€ãã¯ãscmutilsã®ããäžè¬çãªãããŠã³ãã¿ãã«ãšããŠç¹åŸŽä»ããããã¹ãã ãšæããŸãããéåžžã®ãã¯ãã«ã¯ãã¢ãããã¿ãã«ã«ãªããŸãã ããããããã¯ãã«ããã転眮ãã¯ãã«ãã®ãããªãã®ãšåŒã¶ããšã¯ããããããäžãããäžããšåŒã¶ããããããã人ã ã«ãšã£ãŠæå³ããããŸãïŒç°¡æœããç ç²ã«ããŠïŒã ããã¯ã次ã®3ã€ã®äœ¿çšã«ããŽãªããµããŒãããŸãã
ïŒ1ïŒããŒã¿åæã®å Žåããã¹ããããé
åã ããå¿
èŠãªå Žåã¯ãããã¯ãã«ãã®ã¿ãå¿
èŠã§ãã
ïŒ2ïŒåºæ¬çãªè¡å-ãã¯ãã«ç·åœ¢ä»£æ°ã®å Žåã人ã
ã¯æ°åŠçãªæ
£ç¿ã«çŽæ¥å¯Ÿå¿ããŠããã¯ãã«ããšã転眮ãã¯ãã«ãã䜿çšã§ããŸãïŒãè¡åãã¯ããã¯ãã«ãã®ã転眮ãã¯ãã«ããšåçã§ãïŒã
ïŒ3ïŒé«æ¬¡ã®ãã³ãœã«æŒç®ïŒæšæºåãå°ãªãããšã«ãã人ã
ãéåžžèããå¿
èŠãããå ŽåïŒã®å Žåãå®è£
ã¯2çš®é¡ã®ã¿ãã«ç®è¡ã·ã¹ãã ã®å®å
šãªäžè¬æ§ããµããŒãããå¿
èŠããããŸãã
ãã®ã¢ãããŒãã¯ã以åã®æçš¿ã§ãšã©ãŒãšèŠãªãããã±ãŒã¹ïŒ v'
ããã³v*A
ïŒãå®éã«æå³ã®ããïŒãããŠå€ãã®å Žåæçšã§ããïŒããšãé€ããŠãããŸããŸãªæäœã®çµæã«é¢ããäžèšã®æ°ããªã³ã³ã»ã³ãµã¹ãåæ ããŠãããšæããŸãïŒ çµæã
[1] http://dspace.mit.edu/handle/1721.1/30520
[2] http://krastanov.wordpress.com/diff-geometry-in-python/
@thomasmcoffeeã¯ãå ±å€ãã¯ãã«ãšåå€ãã¯ãã«ãæ確ã«åºå¥ããããšãæå±ããŠããããã«èãããŸãã
ç§ã¯ãããäžè¬çãªã¢ããªã±ãŒã·ã§ã³ãšèããŸãããç§ãæå±ããŠããããšã«é床ã«åºæã§ããç§ã«ãšã£ãŠãããã¯ïŒåº§æšè¡šçŸã®ããã®ïŒé·æ¹åœ¢ã®æ°ã®ãã³ãœã«ãžã®å¶éãæå³ãã幟äœåŠçãªæå³ãæã£ãŠããŸãã ïŒãã®åéã®å°éç¥èããªããŠãïŒæšæºé åã䜿çšãããã³ãœã«ä»£æ°é¢æ°ã®é©åãªã©ã€ãã©ãªãéåžžãã®ç®çã«ã¯ååã§ãããšæ³åããã®ã§ãããã ãã§ã¯2çš®é¡ã®ã·ã¹ãã ãå°å ¥ããã®ã«ååãªèª¬åŸåããªããšããAlanã®ææã«å ±æããŸããã³ã¢èšèªã
ç§ã¯äž»ã«ãããäžè¬çãªãã¹ããããæ§é ã«äŸåããä»ã®ã¢ããªã±ãŒã·ã§ã³ãèããŠããŸããããšãã°ãæ··å次å ã®è€æ°ã®åŒæ°ã®é¢æ°ã®èšç®ã¯ãã³ã¢èšèªããµããŒããããŠããªãå ŽåãåŸã§ãã¢ããªã³ããšããŠéçºããã®ãããå°é£ã«ãªããŸãããã®åºå¥ã ãã¶ãç§ãã¡ã¯åãããšãæå³ããŸãã
ã¢ãããã¯ãã«ãšããŠã³ãã¯ãã«ã®åé¡ã¯ãã¢ã€ãã¢ãäžè¬çãªé åã«æ¡åŒµããå¿ èŠãããããšã§ãã ããããªããšããã¯ãã«ã¯ãé åã®1次å ã®å Žåã§ã¯ãªããç¹å¥ãªãã®ã«ãªããé åãšã¯å¥ã®ãã®ã«ãªããã²ã©ãåé¡ã®æ··ä¹±ã«ã€ãªãããŸãã ç§ã¯ãããè¡ãæ¹æ³ã«ã€ããŠå€ãã®ããšãèããŸããããåãå ¥ãããããã®ãæãã€ããŸããã§ããã äžäžã®ãã¯ãã«ãé åã«æ£ããäžè¬åããæ¹æ³ã«ã€ããŠè¯ãã¢ã€ãã¢ãããã°ããã²èããŠã¿ãŠãã ããã
ãã®èããæšå®ããããšããŠããã ãã§ãã ç§ãç解ããŠããããã«ãé åã䜿çšããŠäžäžã®ãã¯ãã«ã§èšç®ããã«ã¯ã次å ããšã«ãããäžãäžãã瀺ãå¿ èŠããããŸãã äžè¬ã«ãããã¯é åã次ã®ãããªãã®ã§ã©ããããããšã§å®çŸã§ããŸãã
immutable UpDownTensor{T, N, UPMASK} <: AbstractArray{T, N}
A::AbstractArray{T, N}
end
ããã§ã UPMASK
ã¯ãã©ã®æ¬¡å
ãäžã«ãããã瀺ãããããã¹ã¯ã«ãªããŸãã 次ã«ãã©ãããããŠããªãé
åã«å¯Ÿããæäœã¯ãããã©ã«ãã®UPMASK
ãN
é¢æ°ãšããŠæäŸããããšã§å®è£
ã§ããŸãããã¯ãã«ã¯ããã©ã«ãã§ã·ã³ã°ã«ã¢ãããè¡åã¯æåã®ã¢ãããš2çªç®ã®ããŠã³ã«ãªããŸãã ãããªãããããã©ã®ããã«åççã«ç¶ç¶ãããã®ãããããŸããã
ããã€ãã®ã©ã³ãã ãªèãïŒ
ãŸããããã¯ç¢ºãã«Transposed
ã¿ã€ãã®1ã€ã®äžè¬åã§ããã確ãã«ããã€ãã®ã¡ãªããããããŸãã ãããå®è¡å¯èœãã©ããããããªãã
Toivoã®ææ¡ã¯ãç§ãäžã§æå±ããŠããããšã®åççãªå®çŸã ãšæããŸãã ç§ã«ãšã£ãŠãæãè³¢æãªããã©ã«ãã¯ãé«æ¬¡ã§æ¹åã亀äºã«ç¹°ãè¿ãããšã§ããããšãã°ã誰ããã¹ãçŽæ°ã®ã³ã³ããŒãã³ããã©ãããããŠããªãé åãšããŠæäŸããå Žåãããã¯æ£ããããšãè¡ããŸãã
ããããããã«èããŠã¿ããšãïŒ1ïŒäžäžã®ãã¯ãã«ã®éããšïŒ2ïŒé åãšãã¯ãã«ã®éãã®äž¡æ¹ã®ã¢ã€ãã¢ãçµã¿åãããããšãéåžžã«åŒ·åã§ãããšæããŸãã 次ã«ãããã€ãã®æ¬¡å ãäžãããã€ããäžãããã€ãããäžç«ãã§ãããªããžã§ã¯ããæã€ããšãã§ããŸãã é åãšãã¯ãã«ãåºå¥ããçç±ã¯ãæå³çã«ã¯ãé åã¯ç·šæïŒåãçš®é¡ã®è€æ°ã®ãã®ãåéããïŒçšã§ããã®ã«å¯Ÿãããã¯ãã«ã¯èª¿æŽïŒå€æ¬¡å 空éãè¡šãïŒçšã§ããããã§ãã 1ã€ã®ãªããžã§ã¯ãã§äž¡æ¹ã®åºå¥ãçµã¿åãããããšãã§ããã®ã¯ããããã®äž¡æ¹ã®ç®çãåæã«æããããšãã§ãããšããããšã§ãã ãã¥ãŒãã©ã«ãã£ã¡ã³ã·ã§ã³ã¯ãããŒããã£ã¹ãã«ãŒã«ã«åŸã£ãŠåŠçãããã¢ãã/ããŠã³ãã£ã¡ã³ã·ã§ã³ã¯ãã³ãœã«ç®è¡ã«ãŒã«ã«åŸã£ãŠåŠçãããŸãã
ç§ã®ä»¥åã®äŸã«æ»ã£ãŠãããŸããŸãªãã¯ãã«y1, y2, ...
ã«å¯ŸããŠããã€ãã®2次圢åŒx'Q*y1, x'Q*y2, ...
ãèšç®ããŠãããšä»®å®ããŸãã SICMã«ç¶ããŠãäžã¿ãã«ïŒåãã¯ãã«ïŒã(...)
ãäžã¿ãã«ïŒè¡ãã¯ãã«ïŒã[...]
ãŸãã ãããäžåºŠã«å®è¡ãããããã¢ãã/ããŠã³ã®ã¿ã§ç«ã¡åŸçããŠããå ŽåãåŸæ¥ã®æ¹æ³ã¯ãããŠã³ã¿ãã«ã䜿çšããŠyi
ããããªãã¯ã¹Y = [y1, y2, ...]
ã«çµåããããšã§ããã¢ããã¿ãã«ïŒã r = x'Q*Y
ãèšç®ããŸããããã«ãããããŠã³ã¿ãã«r
ã®çµæãåŸãããŸãã ãããããããã®åçµæã«ïŒåïŒãã¯ãã«v
ãæãããå Žåã¯ã©ãã§ããããïŒ çž®çŽïŒå
ç©ïŒãçºçããããã r*v
ã ããå®è¡ããããšã¯ã§ããŸããã r
ãã¢ããã¿ãã«ã«å€æããŠããä¹ç®ãããšãïŒã¢ããã¿ãã«ã®ïŒã¢ããã¿ãã«ã§çµæãåŸãããŸãã ãããã次ã®ã¹ãããã§ããŠã³ã¿ãã«ãå¿
èŠã ãšããŸãããã æå³çã«ã¯ãèšç®ãééãã次å
ããããããã¯åžžã«ãããŒããã£ã¹ãããããã®ã®ã³ã¬ã¯ã·ã§ã³ãè¡šãã ãã§ãã ããããå³å¯ã«ã¢ãã/ããŠã³ã®äžçã§ãããéæããã«ã¯ãé©åãªåäœãåŒãåºãããã«ãä»»æã®ã³ã³ããã¹ãäŸåã®å€æãå®è¡ãç¶ããå¿
èŠããããŸãã
察ç
§çã«ã {...}
ã§ç€ºããããã¥ãŒãã©ã«ã¿ãã«ïŒé
åïŒããããšããŸãã 次ã«ã ys = {y1, y2, ...}
ãïŒã¢ããã¿ãã«ã®ïŒé
åãšããŠèªç¶ã«èšè¿°ããŸãããããã£ãŠã r = x'Q*ys
ã¯é
åã§ããã r*v
ãïŒã¢ããã¿ãã«ã®ïŒé
åã§ãã ãã¹ãŠãçã«ããªã£ãŠãããä»»æã®å€æã¯å¿
èŠãããŸããã
Stefanã¯ã1次å é åãäžäžã®ãã¯ãã«ããåºå¥ããããšã¯æ²æšã§ãããšç€ºåããŠããŸããããã®åé¡ã¯ãã»ãšãã©ã®é¢æ°ãé åã®ãã¯ãã«ãŸãã¯ã©ã¡ãã§ãåäœããªããšããäºå®ã«ãã£ãŠè§£æ±ºããããšæããŸãã ïŒãŸãã¯ãè¡åã®å Žå_ãŸãã¯_ãã¯ãã«ã®é åã®å Žå_ãŸãã¯_é åã®ãã¯ãã«ã®å Žå_ãŸãã¯_é åã®é åã®å Žå_ãŸãã¯_ã§ã¯ãããŸãããã_ã©ã¡ãã_ã§ã¯ãããŸãããèªåçã«æ£ããããšã å€å誰ããã§ããŸããïŒ
æ·±ã調ã¹ãŠã¿ããš[1]ãscmutilsãå®éã«ããã¯ãã«ããšåŒã°ãããã®ãå éšã®äžäžã®ã¿ãã«ãšåºå¥ããŠããããšãããããŸããã ãã ããçŸåšãå€æã«ãŒã«ã¯ããããã®ããã¯ãã«ããã¢ãã/ããŠã³ã®äžçã«å ¥ããã³ã«ïŒä»¥åã«ææ¡ããããã«ïŒã¢ããã¿ãã«ã«ããããããããã«èšå®ãããŠããŸãããã ããããã®å®è£ ãå€æŽããŠåºå¥ããæš©å©ãçä¿ããŸããã¢ããã¿ãã«ããã®ã¹ããŒã ãã¯ãã«ãã ïŒããããããã£ã³ãã¹ã®èª°ããGJSã«ç¹å®ã®ã¢ã€ãã¢ãèããŠãããã©ããå°ããããšãã§ããŸããïŒSageã·ã¹ãã [2]ã¯ãé åã®åŠçããã¯ãã«ãšè¡åãã倧ããåé¢ãïŒçŸåšããã³ãœã«ã®ã³ã¢ãµããŒãã¯ãããŸããïŒãç§ãçµéšããå¯äžã®åé¡ã§ããããã¯ãæããã«çã«ããªã£ãŠããå Žåã«ããããã®éã«çµã¿èŸŒã¿ã®å€æããªãããšãšé¢ä¿ããããŸãã
[1] http://groups.csail.mit.edu/mac/users/gjs/6946/refman.txt--- ãæ§é åãªããžã§ã¯ããããéå§
[2] http://www.sagemath.org/
ç§ã¯æŒé£ã®åžã§ãŸãããã圌ã¯JuliaããŒã ãç·åœ¢ä»£æ°æŒç®ãããé«æ¬¡å ã®é åã«äžè¬åããæ¹æ³ã
ãšããããã2ã€ã®ã¢ã¬ã€éã®ç©ã ããèããŠã¿ãŸãããã ä»ã®æäœã«ãåæ§ã®äžè¬åããããŸãã é
åãæ±ããšãã«æãäžè¬çãª3ã€ã®ã¿ã€ãã®ç©ã¯ãå€ç©ãå
ç©ãããã³èŠçŽ ããšã®ç©ã§ãã ç§ãã¡ã¯éåžžã inner(A,B)
ãA*B
ãªã©ã®2ã€ã®ãªããžã§ã¯ãéã§ãã®ãããªæäœãè¡ãããšãèããŠããŸãã ãã ãããããã®æäœãé«æ¬¡å
ã®é
åã§å®è¡ããå Žåãé
åå
šäœã§ã¯ãªããé
åã®ç¹å®ã®æ¬¡å
éã§å®è¡ãããŸãã è€æ°ã®å€éš/å
éš/èŠçŽ ããšã®ãµãæäœã2ã€ã®é
åéã®åäžã®æäœã§çºçããåé
åã®å次å
ãæ£ç¢ºã«1ã€ã®ãµãæäœã«å²ãåœãŠãå¿
èŠããããŸãïŒæ瀺çãŸãã¯ããã©ã«ãã®ããããïŒã å
åŽã®è£œåãšèŠçŽ ããšã®è£œåã®å Žåãå·ŠåŽã®1ã€ã®ãã£ã¡ã³ã·ã§ã³ããå³åŽã®åããµã€ãºã®ãã£ã¡ã³ã·ã§ã³ãšãã¢ã«ããå¿
èŠããããŸãã 補åã®å€åŽã®å¯žæ³ããã¢ã«ããå¿
èŠã¯ãããŸããã ã»ãšãã©ã®å ŽåããŠãŒã¶ãŒã¯ã次å
ã®ãã¢ãšä»ã®ãã¹ãŠã®å€ç©ã®éã§å
ç©ãŸãã¯èŠçŽ ããšã®ç©ãå®è¡ããŠããŸãã å€ç©ã¯æãäžè¬çã§ããããã¢ã«ããå¿
èŠããªããããé©åãªããã©ã«ãã«ãªããŸãã
ç§ã¯éåžžãããããã®xãyãz軞ã®ããã«ã次å
ãé åºä»ãã§ã¯ãªãååä»ããšèããŠããŸãã ããªãã¯ããŠãŒã¶ãŒãå®éã«æ³šæããã€ã³ããã¯ã¹ïŒçã«ãã£ãŠé
åã«ã¢ã¯ã»ã¹ã§ããããã«ãããå Žåã§ãã A[1,2,5]
ã§ã¯ãªãA[a1=1, a3=5, a2=2]
ïŒããªãã¯ãæäœã®çµæã泚æããäžè²«æ§ã®ããæç¶ããæã£ãŠããå¿
èŠããããŸãã æåã®é
åã®ãã¹ãŠã®æ¬¡å
ããªã¹ããã次ã«2çªç®ã®é
åã®ãã¹ãŠã®æ¬¡å
ããªã¹ãããããšã«ãã£ãŠçµæãé åºä»ããããšãææ¡ããŸãã å
ç©ã«åå ãã次å
ã¯ãã¹ãŠçµãåºãããèŠçŽ ããšã®ç©ã«åå ãã次å
ã®å Žåã2çªç®ã®é
åã®æ¬¡å
ã®ã¿ãçµãåºãããŸãã
ããã«ã€ããŠããã€ãã®è¡šèšæ³ãäœæããŸãã ãæ°è»œã«ãžã¥ãªã¢ãã£ããŠãã ããã A
a1
x a2
x a3
ã®é
åãšãã B
b1
é
åãšããŸãã b2
ã array_product(A, B, inner=[2, 1], elementwise=[3, 2])
ã次å
a2
ãšb1
éã®å
ç©ã a3
ãšb2
éã®èŠçŽ ããšã®ç©ãããã³a1
å€ç©ã çµæã¯ã a1
x a3
é
åã«ãªããŸãã
é«æ¬¡å ã®é åã®ã³ã³ããã¹ãã§ã¯ã2é æŒç®åãŸãã¯åé æŒç®åãããŸãæå³ãæããªãããšã¯æããã§ãã åãã£ã¡ã³ã·ã§ã³ãã©ãåŠçããããæå®ããã«ã¯ã3ã€ä»¥äžã®åŒæ°ãå¿ èŠã§ãã ãã ããMatlabæŒç®åãæåã®2次å ã®ã¿ã®é åæŒç®ã®çç¥åœ¢ã«ããããšã§ãç·åœ¢ä»£æ°ã®å®¹æããåãæ»ãããšãã§ããŸãã
Matlabã®A*B
ã¯array_product(A, B, inner=[2,1])
ã§ãã
Matlabã®A.'
ã¯permute(A, B, [2,1])
ã§ãããpermuteã¯3çªç®ã®åŒæ°ã®æ°ãããé«ããã¹ãŠã®æ¬¡å
ãå€æŽããã«ä¿æããŸãã
Mathematicaããã¯ãã«è»¢çœ®ã§è¡ãããã«ãé åã®æ¬¡å ã2ãã倧ããå ŽåããŸãã¯2ã«çãããªãå Žåã§ãããšã©ãŒãã¹ããŒãããã©ãããéžæã§ããŸãã äžè¬çãªé åèšç®ã®ã¿ã䜿çšããŠããå Žåã¯ã @ wenxgwenã®ææ¡@ wenxgwenã®ææ¡ã奜ãã§ãã
é åèšç®ã®é£éåŸãšç©ã®æ³åã«å ããŠãå ç®ãã¹ãä¹ã埮åãå«ããã·ã¹ãã ã®ãã
èŠç¹ãããããšãïŒ ããã¯ãäžè¬çãªé å*é å補åãå®éã«ã©ã®ãããªç£ã§ããããç解ããã®ã«éåžžã«åçºçã§ããããšãããããŸããã
å€æ¬¡å é åä¹ç®ã®ææ¡ãã PEP0465ã®è¡åä¹ç®æŒç®åã«å¯ŸããŠææ¡ãããã»ãã³ãã£ã¯ã¹ãšçžäºåç §ããããšã¯èå³æ·±ããããããŸããã ç¹ã«ïŒ
1dãã¯ãã«å ¥åã¯ã圢ç¶ã«ã1ããè¿œå ãŸãã¯è¿œå ããããšã«ãã£ãŠ2dã«ããã¢ãŒããããæäœãå®è¡ãããŠãããè¿œå ããã次å ãåºåããåé€ãããŸãã 1ã¯ãåžžã«åœ¢ç¶ã®ãå€åŽãã«è¿œå ãããŸããå·Šã®åŒæ°ã®åã«è¿œå ãããå³ã®åŒæ°ã®å Žåã«è¿œå ãããŸãã ãã®çµæãmatrix @vectorãšvector @ matrixã¯ã©ã¡ããæ£åœã§ããïŒäºææ§ã®ãã圢ç¶ãæ³å®ïŒãã©ã¡ãã1dãã¯ãã«ãè¿ããŸãã vector @ vectorã¯ã¹ã«ã©ãŒãè¿ããŸã... 1dãã¯ãã«ã®ãã®å®çŸ©ã®æ¬ ç¹ã¯ã@ãéçµåã«ãªãå Žåãããããšã§ãïŒïŒMat1 @ vecïŒ@ Mat2ïŒ= Mat1 @ïŒvec @ Mat2ïŒïŒã ããããããã¯å®çšæ§ãçŽç²ããæã¡è² ããå Žåã®ããã§ã
Pythonã§ã®ãããã³ã°å
¥åã¯ãç¹å¥ãªåé¡ãåŒãèµ·ãããŸãã åœç¶ãé
åãšè¡åã¯äº€æå¯èœã§ããå¿
èŠããããŸãïŒåãåºã«ãªãããŒã¿ïŒã ãã ããPythonã¯åã®ãã§ãã¯ãæšå¥šããªããããé
åãæåŸ
ããé¢æ°ã®å
é ã§è¡åãæ£ããã€ã³ã¿ãŒãã§ã€ã¹ã«ãã£ã¹ããããŸããããã®éãåæ§ã§ãã ããããç°ãªãæŒç®åæåãå¿
èŠãªçç±ã§ãã ã©ã³ã¿ã€ã åãã§ãã¯ãšconvert
ã¡ãœããã䜿çšããJuliaã¯ããã®ãããŸããã®åœ±é¿ãåããŸããã
PEP 0465ããïŒ
1Dãã¯ãã«ã«å¯Ÿãããã®å®çŸ©ã®æ¬ ç¹ã¯ã@ãéçµåã«ãªãå Žåãããããšã§ãïŒïŒMat1 @ vecïŒ@ Mat2ïŒ= Mat1 @ïŒvec @ Mat2ïŒïŒ
ç¹ã«ããã®çš®ã®å®çŸ©ã¯Mathematicaã§èª€ã£ãçµæãçæããå¯èœæ§ããããŸããããã¯ã Dot
ïŒ .
ïŒãã·ã³ããªãã¯ã«è©äŸ¡ããããšãã«çµåæ³åïŒ Flat
ïŒã§ãããšèŠãªãããããã§ãïŒ f
ãšåæ§ïŒã以äžã®g
ã¯ãããŸããïŒïŒ
In[1]:= f=X.(y.Z);
g:=X.(y.Z)
In[3]:= Block[{
X=Array[a,{2,2}],
y=Array[b,2],
Z=Array[c,{2,2}]
},{f,g}]
Out[3]= {{(a[1,1] b[1]+a[1,2] b[2]) c[1,1]+(a[2,1] b[1]+a[2,2] b[2]) c[2,1],(a[1,1] b[1]+a[1,2] b[2]) c[1,2]+(a[2,1] b[1]+a[2,2] b[2]) c[2,2]},{a[1,1] (b[1] c[1,1]+b[2] c[2,1])+a[1,2] (b[1] c[1,2]+b[2] c[2,2]),a[2,1] (b[1] c[1,1]+b[2] c[2,1])+a[2,2] (b[1] c[1,2]+b[2] c[2,2])}}
In[4]:= SameQ@@Expand[%]
Out[4]= False
@drhagenããïŒ
ã©ã³ã¿ã€ã åãã§ãã¯ãš
convert
ã¡ãœããã䜿çšããJuliaã¯ããã®ãããŸããã®åœ±é¿ãåããŸããã
ããããJuliaã®æ£ãã解決çããããŒã¿èªäœã«é åã®ãããªã»ãã³ãã£ã¯ã¹ïŒãŠãããŒãµã«ãããŒããã£ã¹ãã®å ŽåïŒãšãã³ãœã«ã®ãããªã»ãã³ãã£ã¯ã¹ïŒå¯èœãªåçž®ã®å ŽåïŒãåºå¥ãããã¹ãã ãšæããçç±ã§ãã
ç§ã¯ããã§ã¯æ±ºããŠæš©åšã§ã¯ãããŸããããäžè¬çãªä»»æ次å
ã®ã³ã¬ã¯ã·ã§ã³åïŒ Array
ïŒããããç©ãè¡ãæŒç®åããµããŒãããå¿
èŠããããšã¯æããŸããã ãããç©ã¯ä»»æã®2次å
ã®éã«ããå¯èœæ§ããããäºé
æŒç®åã«æäŸã§ããªãè¿œå ã®åŒæ°ãå¿
èŠã«ãªãããããã®æŒç®åããã®ã¿ã€ãã«å¯ŸããŠé©åã«å®çŸ©ããããšã¯ã§ããŸããã åãããšããã¹ãŠã®ç·åœ¢ä»£æ°æŒç®ã inv
ã transpose
ãªã©ã«ãåœãŠã¯ãŸããŸãã
ç·åœ¢ä»£æ°ã®æ°åŠåéã§æäœããã«ã¯ãããã«3ã€ã®ã¿ã€ãã Matrix
ã ColumnVector
ãããã³RowVector
ãå¿
èŠã§ãããããã®ã¿ã€ãã«ã¯ããã¹ãŠã®éåžžã®ç·åœ¢ä»£æ°ã®æŒç®åãšé¢æ°ããããŸããéåžžã©ããã«æ©èœããŸãã
åæ§é ãé©åã«å®çŸ©ãããã®ã§ã Matrix
ããArray{2}
ã ColumnVector
ããArray{1}
ãžã®æé»çãªå€æãè¿œå ããããšã§ããŠãŒã¶ãŒãç°¡åã«å€æã§ããããã«ãªããŸããããã³RowVector
ããArray{2}
ïŒããã«ã€ããŠã¯äžæïŒã Array{2}
ããMatrix
ãããã³Array{1}
ããColumnVector
ã
äžèšã®ç§ã®ææ¡ïŒhttps://github.com/JuliaLang/julia/issues/4774#issuecomment-32705055ïŒã§ã¯ãå€æ¬¡å æ§é ã®å次å ã§ããã¥ãŒãã©ã«ïŒ "collection" / "array"ïŒãã¢ããïŒ " column "ïŒããŸãã¯downïŒ" row "ïŒã»ãã³ãã£ã¯ã¹ã ããªãã説æããŠããã®ã¯ç¹å¥ãªå Žåã ãšæããŸãã
ãã®äžè¬çãªã¢ãããŒãã®å©ç¹ã¯ãããŒã¿ãŸãã¯ç©ºéã®å€ãã®æ¬¡å ã䜿çšããèšç®ã§ããæäœãã次å ãæ瀺çã«æå®ããªããŠãããªãã¬ãŒã¿ãŒã«æ£ããããšãå®è¡ãããããšãã§ããããšã§ãã å°ãªããšãJuliaã§ã¯ããã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ãåŒã³åºããŠãã¹ãŠã®æäœã®æå³ãæå®ããããããã¿ã€ããã©ã¡ãŒã¿ãéžæããŠå ¥åããŒã¿ã®æå³ãäžåºŠæå®ããæ¹ãã¯ããã«çŽæçã§èªã¿ãããããšã«åæãããšæããŸãã次å ã€ã³ããã¯ã¹ãäžããè¿œå ã®åŒæ°ã æå³ãç°åžžãªæ¹æ³ã§éäžã§å€æŽããå¿ èŠãããå Žåã§ããå®å šãªæ¬¡å ã®äžè¬æ§ã䜿çšããŠãæé»çãŸãã¯æ瀺çãªå€æã䜿çšã§ããŸãã
@thomasmcoffeeç§ã¯ããªãã®ææ¡ããšãŠã奜ãã§ãã ç§ã¯DSLã§æŒ ç¶ãšäŒŒããããªãã®ãïŒãã£ãšåã«ãé ãé¢ããŠïŒããã€ãã®æéïŒå¥åå人çãªæèŠïŒã§å®è£ ããŸããïŒ
åœæç§ãåŸãæ倧ã®äžæºïŒãããŠåœŒãã¯å€§å£°ã§ããïŒã¯ããŸãã«ããªãã®äžäŸ¡ã®ã»ãã³ãã£ã¯ã¹ïŒãã¥ãŒãã©ã«ãªã³ã¬ã¯ã·ã§ã³ã®æŠå¿µãè¿œå ããïŒã解決ããçš®é¡ã®äžäŸ¿ã«ã€ããŠã§ããã ãããïŒ ãã®èãã¯ç§ã«ã¯æãããããªãã£ãããããªãããããããã«åºãããã«ãªã£ãä»ãéåžžã«çã«ããªã£ãŠããã æ¬åœã«ããããã·ã¹ãã ã䜿ãããã®ã§ãããå®éã®ä»äºãæå³ããŸãã ãžã¥ãªã¢ãããã«å¯Ÿå¿ã§ãããããã®ã«ïŒ
ããªããã¡ã説æããŠããããã«èŠããã®ã¯ãéåžžã®ãã³ãœã«ã§ãã ä»ã®2ã€ã®ãŠãŒã¹ã±ãŒã¹ïŒã³ã¬ã¯ã·ã§ã³ãšç·åœ¢ä»£æ°ïŒãã¯ããã«äžè¬çã§ããããããããæšæºã©ã€ãã©ãªã«ããããšãæ£åœåããã®ã«ååãªäžè¬çãªãŠãŒã¹ã±ãŒã¹ã§ãããšã¯æããŸããã ãã ããã·ãŒã ã¬ã¹ã«çµ±åã§ããã°ãµããŒãããŸãã ãã¯ãã«è¡åã®ä¹ç®ãã¹ã«ã©ãŒé åã®ä¹ç®ã1ã€ã®é åã®è¿œå ãé åã®é åã«åæ£ãããªã©ããã®ã·ã¹ãã ã§äžè¬çãªæäœãã©ã®ããã«èŠãããã®äŸãããã€ãæããŠãã ããã
ããªãã¯æ£ãããšæããŸãã ç§ãã¡ã¯å®éã«2ã€ã®ãŠãŒã¹ã±ãŒã¹ã«ã€ããŠè©±ããŠããã
ç·åœ¢ä»£æ°ã®ãµãã»ããã¯ãã»ãšãã©ã®äººãããªããšããŠæãäžè¬çã«å¿
èŠãšããŠããŸã
ããã ããã§ããvãšv 'ã®åºå¥ãç¶æããããšãæå±ããŠããŸãã
ç§ãæ¬åœã«æãã§ããã®ã¯ïŒããã«è²ªæ¬²ã®é瀺ãæ¿å
¥ïŒã®ãã³ãœã«ã§ã
ãã¡ãŒã¹ãã¯ã©ã¹ïŒãŸãã¯ã¯ããŒãºïŒã¹ããŒã¿ã¹...ãã€ãã£ãé床ã«è¿ãïŒéå®çãªå Žåã
ç·åœ¢ä»£æ°ã®ããã©ãŒãã³ã¹ãšæ¯èŒããŠïŒæ§æãç°¡åã§ãäžæžããããŸãã
å
±å€æ§/åå€æ§ãããŒã¿ã«ãšã³ã³ãŒããããŠãããäžã«æŒãä»ããããŠããªãã¿ã€ãã³ã°ã®åé¡
ãªãã¬ãŒã¿ãŒã ããŒã¿ã»ãã³ãã£ã¯ã¹ãå®çŸ©ããããæäœã¯
ãã åãã ãã³ãœã«ããã¯ã¿ã€ãã³ã°ã
ããããããã³ãœã«ãšTDTã¯ãã³ã¢ã§ã¯ãªãããã±ãŒãžã«å±ããŠããŸãã
æ¯èŒç人æ°ã®ããçç±ã ãããããžã¥ãªã¢å®£èšã®ããã«
ç¬ç«ã¯èšãããžã¥ãªã¢ã¯è²ªæ¬²ããçãŸããŠããŸãã ãããŠãŽãŒãã³ã»ã²ãã³ãŒãèšãããã«ã
貪欲ã¯è¯ãã§ãã :)
2014幎3æ21æ¥åå3æ14åããDavidHagenã [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
ããªããã¡ã説æããŠããããã«èŠããã®ã¯ãéåžžã®ãã³ãœã«ã§ãã ç§ã¯ããã
æšæºã©ã€ãã©ãªã«ããããšãæ£åœåããã®ã«ååãªäžè¬çãªãŠãŒã¹ã±ãŒã¹
ä»ã®2ã€ã®ãŠãŒã¹ã±ãŒã¹ïŒã³ã¬ã¯ã·ã§ã³ãšç·åœ¢ä»£æ°ïŒã¯ã¯ããã«å€ã
äžè¬ã ãã ããã·ãŒã ã¬ã¹ã«çµ±åã§ããã°ãµããŒãããŸãã
ããã€ãã®äžè¬çãªæäœãã©ã®ããã«èŠãããã®äŸãããã€ãæããŠãã ãã
ãã®ã·ã¹ãã ã§ã¯ããã¯ãã«è¡åã®ä¹ç®ãã¹ã«ã©ãŒé åãªã©
ä¹ç®ã1ã€ã®é åã®å ç®ãã®é åã«åæ£
é åãªã©ïŒãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGi tHubhttpsïŒ//github.com/JuliaLang/julia/issues/4774#issuecomment-38262998ã§è¡šç€ºããŠãã ãã
ã
ååã«è±å¯ãªåæãããã°ãã·ãŒã ã¬ã¹ãªçµ±åã¯ééããªãéæã§ãããšæããŸãã äžèšã®Toivoã®https://github.com/JuliaLang/julia/issues/4774#issuecomment-32693110ãæ¡åŒµãããšãæŠå¿µçã«ã¯æ¬¡ã®ããã«éå§ãããå¯èœæ§ããããŸãã
immutable AbstractTensorArray{T, N, UPMASK, DOWNMASK} <: AbstractArray{T, N}
A::AbstractArray{T, N}
end
# where !any(UPMASK & DOWNMASK)
typealias AbstractColumnVector{T} AbstractTensorArray{T, 1, [true], [false]}
typealias AbstractRowVector{T} AbstractTensorArray{T, 1, [false], [true]}
typealias AbstractMatrix{T} AbstractTensorArray{T, 2, [false, true], [true, false]}
ïŒçŸåšã AbstractMatrix{T}
åã«AbstractArray{T, 2}
ãšã€ãªã¢ã¹ã§ããæœåšçã«ãããã§ã¯å¥ã®ååã䜿çšã§ããŸãïŒ
ããããã次ã®å®è£ ã¯è«ççã«èŠããŸãã
transpose
ã¡ãœããã¯ããã£ã¡ã³ã·ã§ã³ãšå¯Ÿå¿ããUPMASKããã³DOWNMASKã€ã³ããã¯ã¹ãåé
眮ããåŸãUPMASKãšDOWNMASKã亀æããŸãã ãã¥ãŒãã©ã«å¯žæ³ã¯åœ±é¿ãåããŸãããAbstractArray{T, N}
ãµãã¿ã€ãã¯éåžžããã³ãœã«æŒç®ã§ããã©ã«ãã§å¯Ÿå¿ãã亀äºã®AbstractTensorArray{T, N, [..., false, true, false, true], [..., true, false, true, false]}
ãµãã¿ã€ãã«å€æãããŸãã ããã«ããããã¯ãã«ãšè¡åã«å¯ŸããJuliaã®ç¹å¥ãªé
åæ§æã®æ¢åã®ã»ãã³ãã£ã¯ã¹ãä¿æãããŸããAbstractTensorArray
ã®ã³ã³ã¹ãã©ã¯ã¿ãŒã¡ãœããïŒããšãã°ã array
ïŒã¯ããã¥ãŒãã©ã«ãã£ã¡ã³ã·ã§ã³ãçæããããã«äœ¿çšãããä»ã®AbstractTensorArray
ïŒãŸãã¯ããã«å€æå¯èœãªã¿ã€ãïŒãçµã¿åãããŠãçµã¿åãããAbstractTensorArray
ãäœæã§ããŸãããã¥ãŒãã©ã«ãªãããã¬ãã«ã®ãã£ã¡ã³ã·ã§ã³ã§@drhagenã®äŸãæ€èšã
ãã¯ãã«è¡åã®ä¹ç®ãã¹ã«ã©ãŒé åã®ä¹ç®
c = 1 # Int
v = [1, 2] # Array{Int, 1}
M = [[1, 2] [3, 4]] # Array{Int, 2}
# scalar-array
c * M # UNCHANGED: *(Int, Array{Int, 2}) => Array{Int, 2}
# matrix-vector
M * v # *(Array{Int, 2}, Array{Int, 1}) => *(Matrix{Int}, ColumnVector{Int}) => ColumnVector{Int}
# vector-matrix
v' * M # transpose(Array{Int, 1}) => transpose(ColumnVector{Int}) => RowVector{Int}
# *(RowVector{Int}, Array{Int, 2}) => *(RowVector{Int}, Matrix{Int}) => RowVector{Int}
# (1-array)-(2-array)
v .* M # UNCHANGED: .*(Array{Int, 1}, Array{Int, 2}) => Array{Int, 2}
ïŒäžèšã®AbstractMatrix
å®çŸ©ã«å¯Ÿå¿ããå®çŸ©ã§Matrix
ã䜿çšïŒ
1ã€ã®é åã®è¿œå ãé åã®é åã«åæ£ãã
ããã¯ãæå³çã«ã¯ããã¯ãã«ã®é åã«1ã€ã®ãã¯ãã«ãè¿œå ããããšãè¡åã®é åã«1ã€ã®è¡åãè¿œå ããããšãªã©ãæå³ããŸãã
# vector-(vector-array)
ws = array([1, 2], [3, 4])
# TensorArray{Int, 2, [false, true], [false, false]}
v + ws # +(Array{Int, 1}, TensorArray{Int, 2, [false, true], [false, false]}) => +(ColumnVector{Int}, TensorArray{Int, 2, [false, true], [false, false]}) => TensorArray{Int, 2, [false, true], [false, false]}
# => array([2, 4], [4, 6])
# array-(vector-array)
u = array(1, 2) # TensorArray{Int, 1, [false], [false]}
u + ws # +(TensorArray{Int, 1, [false], [false]}, TensorArray{Int, 2, [false, true], [false, false]}) => TensorArray{Int, 2, [false, true], [false, false]}
# => array([2, 3], [5, 6])
# alternatively:
v .+ ws # .+(Array{Int, 1}, TensorArray{Int, 2, [false, true], [false, false]}) => TensorArray{Int, 2, [false, true], [false, false]}
# => array([2, 3], [5, 6])
# same effect, but meaning less clear:
v .+ M # UNCHANGED: .+(Array{Int, 1}, Array{Int, 2}) => Array{Int, 2}
# => [[2, 4] [4, 6]]
# matrix-(matrix-array)
Ns = array([[1, 2] [3, 4]], [[5, 6] [7, 8]])
# TensorArray{Int, 2, [false, false, true], [false, true, false]}
M + Ns # +(Array{Int, 2}, TensorArray{Int, 2, [false, false, true], [false, true, false]}) => +(Matrix{Int}, TensorArray{Int, 2, [false, false, true], [false, true, false]}) => TensorArray{Int, 2, [false, false, true], [false, true, false]}
# => array([[2, 4] [6, 8]], [[6, 8] [10, 12]])
ãã¯ãã«v
ãããã€ãã®ç°ãªã2次圢åŒx'M*w1, x'M*w2, ...
ã§ã¹ã±ãŒãªã³ã°ãã以åã®äŸãèããŠãæçµçµæx'M*w1*v, x'M*w2*v, ...
ïŒ
x = v
x' * M * ws * v # *(RowVector{Int}, Array{Int, 2}) => *(RowVector{Int}, Matrix{Int}) => RowVector{Int}
# *(RowVector{Int}, TensorArray{Int, 2, [false, true], [false, false]}) => TensorArray{Int, 1, [false], [false]}
# *(TensorArray{Int, 1, [false], [false]}, Array{Int, 1}) => *(TensorArray{Int, 1, [false], [false]}, ColumnVector{Int}) => TensorArray{Int, 1, [false, true], [false, false]}
# => array([27, 54], [59, 118])
ãã®æŠå¿µçãªå®è£
ã§ã¯ã AbstractArray
ã¯ãã®ãŸãŸã«ããŠãããšæ³å®ããŠããããã AbstractTensorArray
ã¯åéå±€å
ã«ç¬èªã®ãã¹ããŒã¹ãã圢æããŸãã AbstractArray
ãã¡ããªãŒå
šäœãåã«AbstractTensorArray
ã«çœ®ãæããããå Žåãç¶æ³ã¯åçŽåãããå¯èœæ§ããããŸãããããã¯å¥ã®è°è«ã§ãã
éåç©çåŠã®äœãã®ããã±ãŒãžã®ã³ã³ããã¹ãã§ã¯ãç§ã¯èªåã®ãã³ãœã«åïŒå®éã«ã¯è€æ°ïŒãå®çŸ©ããããšã§éãã§ããŸãã æåã¯ãã€ã³ããã¯ã¹ã2ã€ã®ãã¬ãŒããŒïŒã¢ãããšããŠã³ãçä¿¡ãšçºä¿¡ãå ±å€ãšåå€ããã ãããããåŒã³åºãããïŒã§æäŸããããšããæŠå¿µããããŸããããã®æ å ±ã¯ãã¿ã€ãã®ãã£ãŒã«ããŸãã¯ã¿ã€ããã©ã¡ãŒã¿ã ãã°ããããŠãããã¯éåžžã«é¢åã ãšæããŸããã ãã³ãœã«ã®ã€ã³ããã¯ã¹ããã¯ãã«ç©ºéïŒãšã«ãããã§ã«è¡ã£ãŠããïŒã«é¢é£ä»ããã ãã§ããã®ãã¯ãã«ç©ºéã«ç°ãªããã¥ã¢ã«ãæãããæ¹ãã¯ããã«ç°¡åã§ãã å®éã«ã¯ããã¯ãã«ç©ºéãšã¯ã空éã®æ¬¡å ãšããããã¥ã¢ã«ã§ãããã©ãããã©ããããåçŽãªãžã¥ãªã¢åãæå³ããŸãã ãã³ãœã«ã€ã³ããã¯ã¹ãæ³ç·ãã¯ãã«ç©ºéã«é¢é£ä»ããããŠããå Žåã¯ã¢ããã€ã³ããã¯ã¹ã§ããããã¥ã¢ã«ã€ã³ããã¯ã¹ã«é¢é£ä»ããããŠããå Žåã¯ããŠã³ã€ã³ããã¯ã¹ã§ãã åºå¥ã®ãªããã³ãœã«/é åã䜿çšãããå Žåã¯ãéåžžã®ãã¯ãã«ç©ºéãšãã®ãã¥ã¢ã«ãåºå¥ããªãå¥ã®ãã¯ãã«ç©ºéã¿ã€ããå®çŸ©ããã ãã§ãã
ãã®ææ¡ã§ã¯ãäºãã«äºéã§ãããã¯ãã«ç©ºéã«é¢é£ä»ããããŠãããã³ãœã«ã€ã³ããã¯ã¹ã®ã¿ãçž®å°ã§ããŸãã ctransposeïŒ=ãšã«ããŒãå ±åœ¹ïŒã¯ããã¹ãŠã®ã€ã³ããã¯ã¹ã®ãã¯ãã«ç©ºéããã®ãã¥ã¢ã«ã«ãããããŸãïŒè¡åã®å Žåã¯ã€ã³ããã¯ã¹ã®é åãããã³é«æ¬¡ãã³ãœã«ã®æšå¥šå®çŸ©ãšãšãã«ïŒãªã©ã
ãã¡ãããéåžžã®è»¢çœ®ãšè€çŽ å ±åœ¹ã¯ããã®èšå®ã§ã¯å®éã«ã¯ååã«å®çŸ©ãããŠããŸããïŒã€ãŸãããããã¯åºæ¬çã«ç¬ç«ããæŠå¿µã§ã¯ãããŸããïŒ
æå°éã次ã®ããã«ãªããŸãã
immutable Space
dim::Int
dual::Bool
end
Space(dim::Int)=Space(dim,false) # assume normal vector space by default
dual(s::Space)=Space(s.dim,!s.dual)
matrix=Tensor((Space(3),dual(Space(5))))
# size is no longer sufficient to characterise the tensor and needs to be replaced by space
space(matrix) # returns (Space(3),dual(Space(5)))
space(matrix') # returns (Space(5),dual(Space(3)))
ãã¡ãããSpaceã絶ããæžã蟌ãå¿ èŠããªãããã«ãããã€ãã®æ§æãçºæããããšãã§ããŸãã ã¢ããã€ã³ããã¯ã¹ãšããŠã³ã€ã³ããã¯ã¹ãåºå¥ããªããã³ãœã«ãªã©ãäœæããããã«ãdualïŒsïŒ== sã®ç°ãªãã¹ããŒã¹ã¿ã€ããäœæã§ããŸãã ããããã¡ããããã¹ãŠãå£ããã«ãããJuliaã®æšæºé ååã«çµã¿èŸŒãæ¹æ³ã¯ãããŸãã...
å·¥åŠ/ç©çåŠã§ãã³ãœã«ãã©ã®ããã«äœ¿çšãããããšãæ°åŠãœãããŠã§ã¢ããã°ã©ã ã§ãã³ãœã«ãã©ã®ããã«åŠçãããããšã®éã«å¯æ¥ãªé¢ä¿ããªãã®ã¯ãªãããšãã€ãæã£ãŠããŸããã ãã®ãããã¯ã«é¢ããèå³æ·±ãã¹ã¿ãã¯äº€æã®äŒè©±ãèŠã€ããŸãã... httpïŒ//math.stackexchange.com/questions/412423/differences-between-a-matrix-and-a-tensorã ããã§ããè¯ãåèèšäºã§ããã
http://www.mat.univie.ac.at/~neum/physfaq/topics/tensors
ç§ã¯æ¯æ¥ã®ç§åŠèšç®ã«Matlabããã䜿çšããŠããŸãããJuliaã®åå¿è ã§ãã ããã§ãé«æ¬¡å ã®é åã®ä¹ç®ãšè»¢çœ®ããŸãã¯ä»ã®åæ§ã®é åæäœã«ã€ããŠå€ãã®è°è«ãããããšã«æ°ä»ããŸããã http://www.mathworks.com/matlabcentral/fileexchange/8773-multiple-matrix-multiplications--with-array-expansion-enabledã確èªããããšããå§ãã
ããã¯åºæ¬çã«ã @ drhagenã以åã®æçš¿ã§è¿°ã¹ããã®ãšåæ§ã®æ§æã«åŸããŸããããšãã°ãé åAãšBã®éã®ç©ã®array_productïŒAãBãinner_A_dim = [1ã2]ãinner_B_dim = [3ã4]ïŒäžããããå éšå¯žæ³ã
ããã¯ãéžæããããã€ãã®æ¬¡å ã«ä¹ç®ãŸãã¯è»¢çœ®æŒç®ãé©çšã§ãã1ã€ã®Matlabããã±ãŒãžã§ãã ããã±ãŒãžã«ã¯ãMatlabã§ãããã®æäœãå®è£ ããæ¹æ³ã«é¢ããããã¥ã¢ã«ããããŸãããæ°åŠçè«ã¯ä»ã®èšèªã«ãé©çšãããã¯ãã§ãã 圌ãã®ã¢ã€ãã¢ã¯ãForã«ãŒãã®äœ¿çšãé¿ããäž»ã«é åã®å圢æãªã©ã«äŸåããããšã«ãã£ãŠãé åæäœãå®è£ ããããšã§ãã ãããã£ãŠãMatlabã§ã¯éåžžã«é«éã§ãã ãžã¥ãªã¢ããã¯ãã«åãããæäœãšãã¯ãã«åãããŠããªãæäœã®ã©ã¡ãã«äŒŒãŠãããã¯ããããŸããïŒåŸè ã®ããã§ãïŒã ã³ã¢ããµããŒãããŠããã°ããã¯ãã«åãããæŒç®ã¯é«æ¬¡å ã®é åæŒç®ã«ãšã£ãŠæå©ã ãšæããŸãã ãã®æ®µéã§ããã®çš®ã®é åæäœãçæ¯ã«æ€èšããå¿ èŠããããããããŸããã
åèãŸã§ã«ïŒMatlabã§ã®INVæäœçšã®å¥ã®åæ§ã®å®è£ ã¯æ¬¡ã®ãšããã§ãïŒ http ïŒ
ãŸãã2005幎ã«Matlabã¢ã¬ã€æäœãµããŒãããã±ãŒãžããªãªãŒã¹ãããåŸãããŠã³ããŒãèšé²ã¯ä»æ¥ãŸã§é«ãã¬ãã«ã§ç¶æãããŠããããšã«ã泚æããŠãã ããã ç§ã®å®éã®çµéšãšåæ§ã«ãé åæŒç®ã¯ç©çåŠããã®ä»ã®åéã§éåžžã«é »ç¹ã«äœ¿çšãããŸãã ãžã¥ãªã¢ãä»»æã®ãµã€ãºã®é åãæäœããããã®åæ§ã®æ©èœãæã£ãŠããã°ãã²ãŒã ã¯éåžžã«èå³æ·±ããã®ã«ãªãã§ãããïŒ
@alanedelmanãææ¡ããããããžã®è§£æ±ºçã«å¯Ÿããå¥ã®æ祚ãããã«ãããŸãã ãããããæ°ãèµ·ããããäŸã§ãã
çŸåšãè¡ã¹ã©ã€ã¹ã¯2次å é åã§ãããåã¹ã©ã€ã¹ã¯1次å é åã§ãã ããã¯å¥åŠã«é察称ã§éãã§ãïŒ
julia> A = randn(4,4)
4x4 Array{Float64,2}:
2.12422 0.317163 1.32883 0.967186
-1.0433 1.44236 -0.822905 -0.130768
-0.382788 -1.16978 -0.19184 -1.15773
-1.2865 1.21368 -0.747717 -0.66303
julia> x = A[:,1]
4-element Array{Float64,1}:
2.12422
-1.0433
-0.382788
-1.2865
julia> y = A[1,:]
1x4 Array{Float64,2}:
2.12422 0.317163 1.32883 0.967186
ç¹ã«ãè¡ã«åãæããŠæ°å€ãæœåºããã«ã¯ã次ã®ãããªã²ã©ãéãæäœãè¡ãå¿ èŠããããŸãã
julia> dot(y[:],x)
2.4284575954571106
julia> (y*x)[1]
2.42845759545711
'*
ãç¹å¥ãªæŒç®åã«ããªãéããããã¯éŠå°Ÿäžè²«ããææ¡ã§ã¯ãããŸãããããã¯ããªãçãããããã x'*y
ãš(x')*y
ã¯åãæå³ã§ã¯ãããŸããã ããã«ãããã¯ä¹ç®ãéé£æ³ã«ããŸãã
x_y 'ãšy'_xã®é£ãããç解ããŠããŸãã æ²»çããæ¹ãè¯ããããããŸãã
å
ç©ãšå€ç©ãå¥ã
ã®æäœãšããŠãããšãã°dotïŒïŒã䜿çšããŸãã ïŒãããã
cdotã䜿çšããŠããŸããïŒïŒ
ããããæåã«æ²¿ã£ãŠã¹ã©ã€ã¹ãæã€ããšãæ¯æããè°è«ã¯äœã§ãã
次å
ã¯ãããã«æ²¿ã£ãã¹ã©ã€ã¹ãšã¯æ¬¡å
ãç°ãªããªããžã§ã¯ããè¿ããŸã
äºæ¬¡å
ïŒ äžè²«æ§ãä¿ã€ããã«ãã¹ã©ã€ã¹ãããã³ã«ã
çµæã®ãªããžã§ã¯ãã®å¯žæ³ã¯1ã€æžããå¿
èŠããããŸãã
20:17ã®æ°Žææ¥ã2014幎7æ16æ¥ã«ã¯ãã¹ããã¡ã³Karpinski [email protected]
æžããŸããïŒ
'*ãç¹å¥ãªæŒç®åã«ããªãéããäžè²«ããææ¡ã§ã¯ãããŸããã
ãã以æ¥ãx'_yãšïŒx 'ïŒ_ yã¯åãããšãæå³ããªãã®ã§ãããªãçãããã§ãã
ããã«ãããã¯ä¹ç®ãéé£æ³ã«ããŸããâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/JuliaLang/julia/issues/4774#issuecomment-49254346 ã
ããã¬ãŒãã»ãŠãã«
èšç®ããã³æ°åŠå·¥åŠã®å士å·åè£è
ã¹ã¿ã³ãã©ãŒã倧åŠ
www.stanford.edu/~udell
@madeleineudell ãç§ã¯ããªãã«åæããŸãããããã¯å¥ã®åé¡ã§ããïŒ5949ãåç §ããŠãã ããã ãã®åé¡ã¯è§£æ±ºãããããã§ãããæ確ãªåæãçµè«ããã£ãããšãèŠããŠããŸããã
é
åãã¥ãŒã«åãæ¿ãããšããããã®æ¹åãç°¡åã«æ¢çŽ¢ã§ããããã«ãªããŸãã ç¹ã«ã slice(A, i, :)
ãšèšããšãåžæããåäœãåŸãããŸãã ïŒä»ã¯ããããŠããŸãããããé
ãã¿ã€ãã®SubArrayãå°å
¥ãããšããç ç²ãæã£ãŠããŸããïŒ
çŽç²ã«æ°åŠçãªèŠ³ç¹ãããããã§æ瀺ããããã¹ãŠã®åé¡ã¯ãé åãæå³ãããã®ãšãã¯ãã«/ãã³ãœã«/è¡åãæå³ãããã®ã®æ··åïŒããã³ãããã®éã®æ··ä¹±ïŒããçããŸãã é åã¯ãæŠå¿µçã«ã¯åãªããªã¹ãïŒãŸãã¯ãn-dimé åã®å Žåã¯ãªã¹ãã®ãªã¹ãïŒã§ãã ãã®ãããé åã®ä¹ç®ã転眮ãªã©ã®æäœã®èªç¶ãªä»æ§ã¯ãããŸãããäžæ¹ã䞊ã¹æ¿ããèŠçŽ ããšã®æäœã軞åºæã®æäœïŒå¹³åãäžå€®å€ãªã©ïŒãªã©ã®é¢æ°ã¯æå³ããããã§äžæã«å®çŸ©ã§ããŸããåœç¶ã®ããšãªããããããç©ãªã©ã®æäœã¯ã§ããŸããã
äžèšã®ããã«ããã¯ãã«ãšãã³ãœã«ã¯å¹ŸäœåŠçãªããžã§ã¯ãã§ãããé åã䜿çšããŠããããè¡šçŸããããšã¯å¯èœã§ããããããã®è¡šçŸã«ã¯ãããããè¡šãæ°åŠçãªããžã§ã¯ããšåãè±å¯ãªæ§é ã¯å«ãŸããŠããŸããã 1次å é åã®è»¢çœ®ã¯äœãããŸããã ãã¯ãã«ã®è»¢çœ®ã¯ãã®å察ã§ãã 2次å é åã®è»¢çœ®ã¯ããã®æ¬¡å ã®é åãšããŠäžæãã€èªç¶ã«å®çŸ©ã§ããŸãããããã¯äžè¬ã«ãã³ãœã«ã«ã¯åœãŠã¯ãŸããŸãããèªç¶ãªå Žåã¯ã©ã³ã¯ïŒ1,1ïŒãã³ãœã«ïŒå¥åãè¡åïŒã«åœãŠã¯ãŸããŸãããã©ã³ã¯ïŒ2,0ïŒãã³ãœã«ã¯ã©ã³ã¯ïŒ0,2ïŒãã³ãœã«ã«è»¢çœ®ããŸãã ãã®å Žåãããã³ãœã«ãé åãšããŠæ±ãããšã«ããããã³ãœã«ããã³ãœã«ã«ãã幟äœåŠçæ å ±ã倱ãããŸãã
ããã¯ãå ç©ãªã©ã®æŒç®ãå®çŸ©ãããšãã«éèŠã§ãã å ç©ã«ã¯ç¹å®ã®å¹ŸäœåŠçæå³ïŒ2çªç®ã®ãã¯ãã«ã«ãã£ãŠå®çŸ©ãããå察空éãžã®1ã€ã®ãã¯ãã«ã®å°åœ±ïŒããããããå ç©ã®äžè²«ããå®çŸ©ã«ã¯ããã¯ãã«ã«å«ãŸãã幟äœåŠçæ å ±ã®ä¿åãå¿ èŠã§ãã ç¹å®ã®ä»®å®ã䜿çšãããšãé åã䜿çšã§ãããŠãŒã¹ã±ãŒã¹ã®å€§éšåãã«ããŒã§ããå¯èœæ§ããããŸããããããã®ä»®å®ã¯ïŒãã®ã¹ã¬ããã®ããŸããŸãªææ¡ã«èŠãããããã«ïŒåä»ã§ããããã³ãœã«ã®ããè±å¯ãªæ§é ãå¿ èŠãšãã人ã«ãšã£ãŠã¯å®éã«ã¯å°é£ã«ãªããŸãã
ãããã£ãŠãããã¯ãããè±å¯ãªAbstractTensorã¿ã€ããå«ãããšããthomasmcoffeeã®ææ¡ã«è³æãã匷ãæ祚ã ãšèããŠãã ããã ç§ã®å人çãªå¥œã¿ã¯ã転眮ããããç©ãªã©ã®æäœãé åã«å¯ŸããŠãå®çŸ©ãããŠããªãããšã§ãããã»ãšãã©ã®äººããã®èŠè§£ãå ±æããªããšæãã®ã§ãå°ãªããšãå¿ èŠã«å¿ããŠçã®ãã³ãœã«ãäœæããæ©èœãå¿ èŠã§ãã
ãã®èŠ³ç¹ã®å®éçãªæå³ã¯ãé
åã¯ãã³ãœã«ã®ãµãã»ããã§èå¥ãããã¹ãã§ããã1-dé
åã転眮ãããšDualVector
ãŸãã¯ãããããšã©ãŒãçºçããã¯ãã§ãããšããããšã®ããã§ãã ç§ã®èŠè§£ã§ã¯ãããã¯è€çŽ æ°ãäžããå®æ°ã®æŒç®ã«é¡äŒŒããŠããŸãã
ç§ã®èŠè§£ã§ã¯ãïŒå€æ¬¡å ã®ïŒããŒã¿ã³ã³ããã§ããäžè¬çãªAbstractArrayãã¡ããªã¯ãæè¡çãªããã°ã©ãã³ã°èšèªã®äžå¯æ¬ ãªéšåãšãªãã®ã«ååãªã»ã©äžè¬çã§ãã å³å¯ãªæ°åŠçèŠåã«åŸããã³ãœã«ã¯ãç§ãå¿ããæ°ã«ãããŠãããšããŠããå°çšããã±ãŒãžã®è¯ããªããžã§ã¯ãã§ãã å®éãç§ã¯https://github.com/Jutho/TensorToolbox.jlã®@jdbatesã§æå®ããããŸãã ãããŸã§ã®ãšããææžåãããŠããããã»ãšãã©ãã¹ããããŠããŸããã ç§ã¯éåå€äœç©çåŠã§å人çã«å¿ èŠãªãã®ã®ããã«ãããæžããŸãããããã³ãœã«ãæ±ãããšã«é¢å¿ã®ããæ°åŠè ãç©çåŠè ã®ãã倧ããªã³ãã¥ããã£ã«åœ¹ç«ã€ããã«ååã«äžè¬çã§æ¡åŒµå¯èœãªæ¹æ³ã§æ§ç¯ãããŠããããšãé¡ã£ãŠããŸãã
詳现ã説æããŸãïŒJuliaQuantumãã©ãŒã©ã ããã³ããŒïŒïŒJuliaã®AbstractArrayã¿ã€ãã«äŸåããªãããã³ãœã«ã®æ°ããã¿ã€ãéå±€ãå®çŸ©ããããšã«ããŸããïŒãã ããåºæ¬çãªTensorã¯Arrayã®åãªãã©ãããŒã§ãïŒã ãã®ã¿ã€ãéå±€ã¯ãããå°ãæ£åŒãªæ¹æ³ã§æ©èœããã¯ãã§ãã ãã³ãœã«ã€ã³ããã¯ã¹ã¯ãã¯ãã«ç©ºéïŒä»¥éãã€ã³ããã¯ã¹ã¹ããŒã¹ãšåŒã³ãŸãïŒã«é¢é£ä»ããããŸãããã³ãœã«ã€ã³ããã¯ã¹ãé¢é£ä»ããããŠãããã¯ãã«ç©ºéã®ã¿ã€ãããã¥ã¢ã«ãšç°ãªãå Žåãããã¯å ±å€ã€ã³ããã¯ã¹ãšåå€ã€ã³ããã¯ã¹ãåºå¥ãããã³ãœã«ã«å¯Ÿå¿ããŸãã
ãããã£ãŠãããã±ãŒãžã®æåã®éšåã¯ããã¯ãã«ç©ºéãå®çŸ©ããããã®æœè±¡çãªéšåã§ããããã§ãJuliaãªããžã§ã¯ãã®åéå±€ããã¯ãã«ç©ºéã®æ°åŠçéå±€ã«äžèŽãããŸãã äžè¬ãã¯ãã«ç©ºéVã«ã¯ãVäžã®äžè¬ç·åœ¢çŸ€ã®è¡šçŸè«ã«å¯Ÿå¿ãããVèªäœïŒåºæ¬è¡šçŸïŒãconjïŒVïŒãdualïŒVïŒãdualïŒconjïŒVïŒïŒã®4çš®é¡ããããŸãã å®æ°ãã¯ãã«ç©ºéã®å ŽåãconjïŒVïŒ= Vã§ãããåå€ãã¯ãã«ãšå ±å€ãã¯ãã«ã«å¯Ÿå¿ããVãšdualïŒVïŒã®ã¿ããããŸãã 次ã«ãå ç©ç©ºéããããéå±€ã®æäžäœã«ã¯ãŠãŒã¯ãªãã空éããããŸããããã¯ãæšæºã®ãŠãŒã¯ãªããå ç©ïŒã€ãŸãçŽäº€åºåºïŒãæã€å ç©ç©ºéã§ãã ç©çåŠã§ã¯ãããŸããŸãªã»ã¯ã¿ãŒã«å解ããããã¯ãã«ç©ºéã«ã€ããŠèããããšã圹ç«ã¡ãŸããã€ãŸãã察称äœçšã®æ¢çŽè¡šçŸãªã©ã«ãã£ãŠççŽä»ããããŸãã
ãã³ãœã«ã¯ãããã€ãã®åºæ¬ãã¯ãã«ç©ºéã®ãã³ãœã«ç©ïŒã®éšå空éïŒã«ååšãããªããžã§ã¯ãã§ãã ãã ããã€ã³ããã¯ã¹ç©ºéã®ãã³ãœã«ç©ç©ºéã«ååšãããªããžã§ã¯ãã§ããæšæºãã³ãœã«ãšã¯å¥ã«ãããšãã°ãirrepsã«ãã£ãŠççŽä»ãããã空éã®ãã³ãœã«ç©ã®äžå€ã»ã¯ã¿ãŒãã®å¯Ÿç§°ãŸãã¯é察称éšå空éã«ååšãããã³ãœã«ãæ§ç¯ã§ããŸããåäžç©ºéã®ãã³ãœã«ç©ã...ã€ã³ããã¯ã¹ç©ºéãšããŠãã§ã«ããªã³ãã¯ãã«ç©ºéãæã€ããšãã§ããŸããããã¯ããã³ãœã«ã€ã³ããã¯ã¹ã®é åããããªãã£ã»ã¯ã¿ãŒãªã©ã«å¿ããŠç¹å®ã®ç¬Šå·å€åãåŒãèµ·ããããšãæå³ããŸãã
次ã«ããã³ãœã«ã§å®çŸ©ãããç¹å®ã®æäœãããããã®äžã§æãéèŠãªã®ã¯ãã³ãœã«ã®çž®çŽã§ãããçŽäº€å æ°å解ïŒç¹ç°å€å解ïŒãªã©ããããŸããæåŸã«ããããã³ãœã«ãå¥ã®ãã³ãœã«ã«ãããã³ã°ããç·åœ¢ããããå¿ èŠã§ãã ãããã¯ãéåžžãããããè¡åãšããŠå®å šã«ãšã³ã³ãŒãããã®ã§ã¯ãªããå埩æ³ïŒLanczosãªã©ïŒã§äœ¿çšããããã«è¡åãã¯ãã«ç©ãå¹ççã«èšç®ã§ããæ¹æ³ã§ãç¹å¥ãªã¿ã€ãã«å€ããŸãã ãããŸã§ã®ç§ã®2ã€ã®æ¢åã®ããã±ãŒãžïŒTensorOperations.jlãšLinearMaps.jlïŒã¯ãæšæºã®é åã«å¯ŸããŠãã®æ©èœãå®è£ ããŠããŸããæ§ç¯äžã®ãã³ãœã«ããŒã«ããã¯ã¹ã¯ãæ°ããAbstractTensoréå±€ã«å¯ŸããŠãããããªãŒããŒããŒã/åå®çŸ©ããŸãã
ãã®ããã±ãŒãžãååã«äžè¬çã§ãããããåºãç©çåŠ/æ°åŠã³ãã¥ããã£ã«ã圹ç«ã€ããšãé¡ã£ãŠããŸãã ããšãã°ãå€æ§äœãæäœããããã®ããã±ãŒãžãäœæãã誰ãããã£ãŠããå Žåã圌ã¯TangentSpaceãã¯ãã«ç©ºéãæœè±¡InnerProductSpaceã®éšå空éãšããŠå®çŸ©ããããã«ããã€ãã®æ¥ç·ç©ºéãšäœæ¥ç©ºéã®ãã³ãœã«ç©ã«ååšãããã³ãœã«ãäœæã§ããŸãã å®éãç§ã¯ãã¯ãã«ç©ºéãå®çŸ©ããããã®éšåãå¥ã®ããã±ãŒãžã«åå²ããããšãèããŠããŸããããã¯æ°åŠçæ§é /ãªããžã§ã¯ããå®çŸ©ããããã®ããã±ãŒãžã«æé·ããå¯èœæ§ããããŸãã
æåŸã«ãæšæºã®ãžã¥ãªã¢ãšã®çžäºéçšãåŒã³åºãããæ¥tensor
æšæºã§Array
åã®ãªããžã§ã¯ãã«ãããã©ããããã Tensor
åã®ã¹ããŒã¹ã«é¢é£ä»ããããŠããã€ã³ããã¯ã¹ä»ãCartesianSpace
ã ããã¯ããŠãŒã¯ãªããç©ã䜿çšããæšæºã®å®ãã¯ãã«ç©ºéR ^ nã§ãããå
±å€ææ°ãšåå€ææ°ã®åºå¥ã¯ãããŸããã ããã¯ãæšæºã®JuliaArrayãäœã§ããããæãããè¡šããŠãããšæããŸãã
@JeffBezanson ãç§ã¯é åããã³ãœã«ã®ãµãã»ãããšããŠæ±ãããšã«é¢ããŠææ§ã§ãã ãã®æ¹æ³ã§æ å ±ã倱ãããããšã¯ãããŸããããåæã«ãé åã«ã¯è€æ°ã®å¯èœãªè§£éãããããã³ãœã«ã®è§£éãåžžã«ïŒãŸãã¯éåžžã§ãïŒæå³ããªããšã¯éããŸããã ç»åã«ã€ããŠèããŠã¿ãŸããããç»åã¯ãïŒéåžžã¯2dïŒå€æ§äœäžã®ãã¯ãã«å€ãã£ãŒã«ããšèããããšãã§ããŸãã ãã®ãã£ãŒã«ããé·æ¹åœ¢ã®ã°ãªããã«å¶éãããšãåœç¶ã3Dé åã䜿çšããŠè¡šçŸãããæ§é ãåŸãããŸãã ãã ããå®éã«ã¯ãããã¯ã°ãªãããã€ã³ãã®ç©ºéãã{RãGãB}ãã¯ãã«ç©ºéãžã®åãªããããã³ã°ã§ãããããæåã®2ã€ã®æ¬¡å ïŒã°ãªããã®xã©ãã«ãšyã©ãã«ïŒã®å¹ŸäœåŠçæå³ã¯3次å ã®å¹ŸäœåŠçæå³ïŒå®éã«ã¯ãã¯ãã«ïŒã
ç§ã¯ããã³ãœã«ååŠãå¥ã®ããã±ãŒãžã«åå²ãããšãã@Juthoã®ææ¡ã«å察ããŠããŸããã 圌ã¯ãããããå®å šãªãã³ãœã«ã¡ã«ããºã ãå¿ èŠãšãããŠãŒã¶ãŒã®æ°ããåçŽãªé åæäœãå¿ èŠãšãããŠãŒã¶ãŒã®æ°ãããã¯ããã«å°ãªãããšã¯æ£ããã§ãããã ããã§ç§ãã¡ãæ¬åœã«å°ããããšããŠãã質åã¯ããç·åœ¢ä»£æ°ã¯ã©ã®é åã«åé¡ãããã¹ãããã§ãã
ç·åœ¢ä»£æ°ã®æ©æ§ã¯ããã³ãœã«ä»£æ°ã®æ©æ§ã®å®è³ªçãªãµãã»ããã§ãããå°ãªããšãç§ã®èãã§ã¯ãåŸè ãå®è£ ããã«åè ãå®è£ ããããšã¯æå³ããããŸããã v'Mã®ãããªæŒç®ã¯ãå ±å€ãã¯ãã«ãšåå€ãã¯ãã«ã®æŠå¿µãããå Žåãããç°¡æœãã€äžè²«ããŠè¡šãããŸãããããã¯ãã§ã«äžè¬çãªãã³ãœã«æŒç®ãžã®éã®ã»ãšãã©ãç§ãã¡ã«ãããããŸãã
ããã¯ãè€çŽ æ°ãè¿ãå®æ°ã®æŒç®ãšæŠå¿µçã«äŒŒãŠããããšã«åæããŸãã
ç»åã«ã€ããŠèããŠã¿ãŸããããç»åã¯ãïŒéåžžã¯2dïŒå€æ§äœäžã®ãã¯ãã«å€ãã£ãŒã«ããšèããããšãã§ããŸãã ãã®ãã£ãŒã«ããé·æ¹åœ¢ã®ã°ãªããã«å¶éãããšãåœç¶ã3Dé åã䜿çšããŠè¡šçŸãããæ§é ãåŸãããŸãã ãã ããå®éã«ã¯ãããã¯ã°ãªãããã€ã³ãã®ç©ºéãã{RãGãB}ãã¯ãã«ç©ºéãžã®åãªããããã³ã°ã§ãããããæåã®2ã€ã®æ¬¡å ïŒã°ãªããã®xã©ãã«ãšyã©ãã«ïŒã®å¹ŸäœåŠçæå³ã¯3次å ã®å¹ŸäœåŠçæå³ïŒå®éã«ã¯ãã¯ãã«ïŒã
ããã¯ã¡ãã»ãŒãžå šäœã«å¯ŸåŠãããããããåãé€ããããããã®ã§ã¯ãããŸãããã httpsïŒ//github.com/timholy/Images.jl/pull/135ã¯ãç»åã«å¯Ÿãããã®ã¢ã€ãã¢ã®å®è£ ã«åããŠåãçµãã§ããŸãã ããã«ããããããžã§ã¯ãã§äœ¿çšããããšèããŠããè²æ§é ãã³ãœã«ãç°¡åã«åŠçã§ããããã«ãªãããšãé¡ã£ãŠããŸãã
2014幎8æ23æ¥ã«ã¯ãåå20æ36åã§ãjdbates [email protected]æžããŸããïŒ
@JeffBezanson ãç§ã¯é åããã³ãœã«ã®ãµãã»ãããšããŠæ±ãããšã«é¢ããŠææ§ã§ãã ãã®æ¹æ³ã§æ å ±ã倱ãããããšã¯ãããŸããããåæã«ãç»åã«ã¯è€æ°ã®å¯èœãªè§£éãããããã³ãœã«ã®è§£éãåžžã«ïŒãŸãã¯éåžžã§ãïŒæå³ããªããšã¯éããŸããã ç»åã«ã€ããŠèããŠã¿ãŸããããç»åã¯ãïŒéåžžã¯2dïŒå€æ§äœäžã®ãã¯ãã«å€ãã£ãŒã«ããšèããããšãã§ããŸãã ãã®ãã£ãŒã«ããé·æ¹åœ¢ã®ã°ãªããã«å¶éãããšãåœç¶ã3Dé åã䜿çšããŠè¡šçŸãããæ§é ãåŸãããŸãã ãã ããå®éã«ã¯ãããã¯ã°ãªãããã€ã³ãã®ç©ºéãã{RãGãB}ãã¯ãã«ç©ºéãžã®åãªããããã³ã°ã§ãããããæåã®2ã€ã®æ¬¡å ïŒã°ãªããã®xã©ãã«ãšyã©ãã«ïŒã®å¹ŸäœåŠçæå³ã¯3次å ã®å¹ŸäœåŠçæå³ïŒå®éã«ã¯ãã¯ãã«ïŒã
ãã³ãœã«ãé åã«åã£ãŠä»£ãããã®ã§ã¯ãªãããšã«åæããŸãã äžèšã®ãã®äŸã¯ãå®éã«ã¯ç°ãªãæ°åŠçæ§é ïŒã€ãŸãããã¯ãã«ãã³ãã«ãŸãã¯ããäžè¬çã«ã¯ãã³ãœã«ãã³ãã«ïŒã§ããããã®è¡šçŸã¯ãå€æ§äœåº§æšã®ã°ãªãããšãã¯ãã«ç©ºééšåã®åºåºãéžæããããšã«ãã£ãŠå€æ¬¡å é åãšããŠäžããããšãã§ããŸãã ãããã£ãŠãå®éã«ã¯ã座æšéäŸå/åºåºéäŸåã®æ¹æ³ã§æ確ã«å®çŸ©ãããŠããããïŒåº§æšç³»ãŸãã¯åºåºãéžæããåŸïŒå€æ¬¡å é åãšããŠè¡šãããšãã§ããããŸããŸãªæ°åŠçãªããžã§ã¯ã/æ§é ãæã€ããšãã§ããŸãã ãããã£ãŠãå€æ¬¡å é åã¯ç¢ºãã«ãã³ãœã«ã®è¡šçŸã«éå®ãããŸããã ãã¹ãŠã®ãã³ãœã«ãå€æ¬¡å é åã䜿çšãã䟿å©ãªè¡šçŸãæã£ãŠããããã§ã¯ãªããããéã倱æããŸãã ããã¯ããã³ãœã«ç©ç©ºéã«å«ãŸãããã¯ãã«ç©ºéã®åã ã®åºåºãã¯ãã«ã®ãã¹ãŠã®å¯èœãªçµã¿åããã®çŽæ¥ç©ãåãããšã«ãã£ãŠåŸããããç©åºåºãšåŒã°ããç¹å®ã®åºåºã䜿çšããå Žåã«ã®ã¿åœãŠã¯ãŸããŸãã å Žåã«ãã£ãŠã¯ãããšãã°ããã³ãœã«ç©ç©ºéã®å¯Ÿç§°æ§äžå€éšå空éã§ãã³ãœã«ã䜿çšããå Žåããã®ãããªè¡šçŸã¯ãã¯ãäžå¯èœã§ããããã³ãœã«ãã¡ããã©è¡šçŸãããå®å šãªç©ºéã«å¯ŸããŠç°ãªãåºåºãå®çŸ©ããå¿ èŠããããŸããæ°åã®é·ãäžæ¬¡å ãªã¹ãã
ç§ã¯ããã³ãœã«ååŠãå¥ã®ããã±ãŒãžã«åå²ãããšãã@Juthoã®ææ¡ã«å察ããŠããŸããã 圌ã¯ãããããå®å šãªãã³ãœã«ã¡ã«ããºã ãå¿ èŠãšãããŠãŒã¶ãŒã®æ°ããåçŽãªé åæäœãå¿ èŠãšãããŠãŒã¶ãŒã®æ°ãããã¯ããã«å°ãªãããšã¯æ£ããã§ãããã ããã§ç§ãã¡ãæ¬åœã«å°ããããšããŠãã質åã¯ããç·åœ¢ä»£æ°ã¯ã©ã®é åã«åé¡ãããã¹ãããã§ãã
ç·åœ¢ä»£æ°ã®æ©æ§ã¯ããã³ãœã«ä»£æ°ã®æ©æ§ã®å®è³ªçãªãµãã»ããã§ãããå°ãªããšãç§ã®èãã§ã¯ãåŸè ãå®è£ ããã«åè ãå®è£ ããããšã¯æå³ããããŸããã v'Mã®ãããªæŒç®ã¯ãå ±å€ãã¯ãã«ãšåå€ãã¯ãã«ã®æŠå¿µãããå Žåãããç°¡æœãã€äžè²«ããŠè¡šãããŸãããããã¯ãã§ã«äžè¬çãªãã³ãœã«æŒç®ãžã®éã®ã»ãšãã©ãç§ãã¡ã«ãããããŸãã
ããã¯ãè€çŽ æ°ãè¿ãå®æ°ã®æŒç®ãšæŠå¿µçã«äŒŒãŠããããšã«åæããŸãã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ããã
é åã«ã¯è€æ°ã®å¯èœãªè§£éãããããã³ãœã«ã®è§£éã¯åžžã«ïŒãŸãã¯éåžžã§ãïŒæå³ããããšã¯éããŸããã ç»åã«ã€ããŠèããŠã¿ãŸããããç»åã¯ãïŒéåžžã¯2dïŒå€æ§äœäžã®ãã¯ãã«å€ãã£ãŒã«ããšèããããšãã§ããŸãã ãã®ãã£ãŒã«ããé·æ¹åœ¢ã®ã°ãªããã«å¶éãããšãåœç¶ã3Dé åã䜿çšããŠè¡šçŸãããæ§é ãåŸãããŸãã ãã ããå®éã«ã¯ãããã¯ã°ãªãããã€ã³ãã®ç©ºéãã{RãGãB}ãã¯ãã«ç©ºéãžã®åãªããããã³ã°ã§ãããããæåã®2ã€ã®æ¬¡å ïŒã°ãªããã®xã©ãã«ãšyã©ãã«ïŒã®å¹ŸäœåŠçæå³ã¯3次å ã®å¹ŸäœåŠçæå³ïŒå®éã«ã¯ãã¯ãã«ïŒã
é
åã®ãããªãã®ãšãã³ãœã«ã®äž¡æ¹ãèš±å¯ããããšã§ã httpsïŒ //github.com/JuliaLang/julia/issues/4774#issuecomment-38333295ã®æŠå¿µçãªAbstractTensorArray
ææ¡ã§ãã£ããã£ããããšããã®ã¯ãŸãã«ãã®çš®ã®åºå¥
AbstractTensorArray{Uint8, 3, [false, true, false], [true, false, false]}
ãã®ãããxãyãããã³RGBã®å¯žæ³ã¯ããããããäžãããäžããããã³ãäžç«ãã«ãªããŸãã 幟äœåŠçæäœïŒããšãã°ãã¢ãã£ã³å€æïŒã¯ãé åã®ãããªæ¹æ³ã§RGBå€ããããã³ã°ããªããããã³ãœã«ã®ãããªæ¹æ³ã§ã°ãªãã座æšã®æ¬¡å ãåŠçã§ããŸãã ïŒåŸã§RGBå€ã幟äœåŠçã«æ±ãããå Žåã¯ããã®ç®çã®ããã«ãã¹ã¯ãæ瀺çã«å€æŽããå¿ èŠããããŸãããïŒaïŒ2ã€ã®ç°ãªããã¬ãŒããŒã®å¹ŸäœåŠçæäœãã®ç°ãªãéšå空éã«é©çšãããããšã¯ããŸãäžè¬çã§ã¯ãªããšæããŸãåãããŒã¿ããŒãã«ãããã³ïŒbïŒãã®ç¶æ³ã§ã¯ãæ瀺çãªå€æã¯ããããã³ãŒãã®æå¿«ãã_æ¹å_ããŸããïŒ
@JuthoãèšåããŠããå ±åœ¹è¡šçŸã«ã€ããŠã¯èæ ®ããŠããŸãã
ããã§ç§ãã¡ãæ¬åœã«å°ããããšããŠãã質åã¯ããç·åœ¢ä»£æ°ã¯ã©ã®é åã«åé¡ãããã¹ãããã§ãã
é åã®ãããªæäœãšãã³ãœã«ã®ãããªæäœãã©ã®ããã«é£æºãããã«ã€ããŠèšèšã決ãŸã£ãããç·åœ¢ä»£æ°ã®ãšã³ãã£ãã£ãç¹å¥ãªå ŽåïŒäžèšã§äœ¿çšãããšã€ãªã¢ã¹ãªã©ïŒã§å®çŸ©ã§ãããããçŽç²ãªç·åœ¢ä»£æ°ã®ãŠãŒã¶ãŒã¯æ°ä»ããªãããšããããŸããå¿ èŠã«ãªããŸã§ãäžè¬åããããã³ãœã«éå±€å šäœïŒãã ããå¿ èŠã«å¿ããŠæžãçŽãå¿ èŠã¯ãããŸããïŒã ãããã£ãŠããã¹ãŠãBaseã«é 眮ããŠãåé¡ã¯çºçããŸããïŒããããèšåŒµãé€ãïŒã
ãã®ãããxãyãããã³RGBã®å¯žæ³ã¯ããããããäžãããäžããããã³ãäžç«ãã«ãªããŸãã 幟äœåŠçæäœïŒããšãã°ãã¢ãã£ã³å€æïŒã¯ãé åã®ãããªæ¹æ³ã§RGBå€ããããã³ã°ããªããããã³ãœã«ã®ãããªæ¹æ³ã§ã°ãªãã座æšã®æ¬¡å ãåŠçã§ããŸãã ïŒåŸã§RGBå€ã幟äœåŠçã«æ±ãããå Žåã¯ããã®ç®çã®ããã«ãã¹ã¯ãæ瀺çã«å€æŽããå¿ èŠããããŸãããïŒaïŒ2ã€ã®ç°ãªããã¬ãŒããŒã®å¹ŸäœåŠçæäœãã®ç°ãªãéšå空éã«é©çšãããããšã¯ããŸãäžè¬çã§ã¯ãªããšæããŸãåãããŒã¿ããŒãã«ãããã³ïŒbïŒãã®ç¶æ³ã§ã¯ãæ瀺çãªå€æã«ãã£ãŠã³ãŒãã®æ確ããåäžããå¯èœæ§ããããŸããïŒ
ããã§äœããæ··ããŠãããšæããŸãã äžèšã®èª¬æã§ã¯ãx座æšãšy座æšã¯ãå¿ ãããå¹³åŠãªç©ºéã§ã¯ãªããä»»æã®æ¹Ÿæ²ããå€æ§äœäžã®åº§æšã«å¯Ÿå¿ã§ããããããã¯ãã«ç©ºéã®è§£éãæããªãããšãå®éã«èª¬æãããŸããã ãã¯ãã«è§£éãäžããããã®ã¯RGB次å ã§ããããè²ç©ºéãããªã湟æ²ããŠããããšãèŠããŠããããã§ããïŒç»ååŠçã«é©åãªèæ¯ããªãããïŒããããå®éã«ã¯æè¯ã®éžæã§ã¯ãªãå¯èœæ§ããããŸãã ãŸããå®çŸ©åïŒxãšyïŒããã¯ãã«ç©ºéã圢æããŠããå Žåã§ãããªãxãšyãäžäžããã®ã§ããããããããšãããã¯åãªãè¡šèšäŸã§ãããïŒ
ãšã«ãããç§ã¯TensorToolbox.jlããå§ããŠãå ±å€ããã³åå€ã®ã€ã³ããã¯ã¹ãããçš®ã®ãã©ã¡ãŒã¿ãŒãŸãã¯ãã¹ã¯ãšããŠç€ºããŸããããããã¯ããã«å®å šãªæªå€¢ã«ãªããŸãããã®ããããã¹ãŠã®ãã³ãœã«ãäœããã®ãã¯ãã«ç©ºéã®èŠçŽ ã§ããè¡šçŸã«åãæ¿ããŸããã ãããã³æäœãå®è¡ããã«ã¯ãé åã䜿çšããŠæäœãå®è¡ãããšãã«ãµã€ãºãäžèŽããããšã確èªããå¿ èŠãããã®ãšåãããã«ãã¹ããŒã¹ãäžèŽããããšã確èªããå¿ èŠããããŸãã
x座æšãšy座æšã¯ããã¯ãã«ç©ºéã®è§£éãå®è¡ããŸããã§ãã
ç³ãèš³ãããŸãããããé·æ¹åœ¢ã°ãªããããèªã¿éããŸãã---
ãã¹ãŠã®ãã³ãœã«ã¯ããããã¯ãã«ç©ºéã®èŠçŽ ã§ãã
ããã¢ã€ãã¢ã®ããã§ã---ãŠãŒã¶ãŒã«ãšã£ãŠã©ã®ããã«æ©èœãããã®äŸãããã€ãèŠãŠã¿ãããšæããŸãïŒã³ãŒããããŸãèªãã§ããŸããã§ããïŒã
ãã®åé¡ã«ã€ããŠæ°ããææ¡ããããŸãã
ïŒ1ïŒAPLã¹ã¿ã€ã«ã®ã¹ã©ã€ã¹ã
size(A[i_1, ..., i_n]) == tuple(size(i_1)..., ..., size(i_n)...)
ç¹ã«ãããã¯ãã·ã³ã°ã«ãã³ã¹ã©ã€ã¹ããã€ãŸãã€ã³ããã¯ã¹ãã¹ã«ã©ãŒãŸãã¯ãŒã次å
ã®ã¹ã©ã€ã¹ãåžžã«åé€ããã M[1,:]
ãšM[:,1]
ãäž¡æ¹ãšããã¯ãã«ã§ãããäžæ¹ããã¯ãã«ã§ã¯ãªãããšãæå³ããŸãããã1ã€ã¯è¡è¡åããŸãã¯ãã®ä»ã®ãã®ãããªåºå¥ã§ãã
ïŒ2ïŒãã¯ãã«ãšè¡åã®Transpose
ãšConjTranspose
ã©ãããŒã¿ã€ããå°å
¥ããŸãã èšãæããã°ã次ã®ãããªãã®ã§ãã
immutable Transpose{T,n,A<:AbstractArray} <: AbstractArray{T,n}
array::A
end
Transpose{T,n}(a::AbstractArray{T,n}) = Transpose{T,n,typeof(a)}(a)
ãããŠããããããã¯ãã«ãè¡åã®å Žåãšåãããã«æ©èœãããããã®ãã¹ãŠã®é©åãªæ¹æ³ã äžè¬çãªè»¢çœ®ãä»»æã®æ¬¡å
ã«å¯ŸããŠäœãæå³ããã®ããæ確ã§ãªãããããã¯ãã«ãšè¡åã«å¯ŸããŠã®ã¿æ©èœããããã«å¶éããããšããå§ãããŸãïŒãã ãã次å
ãéã«ããã ãã§ãé
åçã§ãïŒã ããªããæžããšãa'
ããªããåŸãConjTranspose(a)
ãšåæ§ã«v.'
çæTranspose(a)
ã
ïŒ3ïŒæ¬¡ã®ãããªïŒå ±åœ¹ïŒè»¢çœ®ãã¯ãã«ããã³è¡åã®ããŸããŸãªç¹æ®ãªæ¹æ³ãå®çŸ©ããŸãã
*(v::Transpose{T,1}, w::AbstractVector) = dot(v.array,w)
*(v::AbstractVector, w::Transpose{T,1}) = [ v[i]*w[j] for i=1:length(v), j=1:length(w) ]
ãªã©ããã¹ãŠã®æãããAt_mul_B
é¢æ°ã眮ãæããç¹å¥ãªè§£æãæ æ°ãªïŒå
±åœ¹ïŒè»¢çœ®æ§é ã«çœ®ãæããåŸã Transpose
ããã³ConjTranspose
ã¿ã€ãã«ãã£ã¹ãããããŸãã
ïŒ4ïŒãããŒããã£ã¹ãæäœããåŒæ°ãåã次å æ°ã®ã¹ã«ã©ãŒãŸãã¯é åã§ããå Žåã«å¶éããŸãã ãããã£ãŠãçŸåšç€ºãããŠããããã«æ©èœãã以äžã¯å€±æããŸãã
julia> M = rand(3,4);
julia> M./M[1,:]
3x4 Array{Float64,2}:
1.0 1.0 1.0 1.0
0.516884 0.675712 2.11216 9.0797
1.00641 0.726229 2.48336 4.38751
julia> M./M[:,1]
3x4 Array{Float64,2}:
1.0 0.891557 0.561464 0.103968
1.0 1.16552 2.29433 1.82633
1.0 0.643353 1.38544 0.453257
代ããã«ã次ã®ãããªããšãè¡ãå¿ èŠããããŸãã
julia> M./M[[1],:]
3x4 Array{Float64,2}:
1.0 1.0 1.0 1.0
0.516884 0.675712 2.11216 9.0797
1.00641 0.726229 2.48336 4.38751
julia> M./M[:,[1]]
3x4 Array{Float64,2}:
1.0 0.891557 0.561464 0.103968
1.0 1.16552 2.29433 1.82633
1.0 0.643353 1.38544 0.453257
ãã®ææ¡ã¯ãç§ãã¡ãçŸåšæ±ããŠããäž»èŠãªåé¡ããã¹ãŠè§£æ±ºãããšä¿¡ããŠããŸãã
v'' === v
ãv' == v
ãv'w
ã¯ã v
ãšw
å
ç©ã§ããç¹ã«ãããã¯1èŠçŽ ã®ãã¯ãã«ã§ã¯ãªããã¹ã«ã©ãŒã§ããv*w'
ã¯ã v
ãšw
ã®å€ç©ã§ããM*v
ã¯ãã¯ãã«ã§ããM*v'
ã¯ãšã©ãŒã§ããv'*M
ã¯è»¢çœ®ãã¯ãã«ã§ããv*M
ã¯ãšã©ãŒã§ããAt_mul_B
æŒç®åãšç¹å¥ãªæ§æ解æã¯ãªããªããŸããïŒ+1ïŒãã¹ãŠã«ã ïŒ6837ã§2ãš3ã®äœæ¥ãããŸããããå®äºããŸããã§ããã @simonbyrneãããã調ã¹ãŸããã
+1ãã ããã¯è³ãæã§éåžžã«äžè²«ããæ¯ãèããæäŸããããã«èãããŸãã
ãã®ææ¡ã®å¯äžã®æ¬åœã«ç Žå£çãªéšåã¯ãå®éã«ã¯M[1,:]
ãæ瀺çã«æ°Žå¹³ãªè¡è¡åã§ã¯ãªããæé»çã«åçŽãªãã¯ãã«ã§ãããšããããšã§ãã ãã以å€ã®å Žåã¯ãå®éã«ã¯éåžžã«ã¹ã ãŒãºã§äžæã®ãªãäžé£ã®å€æŽã§ãïŒ1ã€ã¯æåŸ
ã§ããŸãïŒã ïŒç§ã«ãšã£ãŠïŒäž»ãªã²ãããã¯ãAPLã¹ã©ã€ã¹åäœãæ æ°ãªè»¢çœ®ãšçµã¿åãããããšãã§ãããšããããšã§ããã è³åãåŸãã°ãèšç»ãç«ãŠãŠäœæ¥ãåå²ããããšãã§ããŸãã æ æ°ãªè»¢çœ®ãšã¹ããŒãžã³ã°ãããé¢æ°ã«ãã£ãŠãã³ãŒãã®åæžãšç°¡çŽ åãå¯èœã«ãªãããšãæ¬åœã«æãã§ããŸãã
ã¯ãããé¡ãããŸãïŒ ãã³ãœã«è»¢çœ®ã¯ãããã©ã«ããšããŠèæãå€ãéã«ããŠããŠãŒã¶ãŒå®çŸ©ã®é åãããããèš±å¯ããã¯ãã§ãã
ãã³ãœã«è»¢çœ®ã¯ãããã©ã«ããšããŠèæãå€ãéã«ããŠããŠãŒã¶ãŒå®çŸ©ã®é åãããããèš±å¯ããã¯ãã§ãã
åãå°ãè€éã«ãªãããã§ãããããããä»»æã®é
延次å
ã®é åãèš±å¯ããPermuteDims
åã䜿çšã§ããŸãã
@Stefan ïŒããã¯ãã¯ãã«ãš2
代æ°ã ããã€ãã®èª²é¡ïŒ
14:31ã®æšã2014幎10æ16æ¥ã«ã¯ãã¹ããã¡ã³Karpinski [email protected]
æžããŸããïŒ
å¯äžã®ç Žå£çãªã®ã¯ãå®éã«ã¯M [1 ãïŒ]ãïŒåçŽïŒãã¯ãã«ã§ãããšããããšã§ãã
è¡è¡åã§ã¯ãªãã ããã§ãªããã°ãããã¯å®éã«ã¯ããªãã¹ã ãŒãºã§ãã
äžæã䌎ããªãäžé£ã®å€æŽïŒ1ã€ã®åžæïŒã ïŒç§ã«ãšã£ãŠïŒäž»ãªã²ãããã¯
ãã®APLã¹ã©ã€ã¹åäœã¯ãã¬ã€ãžãŒãã©ã³ã¹ããŒãºãšçµã¿åãããããšãã§ããŸãã ååŸããå Žå
ãã€ã€ã³ãç§ãã¡ã¯èšç»ãèãåºããä»äºãåå²ããããšãã§ããŸãã å¿ããé¡ã
ãã®æ æ°ãªè»¢çœ®ãšã¹ããŒãžã³ã°ãããé¢æ°ã¯ãããã€ãã®ã³ãŒãåæžãå¯èœã«ãã
ç°¡çŽ åãâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/JuliaLang/julia/issues/4774#issuecomment-59425385 ã
Re 2ïŒ3ïŒå€§ãŸããªçªãåºãããã£ãã®ã§ããã¯ãã«è»¢çœ®ã¯AbstractVector
ãµãã¿ã€ãã§ãã£ãŠã¯ãªããªããšããçµè«ã«éããŸãããããããªããšããã¹ãŠãä¹±éã«ãªããŸãïŒïŒ6837ã®èª¬æãåç
§ïŒã æãæ£ããæ¹æ³ã¯ã Transpose{T,A} <: AbstractMatrix{T}
ãšãå¥ã®Covector
ã¿ã€ãïŒ+ Conjugate
ããªã¢ã³ãïŒã䜿çšããããšã ãšæããŸãã
ç§ãééããä»ã®éèŠãªåé¡ã¯ãç¹å®ã®è¡åã¿ã€ãããã®è»¢çœ®ããŸãã¯ãã®å
±åœ¹è»¢çœ®ã§ãã£ã¹ãããããããšããããšã§ãã æ®å¿µãªãããæ¢åã®ã¿ã€ãã®æ©æ¢°ã§ãããè¡šçŸããæ¹æ³ãæãä»ãããšãã§ããŸããã§ããïŒãã®ã¡ãŒãªã³ã°ãªã¹ãã®èª¬æãåç
§ããŠãã ããïŒã ããããªããã°ã3x3以äžã®å¯èœãªåŒæ°ã®çµã¿åããã§å€ãã®@eval
ãçºçããã®ã§ã¯ãªãããšå¿é
ããŠããŸãã
@simonbyrne ãå®è£ ã®çµéšã
ç§ã¯ïŒããŸãå
¬éãããŠããªããã©ãŒã©ã ã§ãããããããã§ç°¡åã«èšåããŸãïŒãSubArrayã䜿çšã§ããã€ã³ããã¯ã¹ã®ã¿ã€ããæ¡åŒµããããšã«ããããã¹ãŠã®ã·ã§ãŒãã³ã°ã_å
éšçã«_åŠçããããšã代æ¿æ¡ãšããŠææããŸããã ç¹ã«ã芪é
åãVector
å Žåã§ããSubArrayã«è»¢çœ®ããã圢ç¶ãäžããã転眮ç¯å²ãã¿ã€ããæã€ããšãã§ããŸãã ïŒSubArrayã®å®è£
æ¹æ³ã«æ
£ããŠããªãå Žåã¯ãhttpsïŒ//github.com/JuliaLang/julia/blob/d4cab1dd127a6e13deae5652872365653a5f4010/base/subarray.jl#L5-L9ãåç
§ããŠãã ãããïŒ
ãã®ä»£æ¿æŠç¥ã人çã楜ã«ããã®ãããããšãå°é£ã«ããã®ãã¯ããããŸããã ããã«ãããå€éšã«é¢ããã¿ã€ãã®æ°ãæžããŸããã€ãŸããå¿
èŠãªã¡ãœãããå°ãªããªãå¯èœæ§ããããŸãã ïŒ Images
ã®Color
é·ç§»ã®ããã«äžè¶³ããŠããã¡ãœããã_ãŸã _åããŠãã人ãšããŠãããã¯è¯ãããšã®ããã«æããŸããïŒäžæ¹ã䟿å©ãªäžè§ãã£ã¹ãããããªãå Žåã¯ã @simonbyrneã«ãã£ãŠçºçããåé¡ãæªåãããå¯èœæ§ããããéžæçãªã¡ãœãããäœæããã®ãããåä»ã«ãªããŸãã
ã©ããªæŽå¯ã倧æè¿ã§ãã
ãã®ãããªè©³çŽ°ã¯å¥ãšããŠãç§ã¯@StefanKarpinskiã®ææ¡ã®åœ¢ã奜ãã§ãã ç§ã¯APLã¹ã¿ã€ã«ã®ã€ã³ããã¯ã¹äœæã«å€¢äžã«ãªã£ãŠããããã§ã¯ãããŸããããå šäœãšããŠãçŸåšã®Matlabãã掟çããã«ãŒã«ãããåªããéžæã ãšæããŸãã
2ã€ã®èãïŒ
A[[2], :]
ãªã©ã®ã€ã³ããã¯ã¹äœæãæ
£çšçã«ãªã£ãå Žåãåäžã®ã€ã³ããã¯ã¹2
ãã©ããããããã ãã«ãã¯ãã«ãäœæããå¿
èŠãããã®ã¯å°ãç¡é§ã«æããŸãã åãããšããŸãã¯åæ§ã®ããšã«å¯ŸããŠA[(2,), :]
ãèš±å¯ããããšãæ€èšããå¿
èŠããããŸããïŒ åäžã®èŠçŽ ç¯å²ã§åé¡ãªããšæããŸããã [2]
ãšã»ãŒåãããã䟿å©ãªæ§æããããšäŸ¿å©ã§ããnewaxis
ã€ã³ããã¯ã¹ã®ãããªãã®ã§ããã»ãã³ãã³ã䜿çšããã€ã³ããã¯ã¹äœæïŒ A[2;:]
ïŒã¯ãçµæãåžžã«A
ãšåã次å
æ°ã«ãªãå¥ã®ã€ã³ããã¯ã¹äœæã¢ãŒãã«ãªãå¯èœæ§ãããããšãææ¡ããããšèããŠããŸãããã€ãŸããã·ã³ã°ã«ãã³ãåé€ãããã©ã³ã¯ãè€æ°ãããã®ã¯ãã¹ãŠãšã©ãŒã§ãã ç°¡åã«ããããã«ã³ã¢ææ¡ãããããé€å€ããããšã«ããŸãããããã®ãããªãã®ã¯æã£ãŠããã®ã¯è¯ãããšã®ããã«æããŸãã
@simonbyrneã«ãã£ãŠè¡šæãããæžå¿µãèŠãããšãã§ããŸãã ãã ããååãšããŠãã³ãã¯ãã«ã¯ãç°ãªããã¯ãã«ç©ºéãã€ãŸãå察空éã«ååšããåãªããã¯ãã«ã§ããããŸãã ãããã£ãŠã Transpose
ãŸãã¯Covector
ã¿ã€ããAbstractArray
ãµãã¿ã€ãã§ã¯ãªãããã«ããããšããããäžå¿«ã«æããŸãã èãããã解決çã¯ã倧ããªé倧ãªå€æŽã§ãããããããèæ
®ãããªãã§ãããïŒãããããšã«ããèšåãããã£ãã®ã§ããïŒ AbstractArray
ãã¡ããªãŒå
šäœã«è¿œå ã®åãã©ã¡ãŒã¿ãŒtrans
ãäžããããšã§ãã ãå€ã¯:N
ã :T
ãŸãã¯:C
ãŸãã ãã¯ãã«ãæ°å€ã®1次å
ãªã¹ãã§ãããšæ³å®ãããã¹ãŠã®ã¡ãœããã®å Žåããã®æçµãã©ã¡ãŒã¿ãŒã®ç°ãªãå€ãåºå¥ããå¿
èŠããªãããã察å¿ããã¡ãœããå®çŸ©ãçŸåšã®ãŸãŸã«ããããšãã§ããŸãã
N> 2ã®N次å
é
åã«ã¯ãããŸããŸãªãªãã·ã§ã³ããããŸãã transpose
ã§ãšã©ãŒãçºçãã AbstractArray{3,Float64,trans}
ã¿ã€ãã®ãªããžã§ã¯ããå®éã«äœæããããšã¯ã§ããŸããã trans!=:N
ããŸãã¯:T
åã«è¡ã¡ãžã£ãŒãæå³ããŸããŸããäžè¬çãªé
åã®transpose
ã¯ããã¹ãŠã®æ¬¡å
ãéã«ããå¹æããããŸãã åŸè
ã¯ããã³ããŒãºã®ã°ã©ãèšæ³ã䜿çšãã人ã
ã«ãåãå
¥ããããŠããæ
£ç¿ã ãšæããŸãïŒè»¢çœ®ã«ã€ããŠã¯èª¬æãããŠããŸããããhttpïŒ//en.wikipedia.org/wiki/Penrose_graphical_notationãåç
§ããŠãã ããããŸããCvitanoviÄã«ããåŒçšæ¬ãåç
§ããŠãã ããïŒã
transpose
ã§ãµããŒããããŠããä»»æã®ã€ã³ããã¯ã¹é åã®åœ¹å²ã¯å®éã«ã¯ããããŸããããã®ããã®permutedims
ããããæ¹è¯ãããSubArrayã䜿çšããæ æ°ãªã¢ãããŒããããããŸããã ããã«ããã®åé¡ã®äž»ãªåæ©ã¯A_mul_Båç©åãåçŽåããããšã§ãããé«æ¬¡ã®ãã³ãœã«ã®çž®çŽã¯ãšã«ããéåžžã®ä¹ç®ââã§ã¯ãµããŒããããŠããŸããïŒãµããŒããããã¹ãã§ã¯ãããŸããïŒã
ãã®ã¢ãããŒãã«é¢é£ããŠãç§ããŸã èããŠããªãããã€ãã®æ°ããåé¡ããããšç¢ºä¿¡ããŠããŸãã
ããã§ãã£ã¹ãããåé¡ã®åççãªè§£æ±ºçãèŠã€ãããšæã
@Juthoã®ææ¡ã¯é¢çœããã ããæ€èšãã䟡å€ããããšæãã æ®å¿µãªãããããããè©äŸ¡ããå¯äžã®å®éã®æ¹æ³ã¯ãããããå®è£ ããããšããããšã§ãã
@toivoh ã
A[2:2,:]
ããã£ã¡ã³ã·ã§ã³ãä¿æããå²ãåœãŠãæ°ããæ§æã¯å¿
èŠãããŸãããnewaxis
ãããªãã®ã¯éåžžã«å®è¡å¯èœã®ããã§ãã å®éãïŒ8501ã®ã¢ãŒããã¯ãã£ã§ã¯ãã€ã³ããã¯ã¹ãäœæããããšã§çŽæ¥ãããŒããã£ã¹ããäœæã§ããããã§ãããŠãŒã¶ãŒããã®ã¹ãããã«å
¥åããå€ã«é¢ä¿ãªããåžžã«1ã«è§£æ±ºãããã€ã³ããã¯ã¹ã¿ã€ãã䜿çšããŠãã ããã2:2
ã¯ã 2
ã ãã§ãªããã€ã³ããã¯ã¹ã«é·ãåŒãããå Žåã®ç¹°ãè¿ãã§ãã ãã ãããã¡ãããã€ã³ããã¯ã¹ããç¯å²ãäœæããããã«ããã€ã§ãç¬èªã®é¢æ°ãå®çŸ©ã§ããŸãã
éåžžã«è¯ãææ¡ïŒ+1:ã
v' == v
å¿
èŠãªçç±ãæãåºããŠãã ããã
ããã¯æ¬åœã«å¿ èŠã§ã¯ãããŸããããïŒæé次å ã®ïŒãã¯ãã«ç©ºéã®å察ã¯ãããšååã§ãããããããã¯äžçš®ã®çŽ æŽãããããšã§ãã
ããã«åŒ·ãããžã¥ãªã¢ã®é åã¯å ±å€ææ°ãšåå€ææ°ãåºå¥ããªããããããããã«ã«ã空éïŒãŠãŒã¯ãªããè·é¢=åäœè¡å=ã¯ãããã«ãŒãã«ã¿ïŒã®ãã¯ãã«ãšèããã®ãçã«ããªã£ãŠããŸããå®éãå察空éã¯èªç¶ã«ååšããŸããå圢ã
v '== vãå¿
èŠãã©ããã¯ããããŸããããããã¯ããªãçŽäº€ããŠãããšæããŸãã
æ®ãã åè¡åãšãã¯ãã«ãçããå Žåãããããæ¯èŒããå¿
èŠããããŸããïŒ
çããèŠçŽ ããããŸããïŒ
次å æ°ãç°ãªããããå®éã«ã¯å¥ã®åé¡ã§ãã
ç¹ã«ããã®ææ¡ã§ã¯ããã¯ãã«ãšåè¡åã®éã®èå¥ãå¹æçã«åé€ãããŸããããã¯ãè¡åãæ°Žå¹³ãŸãã¯åçŽã«ã¹ã©ã€ã¹ãããšãã©ã¡ãã®æ¹æ³ã§ããã¯ãã«ãåŸãããããã§ãã 以åã¯ãæ«å°Ÿã®ã·ã³ã°ã«ãã³ãã£ã¡ã³ã·ã§ã³ãç¡èŠããããå®éãããå€ããµãããããããããšãã§ããŸããã ãã¯ãã«ã¯é åã®ä»»æã®ã¹ã©ã€ã¹ããååŸã§ããããããããè¡ãããšã¯ãã¯ãè¯ãèãã§ã¯ãããŸããã
æ«å°Ÿã®ã·ã³ã°ã«ãã³æ¬¡å
ãè¿œå ããããšã§ã1次å
ãã2次å
ãŸã§ã®convert
æå³ããããŸããïŒ
ãã®ææ¡ã§ã¯ãããã¯ãã¯ãè¯ãèãã§ã¯ãªããããããªããšæããŸãã ãããããããããã¯ãã«ã¯äŸç¶ãšããŠåã®ããã«åäœããã³ãã¯ãã«ã¯è¡ã®ããã«åäœããããã§ãã
ïŒ8416ã§ç§ãææããããšã®1ã€ã¯ã sparsevec
ãçŸåšåäžåã®CSCãããªãã¯ã¹ãšããŠä¹±éã«åœé ãããŠããããšã§ãã é©åãª1-dã¹ããŒã¹ãã¯ãã«ã¿ã€ããå®è£
ããããšãã¹ããŒã¹ã¯ããã«ããªãããŸãé©åããã¯ãã§ãïŒããã¯ãäžè¬çãªNd COOã¿ã€ãã®æãåçŽãªäŸ¿å©ãªã±ãŒã¹ãšããŠåé¡ãããèšè¿°ããå¿
èŠããããŸãïŒã
ããããã¹ãŠåãå ¥ããŠãã ãããããã§ã次ã¯ããŸããããŸãããïŒ
A [1 ãïŒ] * A * A [ïŒã1]ïŒè¡åããã®è¡*è¡å*è¡åããã®å???
ããªããæžãã
v'wã¯vãšwã®å ç©ã§ããç¹ã«ãããã¯ã¹ã«ã©ãŒã§ããã1èŠçŽ ã®ãã¯ãã«ã§ã¯ãããŸããã
ãŸããv '* wã¯ã¹ã«ã©ãŒã§ããïŒ
dotïŒxãyïŒãïŒ1ã...ã1ãmã1ã...ã1ïŒãšã§ããä»»æã®2ã€ã®ã¢ã€ãã ãåããšããã¢ã€ãã¢ã奜ãã§ã
äœããã£ãŠããããç©ãè¿ããŸãã ããããç§ã¯x * yããã®æå³ã§dotïŒxãyïŒãäžããããããŸãã
xãå
±ãã¯ãã«ã§ãyããã¯ãã«ã§ãªãéãã
ããããããªã«ããããªã¢ã€ãã¢ãã©ããã¯ããããŸããããå€åããã¯å€§äžå€«ã§ããã
A [ïŒã1,1]ã¯ãã¯ãã«ã§ãããA [1ãïŒã1]ãŸãã¯A [ïŒã1 ãïŒ]ã¯å
±ãã¯ãã«ã§ããã
ãã¯ãã«ã®æ¬¡å
ã«æ²¿ã£ãŠè¿œè·¡ããæ¹ãè¯ããšæããŸã-ã¹ããããããªãã
æšæºã®ç·åœ¢ä»£æ°ã§ãã³ãœã«ãåçž®ããããšãã§ããŸã
1ïŒè¡ãã¯ãã«ïŒãš2åãã¯ãã«ã
ç§ã®èŠè§£ã§ã¯ããã®åé¡ã§ä»¥åã«å¯ŸåŠãã2ã€ã®äž»èŠãªèª²é¡ã¯æ¬¡ã®ãšããã§ãã
ïŒAïŒå€æ¬¡å
ããŒã¿ãæäœãããšãã«ããã³ãœã«ã»ãã³ãã£ã¯ã¹ïŒåçž®ã®å ŽåïŒãšé
åã»ãã³ãã£ã¯ã¹ïŒãããŒããã£ã¹ãã®å ŽåïŒãåºå¥ããæ¹æ³ã
ïŒBïŒããé«ã次å
ã«äžè¬åããäžè²«ãããã¬ãŒã ã¯ãŒã¯å
ã«æçœã§äŸ¿å©ãªç·åœ¢ä»£æ°ãåã蟌ãæ¹æ³ã
ãã®ææ¡ããããã®åé¡ã®ãããããã©ã®ããã«æ±ã£ãŠãããã¯ç§ã«ã¯ããããŸããã ç§ã®ç¥ãéããïŒAïŒãéæããã«ã¯ãïŒçŸåšã®æ©èœãšåæ§ã«ïŒã¢ãããã¯ãªãŠãŒã¶ãŒæäœãå¿
èŠã§ãã æ æ°ãªã©ãããŒã䜿çšããŠïŒBïŒã«å¯ŸåŠããã«ã¯ã@ timholyã«ãã£ãŠææ¡ãããSubArrayæ¡åŒµæ©èœã®ãããªãã®ãå¿
èŠã«ãªããŸãããã®æç¹ã§ãããã¯å
ã»ã©èª¬æãããã¹ãã³ã°ã¢ãããŒãã®æ æ°ãªããŒãžã§ã³ã«ãªããŸãã åæ§ã®ã¬ã€ãžãŒã¡ã«ããºã ïŒ List
ã©ãããŒã¿ã€ããªã©ïŒã䜿çšããŠïŒAïŒã®è¿œå ãµããŒããæäŸããããšãæ³åã§ããŸãããããããã¹ãŠã®å Žåã«ãããŠãã¬ã€ãžãŒã¯ãªãã·ã§ã³ã®æŠç¥ã§ããå¿
èŠãããããã«æãããŸãã
ãé«æ¬¡ãã³ãœã«ã®çž®çŽã¯ããšã«ããéåžžã®ä¹ç®ââã§ã¯ãµããŒããããªãïŒãããŠãµããŒããããã¹ãã§ã¯ãªãïŒããšãã@Juthoã®èŠè§£ãå ±æãã人ã®æ°ã¯ããããŸãããããã以äžç°è°ãå±ããããšã¯ã§ããŸãããç§ã¯éåžžã®ãšã³ãžãã¢ãªã³ã°ãšèŠãªããã®ã ããå®è¡ããŸããæ°åŠããããŠç§ã¯ãã€ãããããå¿ èŠãšããŠããŸãã MathematicaãNumPyã®ãããªçŸåšã®èšèªã«ã¯ãã®ç¹ã§èšèšäžã®å¶éããããŸããïŒç§ãäžã§è°è«ããããã«ïŒãå°ãªããšããµããŒããããŠããŸãïŒ ããšãã°ãåçŽãªæ°å€è§£æ³ã§ãã¯ãã«å Žã®åŸé ã䜿çšããå Žåã¯ããã«ãé«æ¬¡ã®ãã³ãœã«ã®çž®çŽãå¿ èŠã«ãªããŸãã
ã...ïŒäžèšã§èª¬æããããã«ïŒãã®ç¹ã§èšèšäžã®å¶éããããŸãããå°ãªããšããµããŒããããŠããŸãããšèšããšããæ©èœãäžè¶³ããŠããããšããŸãã¯ãã¯ãã«ãšè»¢çœ®ã«ã€ããŠåºæ¬çãªããšã§å¯ŸåŠã§ããªãããšã«ã€ããŠè©±ããŠããã®ã§ããïŒããé«ãã¬ãã«ããŸãã¯é¢æ°ãè¿œå ããããšã«ãã£ãŠïŒ
ãã®ææ¡ã«ã€ããŠãããªãã®ãã€ã³ãïŒAïŒãšïŒBïŒãæ¹åããããšã§äœãççŸããããŸããïŒ
ãã³ãœã«ã®çž®çŽãmatlabsã®æšæºçãªä¹ç®æŒç®å*ã«ãã£ãŠããŸãã¯ãã®ä»ã®çµã¿èŸŒã¿ã®matlabé¢æ°ã«ãã£ãŠã©ã®ããã«ãµããŒããããŠãããã¯å®éã«ã¯ããããŸããã Numpyã«ã¯æ©èœãçµã¿èŸŒãŸããŠããŸããïŒååãå¿ããŸããïŒãèŠããŠããéãã§ã¯ããªãå¶éãããŠããŸãã
ç§ãåžžã«æãäžè¬çãªåœ¢åŒã®ãã³ãœã«ã®çž®çŽãå¿ èŠã§ãããã®ãããæãäžè¬çãªãã³ãœã«ã®çž®çŽãæå®ããããšã¯ãå¹ççã«å®è£ ããããšã¯èšããŸã§ããªããå®å šã«ç°¡åã§ã¯ãªãããšãç§ã¯ç¥ã£ãŠããŸãã ãã®ããããŠãŒã¹ã±ãŒã¹ã®ååãã«ããŒããŠããªãJuliaããŒã¹ã®æšæºæŒç®åã«ãååæ©èœããæ©èœãç¹å®ã®æ©èœãè©°ã蟌ãããšããã®ã§ã¯ãªãããã®ããã®ç¹å¥ãªé¢æ°ãå¿ èŠã§ãããšäž»åŒµããŸããã ããããç§ã¯èªåã®æèŠãå€ããŠããããã§ããããšãã°ãä»ã®ã©ã®åçž®ãããã¯ããã«éèŠ/æçšãªãæšæºçãªãåçž®ã1ã€ããå Žåã¯ã©ãã§ããããã ãã ããããã¯ãã¡ã€ã³ã«å€§ããäŸåããå¯èœæ§ããããããJuliaBaseã§æ¡çšããããã®äžè¬çãªã«ãŒã«ãšããŠã¯é©åã§ã¯ãããŸããã
ãªãã¢ã³ã19-okt.-2014 OM 22ïŒ52 heeft thomasmcoffee [email protected] HET volgende geschrevenïŒ
ç§ã®èŠè§£ã§ã¯ããã®åé¡ã§ä»¥åã«å¯ŸåŠãã2ã€ã®äž»èŠãªèª²é¡ã¯æ¬¡ã®ãšããã§ãã
ïŒAïŒå€æ¬¡å ããŒã¿ãæäœãããšãã«ããã³ãœã«ã»ãã³ãã£ã¯ã¹ïŒåçž®ã®å ŽåïŒãšé åã»ãã³ãã£ã¯ã¹ïŒãããŒããã£ã¹ãã®å ŽåïŒãåºå¥ããæ¹æ³ã
ïŒBïŒããé«ã次å ã«äžè¬åããäžè²«ãããã¬ãŒã ã¯ãŒã¯å ã«æçœã§äŸ¿å©ãªç·åœ¢ä»£æ°ãåã蟌ãæ¹æ³ããã®ææ¡ããããã®åé¡ã®ãããããã©ã®ããã«æ±ã£ãŠãããã¯ç§ã«ã¯ããããŸããã ç§ã®ç¥ãéããïŒAïŒãéæããã«ã¯ãïŒçŸåšã®æ©èœãšåæ§ã«ïŒã¢ãããã¯ãªãŠãŒã¶ãŒæäœãå¿ èŠã§ãã æ æ°ãªã©ãããŒã䜿çšããŠïŒBïŒã«å¯ŸåŠããã«ã¯ã@ timholyã«ãã£ãŠææ¡ãããSubArrayæ¡åŒµæ©èœã®ãããªãã®ãå¿ èŠã«ãªããŸãããã®æç¹ã§ãããã¯å ã»ã©èª¬æãããã¹ãã³ã°ã¢ãããŒãã®æ æ°ãªããŒãžã§ã³ã«ãªããŸãã åæ§ã®ã¬ã€ãžãŒã¡ã«ããºã ïŒãªã¹ãã©ãããŒã¿ã€ããªã©ïŒã䜿çšããŠïŒAïŒã®è¿œå ãµããŒããæäŸããããšãæ³åã§ããŸãããããããã¹ãŠã®å Žåã«ãããŠãã¬ã€ãžãŒã¯ãªãã·ã§ã³ã®æŠç¥ã§ããå¿ èŠãããããã«æãããŸãã
ãé«æ¬¡ãã³ãœã«ã®çž®çŽã¯ããšã«ããéåžžã®ä¹ç®ââã§ã¯ãµããŒããããªãïŒãããŠãµããŒããããã¹ãã§ã¯ãªãïŒããšãã@Juthoã®èŠè§£ãå ±æãã人ã®æ°ã¯ããããŸãããããã以äžç°è°ãå±ããããšã¯ã§ããŸãããç§ã¯éåžžã®ãšã³ãžãã¢ãªã³ã°ãšèŠãªããã®ã ããå®è¡ããŸããæ°åŠããããŠç§ã¯ãã€ãããããå¿ èŠãšããŠããŸãã MathematicaãNumPyã®ãããªçŸåšã®èšèªã«ã¯ãã®ç¹ã§èšèšäžã®å¶éããããŸããïŒç§ãäžã§è°è«ããããã«ïŒãå°ãªããšããµããŒããããŠããŸãïŒ ããšãã°ãåçŽãªæ°å€è§£æ³ã§ãã¯ãã«å Žã®åŸé ã䜿çšããå Žåã¯ããã«ãé«æ¬¡ã®ãã³ãœã«ã®çž®çŽãå¿ èŠã«ãªããŸãã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ããã
ãããAã®æåŸã®ã€ã³ããã¯ã¹ãšBã®æåã®ã€ã³ããã¯ã¹ã®çž®çŽã§ã
æ°åŠã®ç¹ã®ãããªãã®
function contract(A,B)
s=size(A)
t=size(B)
reshape(reshape(A, prod(s[1:end-1]), s[end]) * reshape(B,t[1],prod(t[2:end])) , [s[1:end-1]... t[2:end]...]...)
end
ç§ã¯ãã€ãã圢ãå€ãããã䞊ã¹æ¿ããããããããè€éãªãã®ã§äžè¬çãªåçž®ãè¡ãããšãã§ããŸãã
äžèšã®ããã«å€ããå°ãªããå¿
èŠãªãšãã«å
±åœ¹
ãã³ãœã«ã®å€§ããªåé¡ãå®éã«äœã§ãããããããªãããªããããã®ããã€ããå®è£
ã§ããªãã®ã§ããïŒ
é¢æ°ïŒ
ã¯ããæ£ç¢ºã«ã ãã®å·ã§ã¯ãåé²ããããã«è§£æ±ºãããã®ã¯
vector'
ã¯äœãäžããŸããïŒé©åãªã¿ã€ããšæ®µéçãªé¢æ°ã䜿çšãããã³ãœã«ã®çž®çŽã«ã€ããŠã¯ãå®éã«ã¯ããªãé«æ§èœãªå®è£ ãååŸã§ãããšæããŸãã
ç§ã®æ°æã¡ã¯ããã³ãœã«ãèªåãã¡ã®é¢åãèŠãã ãããšããããšã§ãã
ãã®ç·åœ¢ä»£æ°ã®ãŠãŒã¶ãŒã¯ã€ã©ã€ã©ããŸããã
ç§ã®æ倧ã®æžå¿µã¯
ïŒ2Dé åããè¡ãååŸïŒ*ïŒ2Dé åïŒ*ïŒ2Dé åããåãååŸïŒ
ããã¯äžè¬çãªæäœã§ããã
ïŒè¡ãåãïŒcovectorãŸãã¯ãããããã£ãšè¯ã
äžè¬çãªã¹ãããã€ã³ããã¯ã¹ã§ã¿ã°ä»ãããŸãã
@JeffBezanson ããããã®æäœããµããŒããããŠãããšèšããšããçµã¿èŸŒã¿ã®ããŒã¿åãšé¢æ°ã¯ãããšãã°Mathematicaã®Dot
é¢æ°ã®ããã«ããããã念é ã«çœ®ããŠç¹å¥ã«èšèšãããŠããããšãæå³ããŸãã ãããã£ãŠããŠãŒã¶ãŒã«ãšã£ãŠãç¹å®ã®ããšãè¡ãããã®çµã¿èŸŒã¿ã®ãææžåããããããã³/ãŸãã¯æçœãªæ¹æ³ããããŸãã ã©ã®èšèšã§ããçŸåšã®å®è£
ãšåãããã«ãé¢æ°ãè¿œå ããããšã§ãããããã®ã®ãµããŒããå®çŸã§ããŸãã ã€ãŸããæè¡çãªç«¶åã®åé¡ã§ã¯ãªããèšèšã®åé¡ã§ãã
@ Jutho ãMATLABãããŸã䜿çšããªãã®ã§ãã³ã¡ã³ãã§ããŸããã NumPyã®èšèšã¯ïŒäžã§èª¬æããããã«ïŒMathematicaã®èšèšãããäžè²«æ§ãäœãããšã«åæããŸãããããè±å¯ãªåäœç¯å²ããµããŒãããŸãã åºæ¬çãªç·åœ¢ä»£æ°ã¯ããããå¿
èŠãšããªããŠãŒã¶ãŒã«ã¯äžè¬çãªãã³ãœã«æ©æ§ãèŠããªãããã¹ãã§ããããšã«åæããŸãããJuliaã®çŽ æŽãããèšèªæ©èœã®ãããNumPyãšMathematicaã®äž¡æ¹ãæã£ãŠããããã«ããããã«ç°ãªãå®è£
ãå°å
¥ããå¿
èŠã¯ãªãããã§ããããçšåºŠãããããåŸãªãã£ãã ãã®åé¡ã¯ãå°ãªããšãéšåçã«ã¯ãäž¡æ¹ã«é©ããçµ±åã·ã¹ãã ãèŠã€ããŠãäžè¬çãªç·åœ¢ä»£æ°ã®å Žåã«ã©ã®ç¹æ®åã䜿çšããå¿
èŠãããããæããã«ããããšã§ããããã«æãããŸãããããšãã°ã vector'
ã«ã€ããŠã©ãããããªã©ã§ãã
A [1 ãïŒ] * A * A [ïŒã1]ïŒè¡åããã®è¡*è¡å*è¡åããã®å???
æ£è§£â A[1,:]' * A * A[:,1]
ãšæžãå¿
èŠããããŸãã
ãŸããv '* wã¯ã¹ã«ã©ãŒã§ããïŒ
ã¯ãã v'w
ã¯åããã®ã§ãã ãã®ææ¡ã®è¯ãç¹ã®1ã€ã¯ãå®äŸ¡ãªæ§æããã¯ãå®å
šã«æé€ã§ããããšã§ãã
ããããããªã«ããããªã¢ã€ãã¢ãã©ããããããªã...
ããã§ã¯ãªããšæããŸãã ãã®ææ¡ã®ç®æšã®1ã€ã¯ãã¹ã©ã€ã¹ãšã€ã³ããã¯ã¹ã®ã«ãŒã«ã察称ã«ããããšã§ããããã«ãããã€ã³ããã¯ã¹ã®1ã€ãç¹å¥ã«ãªããç®çå šäœãç¡å¹ã«ãªãããã«æãããŸãã ã¹ã©ã€ã¹ãé察称ã«ãªãå Žåã¯ãçŸåšã®åäœãç¶æããããšãã§ããŸãã
@thomasmcoffeeãã£ãšå ·äœçã«ããå¿ èŠããããŸãã ãã¡ããã誰ããç©äºãéŠå°Ÿäžè²«ããææžåãããæçœã§ããããšãªã©ãæãã§ããŸããåé¡ã¯ãããŒãã«äžã®ææ¡ããããã®ç®æšã«åœ¹ç«ã€ãã©ããã§ãã ãã¶ããçŸåšã®ææ¡ã¯ãããã®ç®æšã«ãŸã£ãã圱é¿ãäžããŸãããããã¯åé¡ãããŸãã---ãããä»ã®å Žæã§ã®æ¹åã«ã€ãªããéããç§ãã¡ã¯ãŸã æ£å³ã®æ¹åããããŸãã
ã ããç§ã¯ããããŸã£ããã«ããŸããã
Aãæ£æ¹åœ¢ã§ãªãå Žå
| | çŸåš| ææ¡| MATLAB |
| --- | --- | --- | --- |
| A * A [1 ãïŒ] | ããã| ã¯ã| ããã|
| A * A [1ãïŒ] '| ã¯ã| ããã| ã¯ã|
| A [ïŒã1] A | ããã|
A [ïŒã1] ' A | ã¯ã| ã¯ã| ã¯ã|
Aãæ£æ¹åœ¢ã®å Žå
| | çŸåš| ææ¡| MATLAB |
| --- | --- | --- | --- |
| A * A [ïŒã1] | ã¯ã| ã¯ã| ã¯ã|
| A * A [ïŒã1] '| ããã| ããã| ããã|
| A [1 ãïŒ] A | ããã|
A [1ãïŒ] ' A | ããã| ã¯ã| ããã|
ç§ã¯ããã«å¯Ÿããçããæçš¿ããã°ããã ãšèªããŸãããã©ããããããããã¯ãšãŒãã«ã«æ¶ããŸããã ããã¯ãã¹ãŠæ£ããã§ãã çŸåšã®é 眮ã§ã¯ã転眮ãããã©ããã決å®ãããšãã«ãè¡ã¹ã©ã€ã¹ãšåã¹ã©ã€ã¹ã®ã©ã¡ãã䜿çšããããããã³å·ŠãŸãã¯å³ã§ä¹ç®ãããã©ãããèæ ®ããå¿ èŠããããŸãïŒåã¯å·Šã«è»¢çœ®ãããè¡ã¯å³åŽã«è»¢çœ®ïŒã ææ¡ã§ã¯ãã©ã¡ãã®åŽã§ä¹ç®ãããã®ã¿ãèæ ®ããŸããåžžã«å·ŠåŽã§è»¢çœ®ããå³åŽã§ã¯è»¢çœ®ããŸããã
ãããããã°å€§äžå€«ã§ãããã
dot(x,y)
ãšdot(x.',y)
ãšdot(x,y.')
ãšdot(x.',y.')
ãã¹ãŠåãã¹ã«ã©ãŒãäžããŸããïŒ
ããªãã¡Î£áµ¢conjïŒxáµ¢ïŒ*yáµ¢
ãã®ããã«ããŠãããŸãèããã«dotïŒxãA * yïŒãå®è¡ã§ããŸãã
@alanedelmanã«ãããããã®äŸã¯ãAPLã€ã³ããã¯ã¹ä»ãã®ããã«ããã¹ãã§ãªãå Žæã§å°ãåŸæ¹ã«è»¢çœ®ããŠããããã«æããŸãã ããããããã¯ãç§ãè°è«ãããšæãããã«ãã€ã³ããã¯ã¹ã®æ¬¡å
ãä¿æããããªã¢ã³ããæã€ã®ã«ååãªåæ©ã§ãïŒäŸïŒ A[i; :]
ïŒïŒ
ããããäžèšã®å Žåãã³ãã¯ãã«ãäžããå¿ èŠããããŸãã
@alanedelman ã dot
ãããã®ã¡ãœãããååšããŠã¯ãªãããåãçµæãåŸãããçç±ã¯ããããŸããã
ç§ã¯ãã€ãã圢ãå€ãããã䞊ã¹æ¿ããããããããè€éãªãã®ã§äžè¬çãªåçž®ãè¡ãããšãã§ããŸãã
äžèšã®ããã«å€ããå°ãªããå¿ èŠãªãšãã«å ±åœ¹ïŒBLASã¡ãœãããéžæããå ŽåãTensorOperations.jlã®tensorcontracté¢æ°ã«å®è£ ãããã®ã¯ãŸãã«ãã®æ¹æ³ã§ããããã¯ã倧ããªãã³ãœã«ã«ãšã£ãŠç¢ºãã«æéã§ãã ãŸããCartesian.jlé¢æ°ã䜿çšããŠïŒãããŠã§ããã°ã¹ããŒãžé¢æ°ã䜿çšããŠïŒãã€ãã£ãã®juliaå®è£ ãäœæããŸãããããã«ãããpermutedimïŒè¿œå ã®ã¡ã¢ãªå²ãåœãŠïŒãäžèŠã«ãªãããã³ãœã«ãå°ããã»ã©é«éã«ãªããŸãã
ç§ã¯ãmatlabãJuliaã«ã¯ãªãçµã¿èŸŒã¿æ©èœãæäŸããŠãããšãã誀ã£ã䞻匵ã«å¿ããŠããŸããã ãžã¥ãªã¢ã§ã¯ããªã·ã§ã€ããšããŒãã¥ãŒãããã®äž¡æ¹ãå©çšå¯èœã§ãã Numpyã«ã¯ç¢ºãã«ãããæ£ç¢ºã«è¡ããã³ãœã«ãããé¢æ°ããããŸãããåºåãã³ãœã«ã®ã€ã³ããã¯ã¹é åºãæå®ããããšã¯ã§ããŸããããããã£ãŠãç¹å®ã®åºåé åºã念é ã«çœ®ããŠããå Žåã¯ãåŸã§äžŠã¹æ¿ããå¿ èŠã§ãã
ããããããã¯çŸåšã®ãããã¯ããé¢ããããŠããŸããããã¯ããã¯ãã«ä»£æ°ãšè¡å代æ°ã®äžè²«ããåäœãå®éã«ååŸããããšã§ãã
ã¹ããã¡ã³ã®ææ¡ã¯+1ã ããã¯éåžžã«æ確ã§ããååã«æè»ãªã»ãã³ãã£ã¯ã¹ãäžããããã§ãã ç·åœ¢ä»£æ°ã®ãŠãŒã¶ãŒãšããŠãMATLABã¹ã¿ã€ã«ã®æ§æã«æ £ããŠãã人ã§ããã«ãŒã«ã¯ç°¡åã«äœ¿çšã§ãããšæããŸãã
'
ãäžè¬çã«äœãæå³ããã®ãã«ã€ããŠå°ãæ··ä¹±ããŠããŸãã v
ããã¯ãã«ã®å Žåã v'
ã¯transpose
ã§ãã a
ã2次å
é
åã®å Žåã a'
ãtranspose
ã«ãªããŸãã ãããã¯äž¡æ¹ãšãã b
ã®æåã®æ¬¡å
ãa
ã®æåã®æ¬¡å
ãšçž®å°ããããšã«ãã£ãŠã b' * a
ãç°¡åã«åœ¢æã§ããããã«ããããã«å®çŸ©ãããŠããããã§ãã
a
ã®æ¬¡å
ã> 2ã®å Žåã a'
å®çŸ©ã«ã€ããŠã¯ã³ã³ã»ã³ãµã¹ãåŸãããŠããªãããã§ãã 次å
ãéã«ãã以å€ã®ææ¡ãèããããšããããŸãããããã¯ã b' * a
ãb
ã®æåã®æ¬¡å
ãa
ã®æåã®æ¬¡å
ãšçž®å°ããããšãšäžèŽããŸãã
åäœããŠãããã®ã®ãµã€ãºãåç
§ããã«ã '
ãäœãããã®ããç°¡æœã«è¿°ã¹ãããšãã§ããã°çŽ æŽããããšæããŸãã
äŸãã°ãããäžè¬çãªç¶æ³ã®ããã®ããŒã¹ã§å©çšå¯èœãªå¥ã®åçž®æ©èœãæã€ããšãåççãšæãããcontract(a, b, 2, 3)
ã®ç¬¬äºã®å¯žæ³çž®å°ããa
第3åã§b
ã
ãšããã§ã dot(a,b) == a'*b
ãšãa
ãšb
ãã¯ãã«ã§ããã dot(a,b)
çŸåšã®è¡åã®ããã«å®çŸ©ãããŠããŸããã dot(a,b) = trace(a'*b)
ãŸããïŒ
@madeleineudell ïŒäžè¬çã« 'ãäœãæå³ããã®ãã«ã€ããŠå°ãæ··ä¹±ããŠããŸãã
ç§ã¯ãã®æžå¿µãå ±æããŸãã åºæ¬çã«ãç§ã®ææ¡ã§ã¯ãããããã£2ã5ã7ã8ãããã³10ãå®çŸ©ç¹æ§ãšããŠäœ¿çšã§ããŸãã ã€ãŸãããããä¿æãããïŒ
v'
ã¯1次å
ã§ããããã¯ãã«ã§ã¯ãããŸããv'' === v
v' == v
v'w
ã¯ã¹ã«ã©ãŒã§ãv*w'
ã¯è¡åã§ãv'*M
ã¯v'
ãšåãçš®é¡ã®ãã®ã§ãM'
ã¯2次å
ã§ããããããªãã¯ã¹ã§ã¯ãªãããããªãã¯ã¹ãã¥ãŒã§ããå¯èœæ§ããããŸãç¹ã«ãé«æ¬¡å ã®é åã«å¯ŸããŠãããäœãæå³ãããããŸãã¯äœããããã«ã€ããŠã®å¶çŽã¯ãããŸããã é«æ¬¡å ãå«ãã³ãã¯ãã«ãšã¯äœããšããäžè¬çãªçè«ãããã°ããã®ã§ãããããšãã°ãäžäžã®æ¬¡å ãèšå®ããããå次å ã«ã€ã³ããã¯ã¹ãä»ããããããªã©ãè€éã«ããããã«å®éã«å®è¡ã§ãããšã¯æããŸããã
å°ãªããšãã '
ã®äžè¬çãªèŠåã¯ã次å
ãéã«ããããšã§ã¯ãªãããšã¯æããã§ããããã¯ããã¯ãã«ãå
±ãã¯ãã«ã«å¯ŸããŠè¡ãããšã§ã¯ãªãããã§ãã
ãã¯ãã«ãã³ãã¯ãã«ãããã³è¡åã®äž¡æ¹ã«ã€ããŠäžèšã®åäœããã£ããã£ãããç§ãèããããšãã§ããå¯äžã®åçŽãªã«ãŒã«ã¯ãæåã®2ã€ã®æ¬¡å ã䞊ã¹æ¿ããããšã§ãïŒãã¯ãã«ã«ã¯2çªç®ã®æ¬¡å ããªããã³ãã¯ãã«ã«ã¯1çªç®ãš2çªç®ã®æ¬¡å ããããŸããïŒã
2014幎10æ20æ¥ã«ã¯ãåå9æ05åã§ãtoivoh [email protected]æžããŸããïŒ
å°ãªããšãã 'ã®äžè¬çãªèŠåã¯ã次å ãéã«ããããšã§ã¯ãªãããšã¯æããã§ããããã¯ããã¯ãã«ãå ±ãã¯ãã«ã«å¯ŸããŠè¡ãããšã§ã¯ãªãããã§ãã
ãã¯ãã«ãã³ãã¯ãã«ãããã³è¡åã®äž¡æ¹ã«ã€ããŠäžèšã®åäœããã£ããã£ãããç§ãèããããšãã§ããå¯äžã®åçŽãªã«ãŒã«ã¯ãæåã®2ã€ã®æ¬¡å ã䞊ã¹æ¿ããããšã§ãïŒãã¯ãã«ã«ã¯2çªç®ã®æ¬¡å ããªããã³ãã¯ãã«ã«ã¯1çªç®ãš2çªç®ã®æ¬¡å ããããŸããïŒã
äžè¬çãªãã³ãœã«ã«ã€ããŠèãããã®ã§ããã°ãããã¯çå®ã§ã¯ãªããšç§ã¯äž»åŒµããŸãã è¡åãšãã¯ãã«ãæ°å€ãå«ãããã€ãã®ãããã¯ãšããŠã®ã¿èããvãåãšããŠãv 'ãè¡ãšããŠèããå Žåã¯çå®ãããããŸããã
ãã ããvããã¯ãã«ç©ºéã®èŠçŽ ãšèŠãªããw = v 'ãvãå察空éV_ã®èŠçŽ wã«ãããããæ¹æ³ãšèããå Žåãwã¯ãã¯ãã«ãã€ãŸã1次å ãªããžã§ã¯ãã®ãŸãŸã§ãã äžè¬ã«ãVããV_ãžã®ãã®ãããã³ã°ãå®çŸ©ããã«ã¯ãã¡ããªãã¯ãå¿ èŠã§ããã€ãŸããw_i = g_ {iãj} v ^ jã§ãã ããã§ãVããã«ã«ã空éãã€ãŸãæšæºãŠãŒã¯ãªããè·é¢ã®R ^ nã§ããå ŽåãV *ã¯èªç¶ã«Vãšååã§ããããã¯ãäžäœãŸãã¯äžäœã®ã€ã³ããã¯ã¹ïŒå ±å€ãŸãã¯åå€ïŒã®æŠå¿µããªããããw_i = v_iã§ããããšãæå³ããŸãã = v ^ i = w ^ iã ããã¯ã»ãšãã©ã®ããã°ã©ãã³ã°ã§äœ¿çšãããã±ãŒã¹ãã€ãŸãJuliaBaseã§ãµããŒãããå¿ èŠãããã±ãŒã¹ã§ãããšç§ã¯äž»åŒµããŸãã ïŒè€çŽ ãã¯ãã«ç©ºéã®å ŽåãV *ã¯èªç¶ã«Vbarãã€ãŸãå ±åœ¹ãã¯ãã«ç©ºéãšååã§ãããããèªç¶ãããã³ã°ã¯w_i = conjïŒv ^ iïŒã§ããïŒ
ãã¯ãã«ãæ°å€ã®ããåãšããŠãå察ãã¯ãã«ãæ°å€ã®ããè¡ãšããŠããããã£ãŠè¡åïŒV \ otimes V_ã®èŠçŽ ïŒãæ°å€ã®ãããããã¯ãšããŠè¡šãèŠåã¯éåžžã«äŸ¿å©ã§ãããé«æ¬¡å ãèæ ®ãããå Žåã¯ããã«åæ¢ããŸãé åãã€ãŸãé«æ¬¡ãã³ãœã«ç©ç©ºéã®èŠçŽ ã ãã®å Žåããè¡ãã¯ãã«ããã€ãŸãæåã®æ¬¡å ã®ãµã€ãºã1ã§ãã2次å ãªããžã§ã¯ãã¯ãmatlab / juliaã®çšèªã§èšããšããã³ãœã«ç©ç©ºéV1 \ otimes V2ã®èŠçŽ ã§ãããV1ã¯æ¬¡ã®ããã«ãªããŸãã RïŒãŸãã¯ä»ã®1次å 空éïŒã§ããã ãããããã©ã«ãã®åäœãšããŠæããã®ã§ã¯ãªãå¯èœæ§ãããããšã«åæããŸãããmatlabã®ããã«ãäžè¬çãªé åã®è»¢çœ®ãå®çŸ©ããŠpermutedimãåç §ããããšããªãæ¹ããããšæããŸãã äžè¬çãªãã³ãœã«ã®æåã®2次å ãããã©ã«ãã®èŠåãšããŠéã«ããããšã¯ãæå³ããããŸããã ããã€ãã®é«æ¬¡ãã³ãœã«ç©ç©ºéããã®èŠçŽ ã®è»¢çœ®V1 \ otimes V2 \ otimesâŠ\ otimesVnã«ã¯äžæã®å®çŸ©ããããŸããã ãã¹ãŠã®å¯žæ³ãéã«ããèŠåã¯ãäžèšã®ããã«ããã³ããŒãºã«ãã䟿å©ãªã°ã©ãã£ãã¯è¡šçŸã«ç±æ¥ããŠããŸãã ããã«ãããã¯è¡å空éïŒV \ otimes V_ïŒãããèªäœïŒV * \ otimes V * = V \ otimes V ïŒã«ããããããã®ã§ãã
ç§ã¯2ã€ã®æ¹æ³ãèŠãããšãã§ããŸãïŒ
1ïŒã«ã«ãã·ã¢ã³ãã³ãœã«ã®èšå®å
ã§ïŒã€ãŸããäžäœã€ã³ããã¯ã¹ãšäžäœã€ã³ããã¯ã¹ãåºå¥ããã«ïŒãéžæããèŠåã䜿çšããŠãã³ã³ãããšã³ã¹æŒç®å 'ïŒããã³å Žåã«ãã£ãŠã¯*ïŒãä»»æã®é«æ¬¡é
åã§æ©èœãããã ããã¯ãå
žåçãªãŠãŒã¹ã±ãŒã¹ã§ããã€ãã®é©ãã¹ãçµæãããããå¯èœæ§ããããŸãã
2ïŒ 'ãš*ããã¯ãã«ãšè¡åã«å¶éããŸãã é«æ¬¡é åã§ãšã©ãŒãçºçããŸããã ãããæãäžè¬çãªã¢ãããŒãã ãšæããŸãïŒMatlabãªã©ïŒã
ãã®æçš¿ã¯ãæšå¹Žç§ãåã£ãç«å Žãšã¯å°ãå察åŽã«ãããã®ã§ãã
ããã倧äžå€«ã ãšããã®ã§ããã
ã€ãã«ãçŸåšã®ã¢ãããŒãã«ã¯è«çãããããšã«æ°ã¥ããŸããããããã¯æ確ã«è¡šçŸãããŠããŸããã§ããã
ããã¯ããã¯ã®ããã«èŠããã®ã§ãç§ãèç«ãããŸããã ã©ããããããç§ã¯ç解ããŸãã
ãããç§ã¯ããããã£ãšå¥œãã§ãã
çŸåšã®ã¢ãããŒãã§ã¯ããã¹ãŠã®é
åã¯ç¡é次å
ã§ãããæé»ã®1ãåé€ãããŸãã
ã¢ãã¹ãããã£æŒç®å 'ã¯ãæåã®2ã€ã®æ¬¡å
ã亀æããããšãæå³ããŠããå¯èœæ§ããããŸãã
ãããå®éã«ã¯ãããã¯ä»æ¥ååšããŠããã®ã§ãããã¯
ndimïŒAïŒ<= 2ïŒ äº€æ_first_two_dimsïŒno_op
ä»ã®ã¿ããªããããèŠãŠãç§ããããèŠéããå Žåã¯ç³ãèš³ãããŸããã ç§ã®å¿ã¯è¡ãè©°ãŸããŸãã
ãã¯ãã«ã¯ç¡é次å
ã§ã¯ãªãäžæ¬¡å
ã§ãããšããèãã§ããããŠ
ãããã£ãŠã転眮ã¯æ¬¡å
ãéã«ããå¿
èŠãããããããã£ãŠno_opã«ãªããŸãã
ãããè¡ãã¢ãã¹ãããã£ããŸãã¯åžžã«äº€æããã¢ãã¹ãããã£ã§å€§äžå€«ã§ã
æåã®2ã€ã®æ¬¡å
-ç§ã¯æ°ã«ããªããšæããŸãã ã¢ãã¹ãããã£ãååšãããšæããŸã
å€éç·åœ¢ä»£æ°ã§ã¯ãªãç·åœ¢ä»£æ°ã®å Žåã
ã¢ãã¹ãããã£ã¹ã¿ãŒïŒ "'*"ïŒïŒå¯èœã§ããã°ïŒãŸãã¯äžå¯èœãªå Žåã¯ä»ã®äœãïŒãã©ããããããããŸãããŸãã
æåŸã®æ¬¡å
ãæåã®æ¬¡å
ã«çž®å°ããããšãæå³ããå¿
èŠããããŸãïŒMathematicaã®ãããã®ããã«ïŒ
aplã€ã³ããã¯ã¹ããããã³ãã¯ãã«ã¯ãããŸããã ç§ã®è³ã®äžéšã¯ãŸã ãããæ¢æ±ãã䟡å€ããããšèããŠããŸãã
ããããç§ãç®ãèŠãŸããšãããã¯çŸåšã®ã¢ãããŒãããŸããŸãè¯ããªã£ãŠããããã«èŠããŸãã
ïŒä»æ¥ã®åŸåã®æ°æã¡ãèŠãŠã¿ãŸãããïŒ
å»å¹Žãã®ã¹ã¬ãããå§ããããšãåŸæããŠããŸããããã©ã®ãããªå ŽåãããäžåºŠçåã«æããŸã
ä»æ¥ã®äººã
ã¯æ¬åœã«è¿·æã§ã...äŸã®ãªã¹ããå
¥æã§ããŸããïŒ ... ãããŠ
ãããã®ã±ãŒã¹ã«å
ãåœãŠãããšã¯ãç§ãã¡ãè¡ãããšãå€ãããããåªããŠããŸãã
ç§ã¯ãã®ã¹ã¬ããå
šäœãèªã¿ãå€ãã®å€ãã®ååãèŠãŠããŸãã-ããã¯è¯ãããšã§ãã
ããããç©äºã«é ãæ©ãŸããã®ã«ååãªãŠãŒã¹ã±ãŒã¹ã§ã¯ãããŸããã
ç§ã¯ãã°ãã°ã€ã©ã€ã©ããŠãããšèšãããšãã§ããŸã
[1 2 3] ïŒndims == 2
[1,2,3] ïŒndims == 1
[1; 2; 3] ïŒndims == 1
äž»ã«èŠããŠããªãããã§ãã
ãã ã®æèå®éšã @alanedelmanã'*
ã«å¯ŸããŠå¿µé ã«çœ®ããŠããã®ãšåæ§ã®åçž®æŒç®åãšããŠæ©èœããããã«ã *
ãåå®çŸ©ããå Žåãã©ã®æ©èœã倱ãããŸããïŒ ç·åœ¢ä»£æ°æŒç®ã§ã®'
ã®å¿
èŠæ§ãå®å
šã«æé€ããŸãããïŒè¡åã®è»¢çœ®ãšããŠæ©èœããããšã¯å¥ãšããŠïŒïŒ outer(w,v)
ç°¡åã«çœ®ãæããããšãã§ããå€ç©w*v'
ããªãããšãããããŸãã
ç·šéïŒãããAPLã¹ã©ã€ã¹ã§ãããšä»®å®ããŸãã ããšãã°ã A[1,:]*A*A[:,1]
ã¯ãæåã®ãªãã©ã³ãã'
ã§è»¢çœ®ããå¿
èŠãªãã«ãæåŸ
ãããçµæããããããŸãã
ç§ããããèããŸããã ãããç©ã§ããv * wã¯ãã¹ããã€ãã®éè² è·ã®ããã«èŠãããšæããŸã
ãšã©ãŒãçºçããããå¯èœæ§ããããŸãã
ããã¯æ°åŠã®ç¹ãããã»ã©æªããªãããã«èŠãã1ã€ã®å Žæã§ãã
èŠçŽãããšãæåŸããæåãŸã§ã®å¥çŽã¯åççã«æããŸããã
ã¢ãã¹ãããã£ã¹ã¿ãŒã§ãããã*ã§ãããããããã§ããå¿
èŠããããã©ãã
åé¡ããããŸãã
ããç¡é¢ä¿ã§ãããå®å
šã«ç¡é¢ä¿ã§ã¯ãããŸãã...ã
ããšããšèª°ãããããã¹ã¿ãŒãšèªãã§ãããããã¹ã¿ãŒïŒãšèšãããŠããŸãïŒã¯
POINTWISEæŒç®åãäœã ã£ãã®ã§ããã€ã³ãã¹ã¿ãŒã«ãªãããšãæå³ããŸãã
æå³ãããŸãã
ç§ã¯ãã°ãã°ã€ã©ã€ã©ããŠãããšèšãããšãã§ããŸã
[1 2 3] ïŒndims == 2
[1,2,3] ïŒndims == 1
[1; 2; 3] ïŒndims == 1äž»ã«èŠããŠããªãããã§ãã
ç§ã¯ãã€ãã ,
ã ãã䜿ã£ãŠã¿ãŸãããïŒããšèããŠããŸããã
@alanedelmanã '*ã«å¯ŸããŠå¿µé ã«çœ®ããŠããã®ãšåæ§ã®åçž®æŒç®åãšããŠæ©èœããããã«*ãåå®çŸ©ããå Žåãã©ã®æ©èœã倱ãããŸããïŒ
çµåæ§ã倱ãããŸããããšãã°ã (M*v)*v
ã¯çŸåšã®dot(v,M*v)
ïŒã¹ã«ã©ãŒïŒãäžããŸããã M*(v*v)
ã¯M.*dot(v,v)
ïŒè¡åïŒãäžããŸãã
dot
åçž®æŒç®åïŒãšã«ããçµåæ³åã§ã¯ãªãïŒã«ããªãã®ã¯ãªãã§ããïŒ ddot(A::Matrix,B::Matrix) == Aâ
â
B == trace(A'*B)
é«éåçž®ãå®çŸ©ããããšãã§ããŸãã
ããã§ããã¯ãã«è»¢çœ®ãå°å
¥ããå¯äžã®ç®çã¯ã *
éçµåæ§ããç§ãã¡ãæãããšã§ããããšãæ£ããç解ããŠããŸããïŒ @alanedelmanã®äŸã®ãããŸããã¯ããã¯ãã«ã®1ã€ã転眮ããããšã§ä¿®æ£ã§ããŸããïŒ M*v*v'
vs M*v'*v
ïŒãæ¬åŒ§ã䜿çšããŠãåãããšãã§ããŸãïŒ M*(v*v)
vs (M*v)*v
ïŒãã¯ãã«ã®è»¢çœ®ãå®è£
ããæéãäžåãããã«ïŒ @Juthoãé«æ¬¡ãã³ãœã«ã®è»¢çœ®ãå®è£
ããããšã¯æ°åŠçã«æå³ããªãããšããã§ã«ææããŠããããã«ïŒã ç§ã«ãšã£ãŠã®åé¡ã¯ãã©ã¡ãã®è¡šèšæ³ãããèªã¿ããã/ç°¡æœã§/ãšã¬ã¬ã³ãã§/çŽç²ã§ããããšããããšã§ãã
å®éã M*(v*v)
ãš(M*v)*v
ã¯çŸåšäž¡æ¹ãšã次ã®ããã«è§£æãããŸã
*(M, v, v)
åŒæ°ã®ãµã€ãºã«åºã¥ããŠä¹ç®ã®é åºãæé©åããè¡åç©ãå¯èœã«ãããããããŒãµãŒãå€æŽããå¿ èŠããããŸãã
ããããå°ãªããšãå人çã«ã¯ãé£æ³æ§ã¯ããªã倧ããªåé¡ã ãšæããŸãã æ°åŠãšã»ãšãã©ã®ããã°ã©ãã³ã°èšèªã®éã§ç¿»èš³ããå¿ èŠããããŸãã ãžã¥ãªã¢ã«ãšã£ãŠãç§ã¯ãŸã ããªããããŸã翻蚳ããå¿ èŠããªãããšãé¡ã£ãŠããŸãã
ïŒ @Juthoããã§ã«ææããŠããããã«ãé«æ¬¡ãã³ãœã«ã«ç§»èª¿ãå®è£ ããããšã¯ãæ°åŠçã«ã¯æå³ããããŸããïŒã
ãããç§ãèšã£ãããšãšãŸã£ããåãã§ã¯ãªããšæããŸãã
@alanedelmanã '*ã«å¯ŸããŠå¿µé ã«çœ®ããŠããã®ãšåæ§ã®åçž®æŒç®åãšããŠæ©èœããããã«*ãåå®çŸ©ããå Žåãã©ã®æ©èœã倱ãããŸããïŒ
çµåæ§ã倱ãããŸããããšãã°ãïŒM_vïŒ_vã¯çŸåšã®dotïŒvãM_vïŒïŒã¹ã«ã©ãŒïŒãäžããŸãããM_ïŒv_vïŒã¯M._dotïŒvãvïŒïŒè¡åïŒãäžããŸãã
ããããåçž®æŒç®åïŒãšã«ããçµåæ³åã§ã¯ãªãïŒã«ããªãã®ã¯ãªãã§ããïŒ ãŸããddotïŒA :: MatrixãB :: MatrixïŒ==Aâ â B== traceïŒA '* BïŒã®ããã«é«æ¬¡ã®åçž®ãå®çŸ©ããããšãã§ããŸãã
ãã®æšè«ã®è¡ã§ããã¯ãã«ãšè¡åã®ä¹ç®æŒç®åã¯ããå¿
èŠãããŸããããããã§ãã¹ãŠãæžãããšãã§ããŸãã
AâB
Aâv
vâAâw
vâw
ããã¯@pwlã®ææ¡ã§ããã*ã¯ãããã«çœ®ãæããããŠããŸãã
ããããå°ãªããšãå人çã«ã¯ãé£æ³æ§ã¯ããªã倧ããªåé¡ã ãšæããŸãã æ°åŠãšã»ãšãã©ã®ããã°ã©ãã³ã°èšèªã®éã§ç¿»èš³ããå¿ èŠããããŸãã ãžã¥ãªã¢ã«ãšã£ãŠãç§ã¯ãŸã ããªããããŸã翻蚳ããå¿ èŠããªãããšãé¡ã£ãŠããŸãã
åé¡ã®äžéšã¯ãæ°åŠã§ãããŸããŸãªæ £ç¿ãããããšã ãšæããŸãã è¡ãšåã®ãã¯ãã«ã®æ°åŠã®èŠ³ç¹ããèããŠããŸããããããšãç·åœ¢æŒç®åãšå察空éã®èŠ³ç¹ããããæœè±¡çãªåäœãå¿ èŠã§ããïŒæŒç®åã¯ãã¯ãã«ã§ä¹ç®ãããŸãããããã¯ãã«ã«é©çšããããšæããŸãã®ã§ããªãæžããŸãããïŒ A * vãŸãã¯Aâvã®ä»£ããã«AïŒvïŒïŒ
ç§ã¯äŸ¿å©ãªæ§æãããŸãå¿ èŠãšããŸãããåè ã¯åºæ¬ã«äŸåããªãæ°åŠæŒç®ãããæ確ã«è¡šçŸãããããå人çã«ã¯æ¯åv '* wãããdotïŒvãwïŒãæžãããšã奜ã¿ãŸãïŒå®éãæåã«ãã¯ãã«ããå察ãã¯ãã«ãžã®èªç¶ãªãããã³ã°ã®åã®å ç©ãå®çŸ©ã§ããŸãïŒ=
ããŸãã«ãç¡ç¥ã§ç³ãèš³ãããŸãããããªãM[1, :]
転眮ããŠã v'
ããã«æ¯ãèãããšãã§ããªãã®ã§ããïŒ
ç§ãæ©ãŸããŠãããã®ã®ãªã¹ãã«è¿œå ããŸã
1.1ã
[1 2 3] # ndims == 2
[1,2,3] # ndims == 1
[1;2;3] # ndims == 1
2.2ã
v=rand(3)
v' * v
ã¯çŸåšndims == 1
æã£ãŠããŸãïŒ @StefanKarpinskiã®ææ¡ã¯ãããä¿®æ£ããŸãïŒ
(v' * v)/( v' * v )
ã¯ndims ==2
ïŒããã¯æ¬åœã«ç§ãæ©ãŸããä¿®æ£ãããã§ãããïŒ
ããã§ãç§ã¯æ¬åœã«ã³ãã¯ãã«ãæãã§ããŸãã
ãããŠaplã€ã³ããã¯ã¹ã¯ç§ãè¡ã£ããæ¥ãããç¶ãããã®ã§ã
---ãŸã èããŠããŸããã次ã®ãããªãã®ã®ãªã¹ããèŠãŠã¿ããã§ã
çŸåšã®ãžã¥ãªã¢ã®ä»ã®äººã
ã«ãã°ãå ±åãã
ç§ã¯ééããªãcdotã®ã¢ã€ãã¢ã奜ãã§ã
dotïŒaãbã..ïŒãèš±å¯ãããšãéåžžã«äžè¬çãªççŸãå¯èœã«ãªããŸãã
Numpyã®åœåèŠåïŒãããŠããããç§ã®åã®æçš¿ã®å€èŠ³ïŒã«ãããããããç§ã¯äžè¬çãªãã³ãœã«ã®çž®çŽã«ãããã䜿çšããããšã«ã€ããŠããã¶ãè€éãªæ°æã¡ãæã£ãŠããŸãã ããã¯ãŠã£ãããã£ã¢ã®æåã®æã§ãïŒ
æ°åŠã§ã¯ãå ç©ããŸãã¯å ç©ïŒãŸãã¯ãŠãŒã¯ãªãã空éã®ã³ã³ããã¹ãã§ã¯å ç©ïŒã¯ã2ã€ã®çããé·ãã®æ°ã®ã·ãŒã±ã³ã¹ïŒéåžžã¯åº§æšãã¯ãã«ïŒãåãã1ã€ã®æ°ãè¿ã代æ°æŒç®ã§ãã
ç§ã®èãã§ãããããã¯ã¹ã«ã©ãŒãè¿ãå¿ èŠããããŸãã
@ brk00 ãããªãã®è³ªåã®åé¡ã¯ããããé«æ¬¡å /é«ã©ã³ã¯ïŒç§ã¯ããã®äžç次å ãæ¬åœã«å«ãã§ãïŒé åã®ã¹ã©ã€ã¹ã«æ¡åŒµããæ¹æ³ãæ確ã§ãªãããšã§ãã
ããŸãã«ãç¡ç¥ã§ç³ãèš³ãããŸãããããªãM [1 ãïŒ]ã転眮ããŠãv 'ã®ããã«æ¯ãèãããšãã§ããªãã®ã§ããïŒ
ããã¯å¯èœã§ããããããã©ã®ããã«äžè¬åããŸããïŒ
@Jutho ãç³ãèš³ãããŸãããã
@alanedelman ïŒ
ç§ãæ©ãŸããŠãããã®ã®ãªã¹ãã«è¿œå ããŸã
[1 2 3] ïŒndims == 2
[1,2,3] ïŒndims == 1
[1; 2; 3] ïŒndims == 1
é£çµåäœã¯ãã®åé¡ãšã¯ç¡é¢ä¿ã§ãã ãã以äžæ°Žãæ¿ããªãããã«ããŸãããã
*æŒç®åã«å ããŠæåŸã®ã€ã³ããã¯ã¹ãæåã®ã€ã³ããã¯ã¹ã«çž®å°ãã `cdotã®ã¢ã€ãã¢ãééããªã奜ãã§ã
dotïŒaãbã..ïŒãèš±å¯ãããšãéåžžã«äžè¬çãªççŸãå¯èœã«ãªããŸãã
ãããæ¥ç·ã§ãã é åãšã¹ã©ã€ã¹ã«éäžããŸãããã
çŸåšã®ã¢ãããŒãã§ã¯ããã¹ãŠã®é åã¯ç¡é次å ã§ãããæé»ã®1ãåé€ãããŸãã
ããã¯å®éã«ã¯çå®ã§ã¯ãããŸããã ãããåœãŠã¯ãŸãå Žåã ones(n)
ã ones(n,1)
ã ones(n,1,1)
ãªã©ã®åºå¥ã¯ãããŸããããããããããã¯ãã¹ãŠç°ãªãã¿ã€ãã®ç°ãªããªããžã§ã¯ãã§ãããããããã«çããã¯ãããŸããããã®ä»ã _åæ§ã«_åäœããããã«å®è£
ããããã«åªåããŠããŸãããå®éã«ç¡é次å
ã§ããé
åãšã¯ããé¢ããŠããŸãã
çŸåšåä»ãªãã®ã®ãªã¹ãã¯ãäžèšã®ææ¡ã®åªããç¹æ§ïŒã®ãµãã»ããïŒã倧éšååæ ããŠããŸãã ããªãã¡ïŒ
v'' !== v
âå®éã«ã¯v'' != v
; ããã¯ãã©ã³ã¯ãåãã§ã¯ãªãããã§ããv' != v
âåãååŒãv'w
ã¯1èŠçŽ ã®ãã¯ãã«ã§ãããã¹ã«ã©ãŒã§ã¯ãããŸãããA*_mul_B*
ç¹å¥ãªè§£æãå¿
èŠã§ããããã¯ããããŸã§ã§æãã²ã©ãããšã§ããv' == v
ããããé€ããŠã @ StefanKarpinskiã®ã»ãšãã©ã®ãã€ã³ãã«åæããŸããããããçãããªããã°ãªããªããšæããŸãã ã¯ãããããã¯ååã§ããå¯èœæ§ããããŸãããåäœãéåžžã«ç°ãªããšããç¹ã§ãäŸç¶ãšããŠç°ãªããªããžã§ã¯ãã§ããè¡åM
ãšM'
ãååã§ãããããããçããããããšã¯æããªãïŒãã¡ãããšã«ããŒãã§ãªãéãïŒã
Covector
ã¿ã€ãã«é¢ããç§ã®äžè¬çãªèŠè§£ã¯ããããã¯æ¯èŒç軜éã§ãããšãããã®ã§ãããåºæ¬çãªæäœïŒä¹ç®ãå ç®ãªã©ïŒãé€ããŠãããŸãã«ãå€ãã®æäœãå®çŸ©ããããšã¯é¿ããŸãïŒã€ã³ããã¯ã¹ãå®çŸ©ããããšããèºèºããŸãïŒã ïŒã ããã䜿ã£ãŠäœãããããå Žåã¯ãããããã¯ãã«ã«å€æããŠãããã§äœæ¥ãè¡ãå¿
èŠããããŸãã
ãã@StefanKarpinskiã®åœŒã®äžè¬çãªæ¿èªãå«ããã€ã¯ãã®èŠè§£ã@simonbyrneãã1ã
@simonbyrneã«ãåæããŸãã
ã¯ãã v
ãšv'
ã¯ç°ãªãã¿ã€ãã§ãããåã圢ç¶ãšããŒã¿ãæã€ç°ãªãé
åã¿ã€ãã¯åãã§ãããšãã§ã«èããŠããŸãïŒããšãã°ã speye(5) == eye(5)
ã ã³ãã¯ãã«ãã¹ããŒã¹ãšç°ãªãã®ã¯ãªãã§ããïŒ
ã³ãã¯ãã«ãè¡è¡åã®ããã«ãããŒããã£ã¹ããããããšãé¡ã£ãŠããŸãã çãããšèŠãªãããé
åA
ãšB
å ŽåããããŸã§ã®ãšããã
all(A .== B)
1ã€ããã¯ãã«ã§ããã1ã€ãå ±ãã¯ãã«ã®å Žåãããã¯åœãŠã¯ãŸããŸããã
ç§ã«ãšã£ãŠãã³ãã¯ãã«ã¯ããã¯ãã«ãåã®è¡åãšããããããè¡ã®è¡åã«äŒŒãŠããŸãã
éèŠãªè³ªåã¯size(v'
ãšã¯äœã§ããïŒ çãã(length(v),)
å Žåã v == v'
ã¯æ£ããã¯ãã ãšæããŸãã size(v') == (1,length(v))
å Žåãããããfalseã§ããã¯ãã§ãããããããv' == reshape(v,1,length(v))
ã¯trueã§ããã¯ãã§ãã ãããã£ãŠãåé¡ã¯ã v'
ç¹å¥ãªçš®é¡ã®ãã¯ãã«ã«ããããç¹å¥ãªçš®é¡ã®è¡åã«ããããšããããšã§ãã
ãã®åé¡ã¯ã転眮ãå®éã«äœãæå³ããã®ããšããããšã§ãããšç§ã¯ãŸããŸã確信ããŠããŸãã
ã³ãã¯ãã«ã¯å®éã«ã¯é
åã§ã¯ãªãã®ã§ãããããã©ã®ãããªã圢ç¶ããæã£ãŠããããå®éã«èšãããšã¯ã§ããªããšæããŸãã ã³ãã¯ãã«ã¯å®éã«ã¯ãããäœããããã«ãã£ãŠå®çŸ©ãããŸããã€ãŸãã *(::Covector, ::Vector)
ã¯ã¹ã«ã©ãŒãäžããŸãã AbstractVector
ã¯ãããè¡ããªãã®ã§ãå®éã«ã¯åãããšã§ã¯ãããŸããã
ãã1ã€ã®åé¡ã¯ãè€éãªãã£ãŒã«ãã«ãããŸãã v' == v
ãŸãã¯v.' == v
ãŸããïŒ
@simonbyrne ïŒ
ã³ãã¯ãã«ã¯å®éã«ã¯ãããäœããããã«ãã£ãŠå®çŸ©ãããŸããã€ãŸãã
*(::Covector, ::Vector)
ã¯ã¹ã«ã©ãŒãäžããŸããAbstractVector
ã¯ãããè¡ããªãã®ã§ãå®éã«ã¯åãããšã§ã¯ãããŸããã
ããã¯æ¬åœã«è¯ãç¹ã§ãã ãã ãã v'
ããªããžã§ã¯ããšããŠäœ¿çšã§ããªãå Žåã¯ãããªãã€ã©ã€ã©ããå¯èœæ§ããããŸãã ããããæ£ããã¢ãããŒãã¯ã v'
ãé¢çœããã¯ãã«ã§ã¯ãªãé¢çœãè¡è¡åãšããŠæ±ãããšã§ãã
ããããæ£ããã¢ãããŒãã¯ãv 'ãé¢çœããã¯ãã«ã§ã¯ãªãé¢çœãè¡è¡åãšããŠæ±ãããšã§ãã
äžçš®ã§ããã AbstractMatrix
ãµãã¿ã€ãã§ããªããšæããŸãã AbstractCovector
ã¯ãããã¬ãã«ã®ã¿ã€ãã§ããå¿
èŠããããšæããŸãã length(::Covector)
ãå®çŸ©ã§ããã°å¹žãã§ããã size
ã¡ãœãããå®çŸ©ããå¿
èŠã¯ãªããšæããŸãã
æŸéã®æ±ãã«ã€ããŠã¯ããããããŸãããåççãªåºæºãèãåºããªãéããæŸéæ¹æ³ãå®çŸ©ããªãããšã«èª€ãããããŸãã
ãã®è°è«ã¯ããšã³ãžãã¢ãªã³ã°ã§äœ¿çšããããããªè»¢çœ®ãšãã¯ãã«ã®äœ¿çšã«åãã£ãŠåæããŠããããã§ããã€ãŸãããã¹ãŠãè¡åãšèŠãªããŸãã ãã¯ãã«ãåã察æµåŒæŸç±åšãè¡ãšèããŠãã ããã ããã¯ãã«ã«ã空éïŒå žââåçãªäœ¿çšäŸïŒã®ãã¯ãã«ãšç·åœ¢ååã«ã¯é©ããŠããŸãããå€éç·åœ¢ä»£æ°ãããäžè¬çãªãã¯ãã«ç©ºéãªã©ã«äžè¬åããããšãããšå€±æãå§ããŸãããã«ã«ã空éå€ãã®ãã®ã¯åçã§ãããäžè¬çãªç©ºéãšã¯åçã§ã¯ãããŸããã ãžã¥ãªã¢ã®ããã©ã«ãã®æ¯ãèããšããŠãç§ã¯å¿ ãããããã«å察ããŠããããã§ã¯ãããŸãããããæ°åŠçã«æ£ããããã®ããã«ãäžèšã®ã¹ããŒãã¡ã³ãã®ããã€ãã«æ¬åœã«åæããŸããã ã ããç§ã¯ä»¥äžã®ãã®ãšççŸãããŠãã ããã
2014幎10æ20æ¥ã«ã¯ã17æ39åã§ããµã€ã¢ã³ã»ããŒã³ãºã®[email protected]ã¯æžããŸããïŒ
v '== vããããé€ããŠã @ StefanKarpinskiã®ã»ãšãã©ã®ç¹ã«åæããŸããããããçãããªããã°ãªããªããšæããŸãã ã¯ãããããã¯ååã§ããå¯èœæ§ããããŸãããåäœãéåžžã«ç°ãªããšããç¹ã§ãäŸç¶ãšããŠç°ãªããªããžã§ã¯ãã§ããè¡åMãšM 'ãååã§ãããïŒãã¡ãããšã«ããŒãã§ãªãéãïŒçãããªãããšã¯ãªããšæããŸãã
ãã®ã¹ããŒãã¡ã³ãã¯ãã©ã®ã¬ãã«ã§ãæå³ããããŸããã
1ïŒãããªãã¯ããã§ååã®æå³ãä¹±çšããŠãããšæããŸãã ååã¯ã2ã€ã®ã¹ããŒã¹éã®é¢ä¿ã§ãïŒãã®èšå®ã§ã¯ïŒã äžè¬ã«ããã¹ãŠã®ïŒå®ïŒãã¯ãã«ç©ºéVã«ã¯ãç·åœ¢é¢æ°ã®å察空éV *ããããŸãïŒè€éãªç©ºéã®å Žåãå ±åœ¹ç©ºéãšå ±åœ¹ç©ºéã®å察ããããŸãïŒã ãããã¯éåžžãç°ãªã空éã§ãããäžæ¹ããä»æ¹ãžã®äžæã®ãŸãã¯èªç¶ãªãããã³ã°ãããããŸãããã€ãŸããäžè¬ã«ãVã®èŠçŽ vãV *ã®èŠçŽ phiã«é¢é£ä»ããæå³ã¯ãããŸããã å¯äžã®äžè¬çãªæäœã¯ç·åœ¢é¢æ°ãé©çšããããšã§ããã€ãŸããphiïŒvïŒã¯ã¹ã«ã©ãŒã§ãã
VããV *ãžã®èªç¶ãªãããã³ã°ã¯ãåç·åœ¢åœ¢åŒV x V->ã¹ã«ã©ãŒïŒéåžžã¯å ç©/è·é¢ïŒãã§ãããå®çŸ©ã§ããŸãã 次ã«ãphi_i = g_ {iãj} v ^ jãå®çŸ©ã§ããŸãã
2ïŒå®éãããã¯ãã«ã®è»¢çœ®ãã«é¢é£ããèªç¶ãªæäœã¯ãããŸããïŒãã€ã³ã3ãåç
§ïŒã ãã®æ··ä¹±ã¯ãåè¡åã䜿çšããŠãã¯ãã«ãèå¥ããããšããçããŸãã
ãããã匷ããããšæããŸãããå®éã«ã¯ãããããå€ç©/ãã³ãœã«ç©ã®æäœã§ã¯ååŸã§ããªããã¯ãã«ã®è»¢çœ®ã®ãŠãŒã¹ã±ãŒã¹ãèŠããã§ããïŒ
ãã ãããã¯ãã«ãå察ãã¯ãã«ã«ãããã³ã°ããæ¹æ³ãšããŠè»¢çœ®ã䜿çšããå Žåãã€ãŸãVã®vãV_ã®ããphi = v 'ã«ãããã³ã°ããå Žåã¯ãæšæºã®ãŠãŒã¯ãªããå ç©ïŒg_ { iãj} = delta_ {iãj}ïŒã ãã®æç¹ã§ãå ±å€ææ°ãšåå€ææ°ã®åºå¥ããªãããæ¬è³ªçã«ã«ã«ãã·ã¢ã³ãã³ãœã«ãæäœããVãšV_ã¯èªç¶ã«ååã«ãªããŸãã äžã§è¿°ã¹ãããã«ãw_i = v ^ i = v_i = w ^ iãªã®ã§ãããã§ããv == wã§ãããããã2ã€ãåºå¥ãããã®ã¯äœããªããšããèšããŸãã
3ïŒã転眮ãæäœã¯ãå ã V-> WïŒhttp://en.wikipedia.org/wiki/Dual_space#Transpose_of_a_linear_mapïŒã®ç·åœ¢ååã«å¯ŸããŠã®ã¿å®çŸ©ãããŠãããå®éãããã§ãããªãã®èããæå³ããªãå ŽåããããŸãã ç·åœ¢ååAã®è»¢çœ®ïŒV-> Wã¯W _-> V_ããã®ååA ^ Tã§ããã€ãŸããW_ã®ãã¯ãã«ãå察ãã¯ãã«ã«äœçšããV_ã®èŠçŽ ãã€ãŸãVã®å ±ãã¯ãã«ãçæããŸããè¡åAã®éåžžã®è»¢çœ®A ^ Tã®èŠ³ç¹ããèãããšããã®è¡åA ^ Tã¯ãW *ã®ãã¯ãã«ãè¡šãåãšä¹ç®ãããããããåºãŠããåã¯Vã®å ±ãã¯ãã«ãè¡šããŸãããããã£ãŠããã®æç¹ã§ãè¡ãã¯ãã«ã䜿çšããå察ãã¯ãã«ã®èå¥ã¯ãã§ã«å€±æããŠããŸãã
ãã ããV *ãšW *ãæšæºã®ãŠãŒã¯ãªããå ç©ãä»ããŠVãšWã§èå¥ãããå®æ°ãã¯ãã«ç©ºéã®äžè¬çãªäœ¿çšäŸã§ã¯ãç·åœ¢ãããã®è»¢çœ®ã¯ããã®ç·åœ¢ãããã®é£æ¥ã§èå¥ã§ããŸããã»ãšãã©ã®äººãèããããã«ãV-> Wããã®ãããã¯ããããã®è»¢çœ®ã«ãåœãŠã¯ãŸããŸãã è€éãªã±ãŒã¹ã§ã¯ãéåžžã®è¡å転眮ïŒè€çŽ å ±åœ¹ãªãïŒã¯ãããW _-> V_ãšããŠã®ã¿æå³ãããããããW-> VãšããŠã¯åºæ¬ã«äŸåããªãå®çŸ©ã§ã¯ãªããããæäœäžæå³ããªããããããã¯å€±æããŸãã
é«æ¬¡å ã®é åã§è»¢çœ®ãäœãæå³ãããã«ã€ããŠã¯ãç§ãã¡ãåæããŠããmatlab / Engineeringã®ã¢ãããŒãã®ç¯å²å ã§ããšã©ãŒã§ããå¿ èŠããããäžè¬åãããŠããŸããã ããã¯ããããå®çŸ©ããæ¹æ³ããªããšããæå³ã§ã¯ãããŸããã åé¡ã¯ãé«æ¬¡é åãäœãè¡šãããšããããšã§ãã ããã¯ãã³ãœã«ç©ç©ºéV1 \ otimes V2 \ otimesâŠ\ otimes VNã®èŠçŽ ã§ãããããã¯V1 x V2xâŠxVNã«äœçšããå€éç·åœ¢ååã§ãããããã¯ããã€ãã®ãã³ãœã«ç©ç©ºéV1 \ otimes V2 \ otimesããã®ç·åœ¢ååã§ããâŠ\ otimesVNããå¥ã®ãã³ãœã«ç©ç©ºéW1 \ otimes W2 \ otimesâŠ\ otimes WMïŒ 2次å ã®å Žåã解å床ããããŸãã ç·åœ¢ååã®èå¥AïŒV-> WãšW \ otimes V_ã®ãã¯ãã«ãç·åœ¢ååã®æå³ã§ã®è»¢çœ®ã¯ããã®ãã³ãœã«ç©ç©ºéã®ç©ºéã®å転ã«å¯Ÿå¿ããŸããA^ i_j-> A_j ^ iãšA ^ Tã®V_ \ otimes W = V * \ otimes W _ãããã¯ç¢ºãã«W
çµè«ãšããŠãåé¡ã¯ããžã¥ãªã¢ã®ãã¯ãã«ãæ°åŠçãªæå³ã§ä»»æã®äžè¬çãªãã¯ãã«ã®ããããã£ããã£ããã£ããå¿ èŠããããã©ããããŸãã¯ãããæ°åã®åããªã¹ããâŠãè¡šãã ããã©ããã ãšæããŸãããã¯ãã«ããã³ãœã«ãâŠãšããèšèã¯ããŸããããŸã-æ°åŠã§å®çŸ©ãããæäœããã³åºç€ã«äŸåããªãæå³ãããã¯ãJuliaVectorã§å®çŸ©ããæäœã®çš®é¡ãšç«¶åããå¯èœæ§ããããŸãã éã«ãäžéšã®ãªããžã§ã¯ãã¯å®éã«ã¯æ°åŠçãªèŠ³ç¹ããã®ãã¯ãã«ïŒå察ãã¯ãã«ãªã©ïŒã§ãããæšæºã®JuliaïŒAbstractïŒVectorã¿ã€ãã«ã¯ç°ãªããã¯ãã«ç©ºéãåºå¥ããæ¹æ³ããªããããJuliaVectorsã§èå¥ãã¹ãã§ã¯ãããŸããã
ãã®ç¹ã§ãè¡åãšããçšèªã¯éè² è·ãã¯ããã«å°ãªããããæ°åŠçãªèŠ³ç¹ããããè¡åã¯ç¹å®ã®åºæºã§ç·åœ¢ãããã®äŸ¿å©ãªè¡šçŸã«ãããªããããããçšåºŠã®é察称æ§ããããŸãã ç·åœ¢ååãè¡åãšããŠã§ã¯ãªãé¢æ°ãšããŠè¡šçŸãããå Žåãå€ãããšã«æ³šæããŠãã ããïŒãã®åé¡ã¯ãeigãªã©ã®åŒæ°ã§ä»¥åã«çºçããŸããïŒã ãã®ç¹ã§ãmatlabãçã«1次å ã®æ§é ã§ãããã¯ãã«ãæã£ãŠããªãã£ãçç±ãããããŸãã ãã®ã¢ãããŒãã§ã¯ããšã«ããããã¹ãŠãããããªãã¯ã¹ããã€ãŸãæ°åã®ãããããã¯ãšããŠè§£éãããŸãã
質åïŒ cãå ±ãã¯ãã«ãšããŸãã fftïŒcïŒãšã¯äœã§ããïŒ
åçïŒäºæ³å€ã®å¯èœæ§ã®ããæ¹æ³ã§è€çŽ å
±åœ¹ãåãfftïŒc 'ïŒ'
fftïŒcïŒãšæ¯èŒããå Žå
ãŠãŒã¶ãŒã¯ãããæªå®çŸ©ã§ãããšããæ©æµãåãããããããŸãã
ïŒãŸãã¯ãååã«ææžåãããŠããã°ãããããããã¯ãŠãŒã¶ãŒã«ãšã£ãŠè¯ãã§ããã??ïŒ
ç§ã¯ãããã®çš®é¡ã®ãã®ããã£ãšããããããã«éããªã
ä»ã®ãšããBase
ã§è¡ãã¹ãæ£ããããšã¯ã以äžãå®çŸ©ããããšã ãã ãšæããŸãã
ä»ã®ãšãããã³ãã¯ãã«ã®æå°ãµããŒãã«+1ããŸãã
ã¯ãã+ 1ã
ã ããç§ãèšã£ããªãç§ã¯ãããããªã確信ããŠããŸã
normïŒcovectorãqïŒã¯normïŒvectorãpïŒã§ããå¿
èŠããããŸããããã§ã1 / p + 1 / q = 1
ãã«ããŒã®äžçåŒãããããã¯é·ãéå®è£
ãããªãã§ãããã :-)
p = q = 2ã倩ã«æè¬ããŸã
å®è£ ããã®ã¯ããã»ã©é£ããããšã§ã¯ãããŸããã
norm(c::Covector, q::Integer) = norm(c.vector, q/(1-q))
q == 0
ãšq == 1
ãåé¿ããããã«ãè¿œå ã®ãã§ãã¯ãå¿
èŠã«ãªãå¯èœæ§ããããŸãã
q == 1ã§å€§äžå€«ã ãšæããŸã
Med venlig hilsen
ã¢ã³ãã¬ã¢ã¹ãã¢ãã¯
2014幎10æ22æ¥åå15æ19åGMT-04ïŒ00ã¹ããã¡ã³Karpinski [email protected] ïŒ
å®è£ ããã®ã¯ããã»ã©é£ããããšã§ã¯ãããŸããã
normïŒc :: Covectorãq :: IntegerïŒ= normïŒc.vectorãq /ïŒ1-qïŒïŒ
q == 0ããã³q == 1ãåé¿ããããã«ãè¿œå ã®ãã§ãã¯ãå¿ èŠã«ãªãå ŽåããããŸãã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/JuliaLang/julia/issues/4774#issuecomment-60139762 ã
ç§ã¯covectorææ¡ïŒç§ãäž»ã«ãµããŒãããŠããïŒã®èšè¿°ã«åãçµãã§ããŸããã @ StefanKarpinskiã®ãé¢çœãè¡è¡åãã®æŠå¿µãæ£ç¢ºã«ãã1ã€ã®ãã€ã³ããæçš¿ãããšäŸ¿å©ãããããŸããã
ã³ãã¯ãã«ã¯ãã¯ãã«ã§ã¯ãããŸãããããã®çç±ã®èª¬æã¯å¿ ãããæ確ã§ã¯ãããŸããã ã³ãã¯ãã«ïŒãŸãã¯ç©çåŠè ãåŒã¶ããã«ãã©ãã¯ãã«ïŒã¯ããã¯ãã«ãé£ã¹ãŠå ç©ã§ããæ°ãåãåºãç·åœ¢æ±é¢æ°ã§ãã
ããæ£ç¢ºã«ïŒ
V = V(F)
ãšW = W(F)
ãèŠçŽ ã®ããã€ãã®ãã£ãŒã«ãF
äžã®ãã¯ãã«ãšããŸããv
ãšw
ã¯ãããããV
ãšW
èŠçŽ ã§ãããã¯ãã«ã§ãã<.,.>
ã¯ã <.,.> : V à W â F
ãv, w ⊠<v, w>
ãªã©ã®å
ç©ã«ãªããŸãv
察å¿ããå
±ãã¯ãã«ã¯ããããã³ã°w ⊠<v, w>
ãå®è¡ããç·åœ¢æ±é¢æ°v' : W â F
ã§ãã
éåžžã®èª¬æã¯ã v'
ãå察空éV*
èŠçŽ ã§ãããå察空éãäœã§ãããã«ã€ããŠã¯ä»ã«ããŸãèšåãããŠããªããšããããšã§çµãããŸãã
ã³ã³ãã¥ãŒã¿ãµã€ãšã³ã¹ã®äººã
ã®ããã«ãæåã®ãã©ã¡ãŒã¿ã«é¢ããå
ç©ã®ã«ãªãŒåãšããŠã®v'
ãšã1ã€ã®ãã©ã¡ãŒã¿ã§ããé¢æ°ã®ã³ã¬ã¯ã·ã§ã³ãšããŠã®V*
ç°¡åãªèª¬æããããŸããç°ãªãæåã®ãã¯ãã«ãæã€ã«ãªãŒã
ãã®ãŠã£ãããã£ã¢ã®èšäºã¯ã2ã€ã®èª¬æã«é¢é£ããããŸããŸãªè¡šèšæ³ã調æŽããã®ã«åœ¹ç«ã€å ŽåããããŸããããŸã£ããåãæŠå¿µãè¡šçŸããŠããŸãã
ãŸããç§ã¯åœåãã³ãã¯ãã«ãžã®ã€ã³ããã¯ã¹ä»ãã¯çŠæ¢ãããã¹ãã ãšèããŠããŸããã ãã ãã v'[1]
ã€ã³ããã¯ã¹ä»ãã¯ãæ£èŠåºåºãã¯ãã«eâ = (1, 0, ...)
ã«v'
ãé©çšããããšãšåãã§ããããã v'[1]
ã¯<v, eâ>
ãšããŠå®çŸ©ã§ããŸãã 1:n
ãããªããäžè¬çãªã€ã³ããã¯ã¹ä»ãã®ã»ãã³ãã£ã¯ã¹ã¯ã v'
ãé©åãªå°åœ±è¡åã«é©çšããããšããèªç¶ã«ç¶ããŸããååã¯æšæºåºåºãã¯ãã«ã§ãã
ïŒ987ã®ã³ã³ããã¹ãã§ã³ãã¯ãã«ã®ã€ã³ããã¯ã¹ä»ãã»ãã³ãã£ã¯ã¹ãæ€èšãããšãã³ãã¯ãã«ãAbstractVector
ãªãå¥ã®çç±ãåŸãããŸããäžè¬ã«ã v'
å®äŸ¡ã«ã€ã³ããã¯ã¹ä»ãããããšã¯ã§ããŸããã <v, eâ>
ããã«èšç®ããŸãã äžè¬ã«ãè¡å<v, w> = v'*A*w
ã«é¢ããŠå
ç©ãå®çŸ©ããããšãã§ããã€ã³ããã¯ã¹äœæã®ã³ã¹ãã¯ãå
ç©A*w
ïŒãŸãã¯A'*v
ïŒã«ãã£ãŠæ¯é
ãããŸããããã¯ç¢ºãã«ã§ãã AbstractVector
ãšããŠã®è³æ ŒãåŸãã«ã¯é«ãããã
DFTãšèŠç¯ã«ã€ããŠè©±ããŠããã®ã§...ããã¯ä»æ¥ç§ã®é ã«æµ®ããã
å Žåã¯f
ãã¯ãã«ã®é¢æ°ã§ãããã¹ã«ã©ãŒãçæãããã®åŸãç§ã¯åžædiff(f)
åãå
¥ããé¢æ°ãšVector
ããçç£Covector
ãã®ããã f(x) ~= f(x0) + diff(f)(x0) * (x-x0)
ã åŸé
ã®éåžžã«äžè¬çãªäœ¿çšæ³ã¯ãå
¥åã®å¢åå€åãäžããããå Žåã«ãé¢æ°ã®åºåã®å¢åå€åã®ç·åœ¢è¿äŒŒãååŸããããšã§ãã å
¥åããã¯ãã«ã®å ŽåãåŸé
ãå
¥åã®ãã¹ãŠã®æ¬¡å
ã«æ²¿ã£ãŠåçž®ãããã®ã§ããã®ã¯èªç¶ãªããšã§ãã
ããããææ¥éäžæ³ãå®è£
ããå Žåã¯ã x
ã®åŸé
ïŒã®ã¹ã±ãŒãªã³ã°ããŒãžã§ã³ïŒãããèªäœã«è¿œå ããå¿
èŠããããŸãã ãã®æå³ã§ãåŸé
ã¯æãæ¥ãªæ¹åãæããã¯ãã«ã§ããããã®ãã«ã ã¯ãã®æãæ¥ãªæ¹åã«æ²¿ã£ãå€åçã«æ¯äŸããŸãã
ç§ã®è žã¯ããããç¹ã§ã®ãã¯ãã«å ¥åé¢æ°ã®åŸé ã¯å ±ãã¯ãã«ã§ããããšèšã£ãŠããŸãã
ä»ã®ãšããBaseã§è¡ãã¹ãæ£ããããšã¯ã以äžãå®çŸ©ããããšã ãã ãšæããŸãã
ã³ãã¯ãã«ã«å¥ã®ãã¯ãã«ãæãã
ã³ãã¯ãã«ãšè¡åã®ç©
ãã¯ãã«ãååŸããããã®covector '
ç§ã®ä»¥åã®æãããæçš¿ããããªããåŸããããããªãå°è±¡ã«ãããããããããã«+1ã
ããã«ãããããããããã«é¢ããããã€ãã®æèŠïŒ
ç§ã¯covectorææ¡ïŒç§ãäž»ã«ãµããŒãããŠããïŒã®èšè¿°ã«åãçµãã§ããŸããã @ StefanKarpinskiã®ãé¢çœãè¡è¡åãã®æŠå¿µãæ£ç¢ºã«ãã1ã€ã®ãã€ã³ããæçš¿ãããšäŸ¿å©ãããããŸããã
ã³ãã¯ãã«ã¯ãã¯ãã«ã§ã¯ãããŸãããããã®çç±ã®èª¬æã¯å¿ ãããæ確ã§ã¯ãããŸããã ã³ãã¯ãã«ïŒãŸãã¯ç©çåŠè ãåŒã¶ããã«ãã©ãã¯ãã«ïŒã¯ããã¯ãã«ãé£ã¹ãŠå ç©ã§ããæ°ãåãåºãç·åœ¢æ±é¢æ°ã§ãã
å察ãã¯ãã«/å ±ãã¯ãã«ïŒç·åœ¢æ±é¢æ°ãšããçšèªã奜ãïŒã¯ãå ç©ããªããŠãå®çŸ©ã§ãããšæããŸãã VããV *ãžã®ãããã³ã°ãå®çŸ©ããå Žåã¯ãå ç©ãå¿ èŠãªã ãã§ãã
ããæ£ç¢ºã«ïŒ
V = VïŒFïŒããã³W = WïŒFïŒãèŠçŽ Fã®ããã€ãã®ãã£ãŒã«ãäžã®ãã¯ãã«ãšããŸãã
vãšwã¯ãããããVãšWã®èŠçŽ ã§ãããã¯ãã«ã§ãã
<ããã>ã¯ã<ããã>ïŒVÃWâFããã³vãwâŠã®ãããªå ç©ã§ãã
2ã€ã®ç°ãªããã¯ãã«ç©ºéVãšWã®éã«å ç©ãå®çŸ©ããããšã¯ããªãå¥åŠã§ãããäžå¯èœã ãšæããŸããæ£å®æ§ã®ç¹æ§ãã©ã®ããã«å®çŸ©ããŸããïŒ
vã«å¯Ÿå¿ããå ±ãã¯ãã«ã¯ããããã³ã°wâŠãå®è¡ããç·åœ¢æ±é¢æ°v 'ïŒWâFã§ããã éåžžã®èª¬æã¯ãv 'ãå察空éV *ã®èŠçŽ ã§ãããå察空éãäœã§ãããã«ã€ããŠã¯ä»ã«ããŸãèšåãããŠããªããšããããšã§çµãããŸãã
確ãã«æé次å ã®å Žåãå察空éã¯ãã®åã®ãšãããã¯ãã«ç©ºéã§ããããšã¯ããªãæããã ãšæããŸãã ããããç§ã®ä»¥åã®æŽèšã®èŠçŽã¯ããžã¥ãªã¢ã®ïŒæœè±¡ïŒãã¯ãã«ã¿ã€ãã¯ãªã¹ãã«äŒŒãŠãããšããããšã§ãã ç¹å®ã®ãã¯ãã«ãããã³ãã¯ãã«ã®æ°åŠçæ§é ãæããªãä»ã®1次å ããŒã¿æ§é ãè¡šãããã«äœ¿çšã§ããŸãããæ°åŠçãã¯ãã«ã§ãããã¹ãŠã®ãªããžã§ã¯ãããã£ããã£ããããšã¯ååã«äžè¬çã§ã¯ãããŸããïŒç°ãªããã¯ãã«ãåºå¥ã§ããªãããïŒã¹ããŒã¹ïŒã
ïŒ987ã®ã³ã³ããã¹ãã§ã³ãã¯ãã«ã®ã€ã³ããã¯ã¹ä»ãã®ã»ãã³ãã£ã¯ã¹ãæ€èšãããšãã³ãã¯ãã«ãAbstractVectorsã§ã¯ãªããã1ã€ã®çç±ãåŸãããŸãã
= v'_A_wã§ãããã€ã³ããã¯ã¹äœæã®ã³ã¹ãã¯ãmatvec補åA_wïŒãŸãã¯A'_vïŒã«ãã£ãŠæ¯é ãããŸããããã¯ãAbstractVectorãšããŠã®è³æ ŒãåŸãã«ã¯ç¢ºãã«é«ãããŸãã
ããã¯äžçš®ã®ã«ãŒãåŒæ°ã§ãã äžèšã®ããã«ãç·åœ¢æ±é¢æ°ïŒcovectorïŒã¯ããäžè¬çã§ãããå
ç©ã®ãªããã¯ãã«ç©ºéã«å¯ŸããŠãååšããŸãã 第2ã«ãã¡ããªãã¯ãæ£å®å€è¡åAã®å Žåããã¯ãã«vããã³ãã¯ãã«ãžã®èªç¶ãªãããã³ã°ã¯å®éã«v'_Aã§ãã ããããããã§ãã®v 'ã¯äœã§ããïŒ ããã¯ãã§ã«vããæšæºã®ãŠãŒã¯ãªãããã«ã ïŒã¡ããªãã¯ãšããŠã®ã¢ã€ãã³ãã£ãã£ãæã€ïŒã«é¢ããŠå®çŸ©ãããå¥ã®ã³ãã¯ãã«ãžã®ãããã³ã°ã§ããïŒ ãããããã§ã¯ãããŸããã ãã¯ãã«ã«åå€ïŒäžäœïŒã€ã³ããã¯ã¹ããããå
±ãã¯ãã«ã«å
±å€ïŒäžäœïŒã€ã³ããã¯ã¹ãããå Žåãã¡ããªãã¯Aã«ã¯2ã€ã®äžäœã€ã³ããã¯ã¹ããããå
ç©ã¯æ¬¡ã®ããã«ãªããŸãã
ãããã£ãŠãå®éãç§ãäžèšã§è¿°ã¹ãããšããŠããç¹ã®1ã€ã¯ãå®éã«ã³ãã¯ãã«ãæäœããããšããŠããªããšãã«ã人ã
ãv 'ãæžãããšãå€ããšããããšã§ãã å
ç©ãªã©ã®ãã¯ãã«ã§å®çŸ©ãããåŒãæžã蟌ãããšããã ãã§ãã
äœè«ã§ãããã¹ããã¡ã³ã®æåã®ææ¡ã®ããã«v '== vã§ããå Žåãä¹ç®ã®çµåæ§ã«ã€ããŠä»¥åã«ããã€ãã®æèŠããããŸããã ãã ããããããªããŠããv 'ãéåžžã®ãã¯ãã«ã§èå¥ãããªãå
±ãã¯ãã«ã§ãã£ãŠãã*ãçµåæ³åã§ãããšã¯èšããŸããã
A_ïŒv'_wïŒã¯è¡åã§ã
ïŒA_v 'ïŒ_ wã¯ãšã©ãŒãçæããŠããŸã
ã¹ã«ã©ãŒå€é¢æ°ã®åŸé
ã¯ãå®éã«ã³ãã¯ãã«ã®é©åãªã¢ããªã±ãŒã·ã§ã³ã®1ã€ã§ããã€ãŸããåŒæ°ããªãå ŽåãåŸé
ã¯ã³ãã¯ãã«ã§ãã å
±åœ¹åŸé
æ³ã®ãããªã¢ããªã±ãŒã·ã§ã³ã§æé»çã«æ³å®ãããŠããã®ã¯ããããã®å
±ãã¯ãã«ããã¯ãã«ã«ãããã³ã°ããããã®ã¡ããªãã¯ïŒå®éã«ã¯éã¡ããªãã¯ïŒããããšããããšã§ãã ãã以å€ã®å Žåã¯ãx ^ iïŒäœçœ®ãã¯ãã«ïŒ+ alpha g_iïŒåŸé
ïŒã®ãããªããšãããŠãæå³ããããŸããã ãããèšè¿°ããé©åãªæ¹æ³ã¯ãx ^ i + alpha delta ^ {iãj} g_jã§ããããã§ãdelta ^ {iãj}ã¯éã¡ããªãã¯ã§ãã èªæã§ãªãã¡ããªãã¯ã䜿çšããŠå€æ§äœã§æé©åææ³ãå®çŸ©ããããšããå Žåããã®ïŒéïŒã¡ããªãã¯ãèæ
®ããå¿
èŠããããŸãã ããã«é¢ããçŽ æŽãããæ¬ããããŸãïŒ
http://sites.uclouvain.be/absil/amsbook/
ããã³å¯Ÿå¿ããmatlabããã±ãŒãžïŒ
http://www.manopt.org
2014幎10æ22æ¥ã§ãå€10æ52æãgoretkin [email protected]æžããŸããïŒ
DFTãšèŠç¯ã«ã€ããŠè©±ããŠããã®ã§...ããã¯ä»æ¥ç§ã®é ã«æµ®ããã
fisããã¯ãã«ã®é¢æ°ã§ãããã¹ã«ã©ãŒãçæããå ŽåãdiffïŒfïŒãããã¯ãã«ãåãå ¥ããŠCovectorãçæããé¢æ°ã«ããŠãfïŒxïŒã= fïŒx0ïŒ+ diffïŒfïŒïŒ x0ïŒ*ïŒx-x0ïŒã åŸé ã®éåžžã«äžè¬çãªäœ¿çšæ³ã¯ãå ¥åã®å¢åå€åãäžããããå Žåã«ãé¢æ°ã®åºåã®å¢åå€åã®ç·åœ¢è¿äŒŒãååŸããããšã§ãã å ¥åããã¯ãã«ã®å ŽåãåŸé ãå ±ãã¯ãã«ã§ããã®ã¯èªç¶ãªããšã§ãã
ããããææ¥éäžæ³ãå®è£ ããå Žåã¯ãxã®åŸé ïŒã®ã¹ã±ãŒãªã³ã°ããŒãžã§ã³ïŒãããèªäœã«è¿œå ããå¿ èŠããããŸãã ãã®æå³ã§ãåŸé ã¯æãæ¥ãªæ¹åãæããã¯ãã«ã§ããããã®ãã«ã ã¯ãã®æãæ¥ãªæ¹åã«æ²¿ã£ãå€åçã«æ¯äŸããŸãã
ç§ã®è žã¯ãåŸé ã¯å ±ãã¯ãã«ã§ããããšãããéèŠã§ãããšèšããŸãã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ããã
A_ïŒv'_wïŒã¯è¡åã§ã
ïŒA_v 'ïŒ_ wã¯ãšã©ãŒãçæããŠããŸã
ãã°ãã
ãã®ã¹ã¬ããã¯ããŠãŒã¢ã©ã¹ãªç»åãå«ãŸããŠããæçš¿ã®ããã«å»¶æãããŸããã
@Juthoç§ã¯æãäžè¬çãªåœ¢åŒã®å察空éã䜿çšããŠããªãããšãèªããŸããããããã空éã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠå察空éãå®çŸ©ãããšããéžæãèãããšãç§ã®èª¬æãã©ã®ããã«åŸªç°ããŠãããã¯ããããŸããã ãšã«ããããããã空é圢åŒã¯ãæé次å ã®ãã¯ãã«ç©ºéã«ãšã£ãŠã¯ãã§ã«ããéãã§ãã
ãµãŒãã¥ã©ãŒã¯ç¢ºãã«æ£ããçšèªã§ã¯ãããŸããã ãã®æ®µèœã§ç§ãèšãããšããŠããã®ã¯ããšã³ããªã®å¹ççãªè©äŸ¡ã«é¢ãããã®æšè«ã®ç·ãéã«ããããšãã§ãããšããããšã§ããããšãã°ã湟æ²ããå€æ§äœã®ïŒå
±åœ¹ïŒåŸé
ã®å ŽåãåŸé
ïŒã³ãã¯ãã«ïŒ g_i
ãæšæž¬ããããã§ã
AbstractVector
ãµãã¿ã€ãã«ãªãããšãã AbstractVector
ãµãã¿ã€ãã§ãããã¹ãŠã®ãªããžã§ã¯ããé©åãªæ°åŠçç¹æ§ãæã€ããšã§ã¯ãããŸããããã¯ãã«ã®ã ãã®æå³ã§ãç§ã¯Matrix
ãšããååãããVector
ãšããååã®æ¹ãã¯ããã«å¥œãã§ãã ãããã£ãŠããã®ææ¡ã®äžéšãšããŠå°å
¥ãããŠããCovector
ã¿ã€ããäœã§ããã AbstractVector
ãŸãã¯AbstractArray
ãµãã¿ã€ãã§ãã£ãŠã¯ãªããªããšããäºå®ã«åæã§ãããšæããŸãã ãV *ãVãšèªç¶ã«ååã§ããå Žåã§ãïŒããããã¢ããªã±ãŒã·ã§ã³ã®ååãå ãããã«ã«ã空éïŒãv'
æžãã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ãå®éã«ã¯ã³ãã¯ãã«ãæ§ç¯ããããšã¯ãããåç·åœ¢ãæžã蟌ãããšããŠããŸãã v'_A_w = v ^ i A_ {iãj} w ^ jãŸãã¯v'w = v ^ i delta_ {iãj} w ^ jã®ããã«ã2ã€ã®ãã¯ãã«éã®ãããã³ã°ïŒã€ãŸããV x Vããã¹ã«ã©ãŒãžïŒäŸ¿å©ãªè¡åè¡šçŸã ç§ã¯dot(v,A*w)
æ瀺çã«æžãããšã奜ã¿ãŸãããããã¯å人çãªéžæã§ãã è¡åã®äžäœãŸãã¯äžäœã®ã€ã³ããã¯ã¹ã«é¢ããæ
å ±ããªãããã v'*A*w
ãããªã¹ã«ã©ãŒåŒã§ã v'
ãšw
äž¡æ¹ããã¯ãã«ãŸãã¯å
±ãã¯ãã«ã®ããããã«ãªããŠãŒã¹ã±ãŒã¹ãæ§ç¯ã§ããŸããæ°åŠçãªæå³ã§ã ããã®å¯äžã®çµæã¯ã Vector
ãšããååãšåãããã«ãæ°åŠãå€ãããããã v'
Covector
ã®ã¿ã€ããåŒã³åºãããšã«æ¬åœã«æºè¶³ããŠãããã©ããããããªãããšã§ããã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã§æ£åœåãããªãå¯èœæ§ã®ããå«æãããã«ããããã®ããã«ãããå€ãã®ïŒã»ãšãã©ç¡é¢ä¿ãªïŒè°è«ã«ã€ãªãããŸããåŸé
ãå
±ãã¯ãã«ã§ããå Žåã®
ç§ã¯æåã«ã¹ãã£ãŒãã»ã¹ãã¹ã®å士è«æãããããåŠã³ããã®ã¢ã€ãã¢ã䜿çšããŸãã
åºæå€èšç®ã®ããã®å
±åœ¹åŸé
ã®ãã®æŒ ç¶ãšããèããæ確ã«èª¬æããããã«
人ã
ãååŠãç©çåŠã§è©±ããŠãããã®ã§ãã
ç§ã¯å
éšçã«ã©ãã»ã©äžè²«ããŠãããã«ã€ããŠãŸããŸãé©ããããŠããŸãã
èªå·±å®çµåã¯ã1ã€ã®äžäœã€ã³ããã¯ã¹ãš1ã€ã®äžäœã€ã³ããã¯ã¹ãæã€ã©ã³ã¯2ãã³ãœã«ã®äžçã§ãã
ããã¯ãåŸæ¥ãè¡åèšç®ãŸãã¯åãªãå€ãç·åœ¢ä»£æ°ãšåŒã°ããŠãããã®ã§ãã
ã¡ãªã¿ã«ãnormïŒvãpïŒãfftïŒvïŒã®ãããªé¢æ°ã®äŸã¯ãããããããŸãã
ãããããã¯ãã«ãå
±ãã¯ãã«ãã¯ç°ãªããŸãããè¯ãäŸã¯1ã€ããããŸããïŒãŸã ïŒïŒ
ãã¯ãã«ãš1åã®è¡åã§èªç¶ã«ç°ãªãé¢æ°ã®ã
ïŒèª°ããç§ãå©ããŠãããŸãã確ãã«1ã€ãããã«ã¯ããããããã«éããããŸãã!!ïŒ
ç§ãæ°å¹Žåãã@juthoã®ããã«ãã®æœè±¡çãªãã¯ãã«ãå¿é
ããŠããŸãã
ã¹ããŒã¹ã¯ãŸã ãžã¥ãªã¢ãžã®éãèŠã€ããŠããŸããã§ãããç§ã¯@StefanKarpinskiãšãã£ããããããšãèŠããŠããŸã
æ°å¹Žåã®ç§ã®ãã¯ã€ãããŒãã§ããã«ã€ããŠã ããã§ããã®å
æ¬çãªæžå¿µ
1ïŒJuliaã®æ°èŠåå
¥è
ã¯ãç°¡åãªçµéšãš
2ïŒããã©ãŒãã³ã¹
ãã®æŽŸæãªãã®ãæã¡è² ããå¿
èŠããããŸãã
@jiahaoãšè©±ãããçµæã2ã€ã®éåžžã«ç¹å¥ãªäžçãããããšã«æ¬åœã«
ç·åœ¢ä»£æ°ïŒ1ã€ã®contraãš1ã€ã®coãæã€é
åïŒãšåçŽãªãã³ãœã«ããããŸã
ïŒèª°ããå
±åã§ãããå察ã¯ãããŸããïŒã åŸè
ã¯APLaMathematicaã§ããŸãæ©èœããŸãã
åè
ã¯ç·åœ¢ä»£æ°å
šäœã§ããã以åã¯MATLABã§æããããã£ããã£ãããŠããŸããã
ãããã¯2ãã倧ãã次å
ã®é
åã«æ¥ãæšãããŸãããããå®å
šãªäžè¬æ§ããããŸã
@JeffBezansonãšã®èšèã®åŸãããã¯ããã»ã©ã¯ã¬ã€ãžãŒã§ã¯ãªãã£ãããã«èŠããŸããã
ã¡ãªã¿ã«1幎ãããããããšæããŸãããããããçå£ã«åãæ¢ããŠããŸã:-)
ã«ã€ããŠ
A_ïŒv'_wïŒã¯è¡åã§ã
ïŒA_v 'ïŒ_ wã¯ãšã©ãŒãçæããŠããŸã
è¡åä¹ç® "*"ã®ã¿ãçµåæ³åã§ãã ãªãŒããŒããŒããããã¹ã«ã©ãŒæéè¡åã¯æ±ºããŠãããŸããã§ãã
é£æ³ã æ°åŠã§ããMATLABã§ããããŸããã
A_ïŒv'_wïŒã¯è¡åã§ã
ïŒA_v 'ïŒ_ wã¯ãšã©ãŒãçæããŠããŸã
è¯ããã£ããã ãšã©ãŒããªãå Žåã«ç°ãªãçããåŸãããå Žåã¯ãããŸããïŒ é¢é£ãã質åïŒã¹ã«ã©ãŒ*ã³ãã¯ãã«ã¯äœããã¹ãã§ããïŒ
ãªãŒããŒããŒããããã¹ã«ã©ãŒæéè¡åã¯ãçµåçã§ã¯ãããŸããã§ããã æ°åŠã§ããMATLABã§ããããŸããã
è¡åãšã¹ã«ã©ãŒã®ã¿ãå«ãæŒç®ã¯çµåæ³å
ã¹ã«ã©ãŒè¡åã®è¿œå ã¯ãåé æ§ãå°ç¡ãã«ããããããã倧ããªæžå¿µäºé ã§ãïŒãã ããæ£ããæãåºãã°ãè°è«ã¯ãããç¶æããããã«è§£æ±ºããããšæããŸãïŒïŒ
(A+s)*v != A*v + s*v
ããã¯éåžžã«çŽ æŽãããèŠçŽã§ãïŒ
@jiahaoãšè©±ãããçµæã2ã€ã®éåžžã«ç¹å¥ãªäžçãããããšã«æ¬åœã«
ç·åœ¢ä»£æ°ïŒ1ã€ã®contraãš1ã€ã®coãæã€é åïŒãšåçŽãªãã³ãœã«ããããŸã
ïŒèª°ããå ±åã§ãããå察ã¯ãããŸããïŒã
ãã®è°è«ãããäžè¬çãªã±ãŒã¹ããµããŒãããããšã§ã¯ãªãããšã¯æããã§ããããã¯å®å šãªäžè¬æ§ãå¿ èŠãšãããçŸåšã®AbstractArrayéå±€ã«å«ããããšãã§ãããããã±ãŒãžïŒç§ãå®éã«äœæ¥ããŠããïŒã«ããé©ããŠãã人ã ã«ãšã£ãŠã¯æ··ä¹±ããããŸãããªã³ïŒã ããããããã2ã€ã®ç¹å¥ãªäžçã¯çžäºã«äºææ§ããªããããã©ã¡ãããµããŒããããã®ããšããè°è«ã¯ç¢ºãã§ãã
åè
ã§ã¯ããã¹ãŠã®ãã¯ãã«v
ã¯åã§ããããã¹ãŠã®v'
ã¯å
±ãã¯ãã«ã§ããããã¹ãŠã®è¡åã¯ç·åœ¢æŒç®åV-> Wã§ãïŒããšãã°ãWâV_ã«ååšããŸãïŒãããã¯ãããšãã°åç·åœ¢ã®è¡šçŸãé€å€ããŸãã V x V->ã¹ã«ã©ãŒïŒäŸïŒv ^ i A_ {iãj} w ^ jïŒããããããŸããããã«ã¯ã2ã€ã®äœãã€ã³ããã¯ã¹ãæã€è¡åãå¿
èŠã§ãïŒäŸïŒV_âW_ã«ååšããïŒã ãã¡ãããå®éã«äœ¿çšããŠv'_A*w
ãšæžãããšãã§ããŸãããéžæãããªããžã§ã¯ãã®åœåæ³ãšççŸããŸãã ããã«ãé«æ¬¡é
åãã©ã®ç©ºéã«ååšããããæå®ããŸããã
åŸè
ã®å Žåã¯ïŒV == V *ïŒã§ããããããã®åé¡ã¯è§£æ±ºãããŸããã v' == v
é©ãã¹ãçµæãåŸãããŸãã ããã«ããã®è§£ã¯å®éã«ã¯å®éã®ãã¯ãã«ç©ºéã«éå®ãããŸããããã¯ãæšæºã®ãŠãŒã¯ãªããå
éšç©ãæã€è€éãªç©ºéïŒã€ãŸããè€çŽ ã«ã«ãã·ã¢ã³ç©ºéãïŒã§ããå察空éã¯èªç¶ã«Vãšå圢ã§ã¯ãªããconjïŒVïŒïŒV barïŒãå
±åœ¹ãã¯ãã«ç©ºéïŒhttp://en.wikipedia.org/wiki/Complex_conjugate_vector_spaceã®ãã«ãã«ã空éãåç
§ïŒ
éçµåæ§ã«é¢ããŠã¯ããã®ç¹ã§ã v'*v
ãã¹ã«ã©ãŒã§ã¯ãªãé
åãçæããçŸåšã®åäœã¯ãå®éã«ã¯ããäžè²«æ§ããããŸãããã以éã A*(v'*v)
ãš(A*v')*v
äž¡æ¹ãçæãããŸãã
ç©äºã®ãç·åœ¢ä»£æ°ãåŽã¯ããã¯ãã«ãšå ±ãã¯ãã«ãè¡šçŸããæ¹æ³ã®ããŸããŸãªéžæè¢ã«ããã«è§£æ±ºã§ããŸãã
ãçã®ãã¯ãã«ããªããäžçã§ã¯ãïŒã¹ã«ã©ãŒã1-ãã¯ãã«ãããã³1x1-è¡åïŒãå³å¯ã«çµ±åããå¿ èŠãããã®ã§ã¯ãªãããšæããŸãã @alanedelmanãšç§ã¯æšæ¥ããã«ã€ããŠè©±ãåã£ãŠããŸãããæ°å€ç·åœ¢ä»£æ°ã§ã¯ããã¯ãã«*ã¹ã«ã©ãŒãšã¹ã«ã©ãŒ*ãã¯ãã«ã®å¯ææ§ãã©ãã§ã䜿çšãããŠããŸããããã¯ãã«*ã¹ã«ã©ãŒç©ã¯ïŒNãïŒ*ïŒãå®è¡ããŠãããã©ãããæ°ã«ããªããã®ã§ãã ãïŒãŸãã¯ïŒNã1ïŒ*ïŒ1,1ïŒã
1ïŒçµå±ã®ãšãããæãéèŠãªããšã¯AïŒäœ¿ãããããšBïŒããã©ãŒãã³ã¹ã§ãã
2ïŒ2ã€ã®äžçã¯å®å
šã«èª¿åããŠå
±åã§ããå¿
èŠããããŸãã ãšã³ãžãã¢ãªã³ã°äœæ¥ãè¡ããšããç§ã®æèŠã§ã¯ããã³ãœã«è¡šèšã»ã©çŽæçã§ç°¡åãªãã®ã¯ãããŸããã å¯èœã§ããã°ãç°å¢ãã©ã°ãæå¹ã«ããããããã°ã©ã ã®éå§æã«ããã±ãŒãžãã€ã³ããŒãããããšããå§ãããŸãã ããã«ããã䜿ãããããšç°¡åãªããã°ã©ãã³ã°ããžãã¯ãå¯èœã«ãªããŸãã ããã¯äžå¯èœã§ããããããšãå
æ¬çãªã¹ããŒãã1ã€éžæããå¿
èŠããããŸããïŒ
2ã€ã®éžæè¢ãããããã§ã
1ïŒããŒã«ããã¯ã¹ããããããŸãã¯ç°å¢ãã©ã°ã®ã€ã³ããŒããæå¹ã«ããŠãåæã«æ©èœããã
2ïŒç¹å¥ãªäžçãçµ±äžããããšãã§ããããã§ã䜿ããããé«éãªèšèªãæ§ç¯ãã
ãããã©ãã»ã©ææãã¯ããããŸããããèå³æ·±ãå¯èœæ§ã®ããç 究åéã«åºããããŸããã
ç§ã¯ããªãã®æ³šæã以äžã«åããããšãã§ããŸãïŒ
幟äœä»£ââæ°ç 究ã°ã«ãŒã
http://www.mrao.cam.ac.uk/~clifford/pages/introduction.htm
幟äœä»£ââæ°ã®è¬çŸ©ã³ãŒã¹
http://www.mrao.cam.ac.uk/~clifford/ptIIIcourse/course99/
幟äœä»£ââæ°ã®ç©ççå¿çš
http://www.mrao.cam.ac.uk/~clifford/ptIIIcourse/
21äžçŽã®ç©çåŠãšå·¥åŠã®ããã®çµ±äžãããæ°åŠèšèª
http://www.mrao.cam.ac.uk/%7Eclifford/publications/ps/dll_millen.pdf
幟äœä»£ââæ°
http://arxiv.org/pdf/1205.5935v1.pdf
幟äœä»£ââæ°ã³ã³ãã¥ãŒãã£ã³ã°ã®åºç€
http://link.springer.com/book/10.1007%2F978-3-642-31794-1
幟äœä»£ââæ°ã³ã³ãã¥ãŒãã£ã³ã°
http://link.springer.com/book/10.1007%2F978-1-84996-108-0
ãããããå°ã調ã¹ãŠã¿ããšãæ¬åœã«ãããããã§ãã
代æ°ãšå¹ŸäœåŠãåé¢ãããŠããéãããããã®é²æ©ã¯é ãããããã®äœ¿çšã¯å¶éãããŠããŸãã ããããããã2ã€ã®ç§åŠãçµ±åããããšãããããã¯ããããã®çžäºã®åã貞ãåºããå®å šã«åãã£ãŠäžç·ã«è¡é²ããŸããã
çŒé¡ãå¿ èŠã§ãçŒé¡ãå¿ èŠã ãšã¯ç¥ããªãããšãæ³åããŠã¿ãŠãã ããã ãããŠãã¡ã¬ããæã«å ¥ãããšãæããããäžçãå€ãããŸãã GAã¯ããªãã®è³ã®å åŽã®ããã®çŒé¡ã®ãããªãã®ã§ãã
ãã®ç·ã¯æ£ããèããæã£ãŠããããã§ã... httpsïŒ//github.com/wolftype/versor
å žåçãªè¡åæŒç®ã©ã€ãã©ãªã«ã¯ããã¯ãã«ãšè¡åã®ä¹ç®çšã«ãã³ãã¬ãŒãåãããã€ã³ã©ã€ã³é¢æ°ããããŸãã 幟äœä»£ââæ°ã¯ãä»ã®å€ãã®æ°åŠïŒè¡åããã³ãœã«ããã¯ãã«ãããã³ãªãŒä»£æ°ïŒãçµã¿åããããã®ã§ãã ãã«ãœã«ãåæ§ã§ãããã¹ããã€ãã§ã¯ãããŸããŸãªãµã€ãºã®ãã¯ãã«ãšã¹ããŒã¹è¡åã¯ãã¹ãŠåã«ãã«ããã¯ãã«ãšåŒã°ããxyzæ¹åãšå€æè¡åã ãã§ãªã幟äœåŠçèŠçŽ ãè¡šããŸãã åãç·ãçãå¹³é¢ãç¹ã¯ãã¹ãŠä»£æ°çãªèŠçŽ ã§ããããããã®å€æ°ãå転ãããããæ¡åŒµãããã³æ²ããæŒç®åãåæ§ã§ãã ãããã®èŠçŽ ãšæŒç®åã¯ã©ã¡ãããå€ãã®å€ãã®ç°ãªãæ¹æ³ã§äžç·ã«ä¹ç®ããããã«ããã¯ãã«ã§ãã
ãã®ãããªã§ã¯ãããã°ã©ã ãããGAæ°åŠèšèªã§ããVersorã«ã€ããŠè©³ãã説æããŸãã
https://www.youtube.com/watch?v=W4p-e-g37tg
ãããã¯ãã®ããã®ã¹ã©ã€ãã§ãã https://github.com/boostcon/cppnow_presentations_2014/blob/master/files/generic_spaces.pdf
ã³ã³ãã€ã«æã®é床ãæé©åããããé©ãã¹ããã³ãœã«èšç®ãéåžžã«ç°¡åã«è¡ãããšãã§ããŸãã
@ esd100 ããã®ã¹ã¬ããã§ã®è°è«ãã¿ã€ãã«ã®ç¹å®ã®åé¡ã«çŠç¹ãåãããŠç¶ããããšã圹ç«ã€ãšæããŸãã
@johnmyleswhite ããã³ãœã«ããšããçšèªãæ€çŽ¢ãããšããã171åïŒçŸåšã¯172åïŒèšåãããŠããŸããã ç§ã¯ããªãã®å£°æã«åæããŸãããäžè¬çã«ããã®ã¹ã¬ããã«ã¯157ã®ã³ã¡ã³ãïŒçŸåšã¯158ïŒãããããã®ãã¡ã®ããã€ãã¯å ã®æçš¿ã®ã¿ã€ãã«ãçŽæ¥çããã³éæ¥çã«æ±ã£ãŠããŸãïŒãã¯ãã«ãçå£ã«è»¢çœ®ããŸãïŒã ç§ã®æçš¿ã¯ã幟äœä»£æ°ãä»ããŠãã³ãœã«æ°åŠã®æ°ããã¢ããªã±ãŒã·ã§ã³ã§äœãã§ãããã«ã€ããŠã®èŠç¹ãå¢ããããšã«ãã£ãŠãå ã®æçš¿ã®ã¿ã€ãã«ãéæ¥çã«æ±ã£ãŠãããšæããŸãã ç§ã®æèŠã§ã¯ããã«ãœã«ãæã€ãããªé«æ¬¡å ã®åããžã¥ãªã¢ã«çµã¿èŸŒãããšã¯ããžã¥ãªã¢ã®è¿œå ã®æçãªæ©èœã«ãªãã§ãããã youTubeãããªã®ã¿ã€ãã«ã¯ãããžã§ããªãã¯ã¹ããŒã¹ã®ãžã§ããªãã¯ããã°ã©ãã³ã°ïŒC ++ 11ã䜿çšããã³ã³ãã€ã«æã®å¹Ÿäœä»£æ°ãã§ããã ãããC ++ã§ã¯ãªãJuliaã«ãªããªãçç±ãããããŸããã ç¹°ãè¿ãã«ãªããŸãããç§ã¯æ°åŠè ã§ãã³ã³ãã¥ãŒã¿ãŒç§åŠè ã§ããããŸããã
@ esd100幟äœä»£ââæ°ã¯èå³æ·±ããã®ã§ããããã®åé¡ãã«ããŒããæãäžè¬çãªãã®ã§ã¯ãããŸããã ç§ãã¡ãäž»ã«é¢å¿ãæã€å¹Ÿäœä»£æ°ã¯ãå®éã®ã¯ãªãã©ãŒã代æ°ClïŒR ^ nãIïŒã§ãã ãã ããè€çŽ æ°ãã¯ãã«ClïŒC ^ nãIïŒã®ãããªã¯ãªãã©ãŒã代æ°ããä»»æã®ãã£ãŒã«ããéå¯æç°ClïŒF ^ nãIïŒã®ãããªä»£æ°ãªã©ã幟äœä»£æ°ã§ã¯ãªãä»ã®ã¯ãªãã©ãŒã代æ°ã«ãé¢å¿ããããŸãã ã ããã«ãå¿ ãããã¯ãªãã©ãŒã代æ°ã«éå®ããå¿ èŠã¯ãããŸããããç·åœ¢ä»£æ°ããäºæ¬¡åœ¢åŒïŒå ç©ïŒãå¿ ãããå®çŸ©ãããŠããªããããäžè¬çãªãã³ãœã«ä»£æ°èšå®ã«ã©ã®ããã«äžè¬åãããããæ€èšããããšæããŸãã
ãã³ãœã«ä»£æ°ã®èšå®ã§ã¯ãOPã®ã v'
ã¯ããŒãªãã¬ãŒã·ã§ã³ã§ãããšããææ¡ã¯ãé転æºååã«äžè²«ããŠäžè¬åãããããããªã£ãŠããŸãã ãã ããããã¯ããŒãã«ã«ããå°ãªããšã3ã€ã®ææ¡ã®ãã¡ã®1ã€ã«ãããŸããã ãvããå
±ãã¯ãã«ãçæãããã³ãœã«äœä»£æ°ã«ã€ãªããå代æ°æ¡åŒµãæ€èšããããšãã§ããŸãã ãããããçã®ãã¯ãã«ãªããã®ææ¡ãã©ã®ããã«ãã³ãœã«ä»£æ°ã«äžè¬åããããã¯ããããŸããã
@jiahaoéåžžã«æçãªåçãããããšãããããŸãã äž»é¡ãããçšåºŠçç¥ããŠãã人ã«å ãåœãŠãŠãããã®ã¯ããããšã§ãã ç解ãæ·±ããããã«ããããã®ãããã¯ãããã«è©³ãã調ã¹ãããšæããŸãã BLASã®è¶ æé©åã³ãŒããååšããçç±ã«èå³ããããŸãããã¯ãªãã©ãŒã代æ°ã®ãããªããè€éãªä»£æ°ã®è¶ æé©åã³ãŒãã¯ååšããŸããã
ãã®è°è«ããŸã ç¶ããŠãããã©ããã¯ããããŸãããããããã®åé¡ã¯ãžã¥ãªã¢ã䜿çšããç§ã®æãéèŠãªïŒãããŠè¿·æãªïŒéšåã®ããã€ãã§ãããããç§ã®æèŠãå ±æããããšæããŸããã äžèšã®ããã€ãã¯ç§ãåæããããã€ãã¯åæããŸããã
åºæ¬çã«ããããå®çŸããå¿ èŠããããšæããŸãããã¹ãŠã®JuliaãŠãŒã¶ãŒã¯ãJuliaã§ãã§ã«å®è£ ãããŠããããã«ãé«éãªå€æ¬¡å é åïŒããŒã¿ã¹ãã¬ãŒãžçšïŒãå¿ èŠãšããŸãã å€ãã®/ã»ãšãã©ã®ãŠãŒã¶ãŒã¯ç·åœ¢ä»£æ°ã«ãèå³ããããåè¿°ã®é åã¯ãã¯ãã«ãšè¡åã«å«ãŸããããŒã¿ãããã±ãŒãžåãã䟿å©ãªæ¹æ³ã§ãã å°æ°ã®ãŠãŒã¶ãŒã¯ãäžè¬çãªãã³ãœã«ïŒå€éç·åœ¢ïŒä»£æ°ãå®è¡ããããšæãã§ãããã
åé¡ã¯ããããã®ã裞ã®ãé åãç·åœ¢ä»£æ°ã®æ°åŠçæŠå¿µã«ã©ã®ããã«æ¡åŒµãããã§ãã æ§æãéåžžã®æ°åŠã®ããã«ããã«ã¯ã©ãããã°ããã§ããïŒ äººã ã¯ãã®v ''ïŒ= vãå¿«é©ã«ããŸããïŒ ç
ãŸããç·åœ¢ä»£æ°ãå®è¡ã§ããããã«ããããã«ãé åããã以äžæªåãããããªããšããããšã§ãã Vectorã«ããŒã¿ãè¿œå ããããArrayã«äžèŠãªãã³ãã¬ãŒãåŒæ°ãè¿œå ãããããå¿ èŠã¯ãããŸããã ç·åœ¢ä»£æ°ãå®è¡ããªããšãã¯C / C ++ãšåããããéããªãããïŒãããŠãã§ããã°C / fortranãšåããããéããªãããïŒã
2çªç®ã«èªèãã¹ãããšã¯ãå®å šãªå€æ¬¡å ãã³ãœã«ã®çž®çŽã«ã¯å€§éã®è¿œå æ å ±ãå¿ èŠã«ãªããšããããšã§ãã æ倧2次å ã®ãã³ãœã«ã®å ŽåãA_B'_C * D ...ã®ãããªä¹ç®ãèšè¿°ããŸãããäžè¬çãªãã³ãœã«ã®å Žåãåçž®ãå®çŸ©ããã°ã©ãïŒãã³ãœã«ãããã¯ãŒã¯å³ããŸãã¯å åã°ã©ã-åãããšãèšããŸãïŒãèããæ¹ãèªç¶ã§ããå€ãã®ç°ãªãååã§ïŒã é«æ¬¡å ãã³ãœã«ã®å Žåããã¹ãŠã远跡ããããã«ã裞ã®é åãã©ãããããã¯ãã«ç©ºéãªã©ã§ããããè£ é£Ÿããããšã¯çã«ããªã£ãŠããŸãã ããã¯ãJuthoïŒããã³å Žåã«ãã£ãŠã¯ä»ã®äººïŒãåãçµãã§ããããã±ãŒãžãªã©ã§å®è¡ã§ããŸãã 3次å ãã³ãœã«ã§ã® 'ã®æå³ãèæ ®ããæå³ã¯ãããŸãããpermutedimãååšããå ŽåããŸãã¯å°çšã®ãã³ãœã«ããã±ãŒãžã䜿çšããŠããå Žåã誰ããã®é¢æ°ã䜿çšããããšã«èå³ããããŸããã
ã³ã¢ãŠãŒã¶ãŒã¯ãè¡åãä¹ç®ãããããã¯ãã«ãè¿œå ãããããå¿ èŠããããŸãã 圌ãã¯è¡åã転眮ããããšæãã§ãããã 圌ãã¯ãŸããå ç©ãšå€ç©ã欲ãããã§ãããã 奜ããšå¥œãŸãããšã«ãããããããããã¯å察空éãšçµã¿åãããŠå®çŸ©ãããŸãã ããããå®æ°ãšè€çŽ æ°ã«å¯ŸããŠäœã§ããããç¥ã£ãŠãããããããäºåã«å®çŸ©ããŠããŸãã ããã§ããå®éã®æéãã¯ãã«ç©ºéã®å察空éã¯åºæ¬çã«åãããã«æããããã®ã¯äºå®ã§ããããããåé¡å šäœãæãããŠãããšç§ã¯ä¿¡ããŠããŸãã çŸåšã®æ倧ã®åé¡ã¯ãé©åãªå察ãã¯ãã«ããªãããšã§ãã ããããªããã°ããã³ãçŽã®ããã«ãžã¥ãªã¢ã§æ¹çšåŒããæžããããšã¯ã§ããŸãããããã¯å€§ããªåé¡ã§ãã ããã«éèŠãªããšã«ãv '' = vããããŸãããããã¯éåžžã«çŽæçã§ã¯ãããŸããã
人ã ã¯ãå ç©ãŸãã¯å€ç©ãå®è¡ããããã®ãã¥ã¢ã«ãã¯ãã«ãäœæããããšã ããæãã§ããããäœæããå¿ èŠããããŸãã ã³ã³ãã€ã©ã«æ¬¡ã«ééãããšãã«äœããã¹ãããæ瀺ããããã®åçŽãªè£ 食ã©ãããŒ*ã¯è³¢æãªè§£æ±ºçã§ãããå®è¡æã®ãªãŒããŒãããã¯ãŒãã§ãªããã°ãªããŸããã ãããã®å察ãã¯ãã«/å ±ãã¯ãã«ã¯ãã€ã³ããã¯ã¹å¯èœãå ç®å¯èœ/æžç®å¯èœãã¹ã«ã©ãŒãä¹ç®ããã¯ãã«ïŒã¹ã«ã©ãŒãè¿ãïŒãè¡åïŒã³ãã¯ãã«ãè¿ãïŒãä¹ç®ããå¿ èŠããããšæããŸã-ããã ãã§ãïŒ è€çŽ æ°ãã¯ãã«ã®è€çŽ å ±åœ¹ãæ瀺ââçã«å®è¡ããããšããããŸãããããã¯ãé床/ã¡ã¢ãªãåäžãããããã«ãå ç©ãå€ç©ãã€ã³ããã¯ã¹ä»ããªã©ã«çµã¿èŸŒãããšãã§ããŸãã
åã·ã¹ãã ã«è€éããå ãã£ãŠããããšãå¿é ããŠããŸããã ããã¯ããŠãŒã¶ãŒãé«æ ¡ã倧åŠã§æ°åŠãåŠãã ãšãã«æ°åŠãã«ãã»ã«åããããã«å¿ èŠã ãšæããŸããçµåæ³å*ïŒæ確ã«å®çŸ©ãããŠããå ŽåïŒãv '' = vãããã©ããšãã±ãããã®äž¡æ¹ãæã€ïŒIããã§ã¯ç·åœ¢ä»£æ°ã®ãã£ã©ãã¯èšæ³ã䜿çšããŠããŸãïŒãªã©ã
ãšããã§ããã®ãããªãã®ãJulia 0.4ã§å®è£ ãããŠããå Žåãç§ã¯æ°ã¥ããŠããŸããïŒ ç§ã¯ãŸã 0.3.4ã®ç解ã«åãçµãã§ããŸã...
@andyferris ãç§ã¯äžè¬çã«ããããã¹ãŠã«åæããŸãã ããã§ã®ç§ã®M*v'
ããšã©ãŒã§ãã代ããã«ãã³ãã¯ãã«ãçæãã v*M
ããšã©ãŒã§ãã代ããã«ããã¯ãã«ãçæããŸãã ç§ã«ãšã£ãŠãããã¯æŠå¿µçã«ã¯ããã®å¯žæ³ãäžãäžããç¥ããªãM
ã«çžåœããŸããå
ç©ã«å¯ŸããŠv'*M*w
ãŸãã¯v*M*w'
ãšæžãããšãã§ããã©ã¡ãã§ãæ©èœããŸãã
è·³ãè¿ã£ãŠããèãã®1ã€ã¯ãè¡ã¡ãžã£ãŒé
åãšåã¡ãžã£ãŒé
åãããã M.'
ãäžæ¹ããä»æ¹ã«å€æŽãããåæ§ã«v'
ãv
è¡ã¡ãžã£ãŒã®ããªãšãŒã·ã§ã³ã§ãããšãããã®ã§ãã
@andyferrisã«+1ãTranspose
ããã³ConjTranspose
ãå¿
èŠã ãšæããŸãã @StefanKarpinskiã®ææ¡ã®ãã€ã³ã2ã«é¢ããŠã¯ããããã®ã©ãããŒãAbstractArray
ãªããžã§ã¯ãã®ã³ã³ãããŒã«å¶éãããåãAbstractArray
åéå±€èªäœã®äžéšã«ããŸããã Transpose(x)
ã¯ãåŒã«x'
ãæžã蟌ãã çµæã®åã§ããã Transpose
ãã£ã¹ãããããããšã§ãåŒã®æ®ãã®éšåã«å¿ããŠãè©äŸ¡ã延æ/é
延è©äŸ¡ããããšãã§ããŸãã *
äŸ99.9ïŒ
ã§ïŒã ãã ããè¡åå æ°å解ãªããžã§ã¯ããç·åœ¢æŒç®åãªã©ãå®çŸ©ããããã®ä»ã®åãªã©ã AbstractArray
éå±€ã®äžéšã§ã¯ãªãå¯èœæ§ã®ããæ°ããåã«å¯ŸããŠããã®æ§æã«æå³ãäžããããšãã§ããã¯ãã§ãã
è¡åãšãã¯ãã«ã®ç¹å®ã®ã±ãŒã¹ã«ã€ããŠã¯ã M*v'
ã®ãŠãŒã¹ã±ãŒã¹ã¯å®éã«ã¯ããããŸããããæ¬è³ªçã«å察ããŠããããã§ã¯ãããŸããã éèŠãªããšã¯ããããåºæ¬çãªæåŸ
ïŒããªãã¡ãã¹ããã¡ã³ã®ææ¡ã®çµããã®èŠå2ã4ã5ã6ãããã³8ïŒãæºããããšã§ãã
è°è«ã®äž»ãªæåŸã®ãã€ã³ãã¯ãããããã¹ã©ã€ã¹ãšã®çžäºäœçšã§ãã è¡åã®è¡ã¹ã©ã€ã¹ã¯èªåçã«Transpose
ãŸããïŒ ããã§ã®ç§ã®æ祚ã¯ãããã§ã¯ãªãAPLã¹ã©ã€ã¹ã«ãŒã«ã«é¢ãããã®ã§ãã
@Jutho ãåæ©ã¯*
çµåæ§ã«ããããšã§ãâ A*(v'w)
ãš(A*v')*w
äž¡æ¹ãšãæ©èœããåãçµæãçæããŸãããã€ã³ãïŒã
(A*v')*w
ãA*(v'*w)
ãšåãçµæãåºãã«ã¯ã A*v'
ãN=3
é
åã§ããå¿
èŠããããŸãã ããã¯ããªããèããŠãããã®ã§ããïŒ ç§ã¯ãããå®å
šã«èŠéããŸããã
OKãéåžžã«èå³æ·±ãã§ããç§ã¯ããã€ãã®ã³ã¡ã³ãããããŸãã
ãŸããã³ã¢ãŠãŒã¶ãŒã«å¯Ÿå¿ããå¿
èŠããããŸãã åºæ¬çã«ãäœããããŸãArray{T,n}
ãn
次å
ã¹ãã¬ãŒãžãšããŠäœ¿çšããããšããã®äž»èŠãªæ©èœã§ãã ããã¯ãç·åœ¢ä»£æ°ã«ã€ããŠã¯èããŠãããããžã¥ãªã¢å
ã®ããŒã¿ãæäœããã人ã®ããã°ã©ããŒã«æå³ãæããªããã°ãªããŸããã ãã®ããããããªãç¶æ³ã§ããé
åã¹ã©ã€ã¹ã¯å
±ãã¯ãã«ãè¿ãããšã¯ã§ããŸããã ããã¯å³å¯ã«ç·åœ¢ä»£æ°ã®æŠå¿µã§ããããã¯ãã«ç©ºéãšãã®å察ïŒæ°å€ããŒã¿ãããã£ãŒã«ãããªã©ïŒãå®çŸ©ã§ããç¹å®ã®ããŒã¿åT
ã®ã¿é©çšãããŸãã
ç§ã¯APLã¹ã©ã€ã·ã³ã°ã§ã©ã¡ãã®æ¹åã«ãè¡ãããšãã§ããŸããã çŽæçã«ã¯ååããã§ãã ããã¯ã¿ã€ãå®å®ã§ãããé©ãã¹ãããšã¯äœãããŸããã ç·åœ¢ä»£æ°ãèªå·±ç¡æçã«ããããã«ãã®å€æŽãè¡ãå¿
èŠã¯ãªããšæããŸãã...ããã¯çŽ æŽããããããããŸããïŒããã¯é倧ãªå€æŽãããããŸãããïŒã M[1,:]
ããµã€ãº1xnã§ã M[:,1]
ããµã€ãºnïŒnx1ã§ã¯ãªãïŒã§ããããšã«äžå®ãæããŸã...é察称ãããããã§ã...ããããç¶æ³ã«ã€ããŠã®è¯ãæãåºã«ãªããšæããŸãã¡ã¢ãªã«é
眮ãããŸãã ãšã«ãã..ãã®å€æŽã¯ãæœè±¡ããŒã¿ã®ä¿åãšæäœã«æå³ãããå Žåã«ã®ã¿è¡ãå¿
èŠããããŸãã ç§ã«ãšã£ãŠããã®å€åã¯ç·åœ¢ä»£æ°ã®è°è«ãšçŽäº€ããŠããŸãã
ãããã£ãŠãAPLã¹ã©ã€ã¹ã«ãŒã«ãå®è£
ããªããŠããæå³ã®ããç·åœ¢ä»£æ°ãéåžžã«ç°¡åã«ååã§ããŸãã ããªãããããå Žåã¯i
ã®çªç®ã®åãã¯ãã«M
åŒãcolvec(M,i)
ãšãããå Žåã¯i
ã®ç®ãè¡å
±åãã¯ãã«M
ã³ãŒã«ãrowvec(M,i)
ã i
ãã¿ãã«ãŸãã¯ãã¯ãã«ã®å Žåãã¿ãã«ãŸãã¯ãã¯ãã«ãŸãã¯ïŒå
±ïŒãã¯ãã«ãè¿ãå¯èœæ§ããããŸãïŒããã¯ãå Žåã«ãã£ãŠã¯äžŠååã«ã€ããŠæšè«ããã®ã«åœ¹ç«ã¡ãŸããïŒïŒã ãããªãã¯ã¹ãå¿
èŠãªå Žåã¯ãéåžžã®ã€ã³ããã¯ã¹è¡šèšã䜿çšããŠãã ããã APLã¹ã©ã€ã¹ã«ãŒã«ã䜿çšããå Žåãåãããšã*
èšå·ã§è¡ã¹ã©ã€ã¹ãšåã¹ã©ã€ã¹ã®ã¢ã¯ã·ã§ã³ãåºå¥ããã®ã«éåžžã«åœ¹ç«ã¡ãŸãã ïŒ rowvec
è€çŽ å
±åœ¹ãã©ã®ããã«åäœããããèæ
®ããå¿
èŠããããŸãïŒã
ããããã°ãç·åœ¢ä»£æ°ãå®è¡ããŠããå Žåããã¹ãŠãçã«ããªã£ãŠããããŠãŒã¶ãŒã¯Juliaãå®è£
ããç¹å®ã®ã¹ã©ã€ã¹ã«ãŒã«ã«ã€ããŠå¿é
ããå¿
èŠããããŸããã æŒç®å'
ã¯ããã¯ãã«ãšå
±ãã¯ãã«ïŒè£
食ãå€æŽããããïŒããã³è¡åïŒçŽæ¥ãŸãã¯é
延圢åŒã®ããããïŒã«ã®ã¿äœçšããŸãã ç§ããã€ãå¿ããŠããããã«èŠããåºæå解ããåºåºãã¯ãã«ãæœåºããæ¹æ³ãèŠããŠããæ¹ãç°¡åãããããŸããã
*
å ŽåãJuliaã®è¡å/ãã¯ãã«ä»£æ°ã¯ãä¹ç®æŒç®åãšããŠã®æ°åŠã®ããã«èŠããæããããããã«æ©èœãã2ã€ã®ãã¯ãã«ã2ã€ã®å
±ãã¯ãã«ã2ã€ã®è¡åãªã©ã®é決ããŠå¥œãã§ã¯ãªããšæããŸããå³å¯ã«ã¯æ°åŠã§ã¯ãæšæºã®ä¹ç®èšå·ã§ã¯ãªãã\ otimesãèšå·ïŒåå
ã®æéèšå·ïŒã䜿çšããŠæ¹çšåŒãèšè¿°ããå¿
èŠãããããã M*v'
èš±å¯ããªãã§ãã ããã ä¹ç®èšå·ã䜿çšãããšããã®æå³ãæ確ã«å®çŸ©ãããŠããŸããã è¡åã®ä¹ç®ã¯å¯æã§ã¯ãªãããã w*M*v' == v'*M*w
ããšã¯ã§ããŸããã ç¹°ãè¿ããŸããã M*v'*v
å Žåã *
çµåæ§ã«ã€ããŠè©±ãã®ã¯æå³ããããŸããã ããã¯ã2ã€ã®ç°ãªãä¹ç®ã·ã³ãã«ãå¿
èŠãšããinnerproduct(outerproduct(M,v'),v)
ãšããŠè§£éããããäž¡æ¹ã«*
ã䜿çšããããšãçã«ããªã£ãŠããã¹ã«ã©ãŒä¹ç®M * innerproduct(v',v)
ãšããŠè§£éã§ããŸãã ãã®åŒã§ã¯ããã©ã±ãããå¿
èŠã«ãªãå ŽåããããŸãããŸãã¯ãã³ã³ãã€ã©ãæå³ã®ããæŒç®ã®é åºãæ€çŽ¢ããå¯èœæ§ããããŸãïŒããã§ãè©äŸ¡ã®æéã®é åºã¯ãç§ãå¯äžã®æå¹ãªè©äŸ¡ã®é åºãšèŠãªããã®ã§ãããããšã«æ³šæããŠãã ããïŒã
ãã¯ãã«ãå
±ãã¯ãã«ãè¡åã䜿çšãããšãæšæºçãªæ°åŠãšäžèŽãã代æ°ã·ã¹ãã ãäœæã§ããŸãã 2ã€ã®ãã¯ãã«ã2ã€ã®å
±ãã¯ãã«ããŸãã¯2ã€ã®è¡åã®éã§å€ç©ãå®è¡ããå Žåã¯åžžã«ãæ¬è³ªçã«å€éç·åœ¢ä»£æ°ãŸãã¯äžè¬çãªãã³ãœã«ä»£æ°ã«ç§»è¡ããŸãã ããã§ã¯ãæ°ããã·ã³ãã«ã䜿çšããŠkron(M,N)
ããã«ä¹ç®ããè¡åãšãã¯ãã«ãäœæã§ããŸãã ãŸãã¯ãå®å
šãªå€éç·åœ¢ä»£æ°ããã±ãŒãžã䜿çšããããã«ãŠãŒã¶ãŒã«èŠæ±ããããšãã§ããŸãã ãŸãã¯äœã§ã...å
ã®è³ªåã®ç¯å²ãè¶
ããŠããããã§ãïŒ14ãæåããšããã§...ïŒ
èŠçŽãããšãããã§ã¯4ã€ã®ã»ãŒå®å šã«ç°ãªãããšãèµ·ãã£ãŠããããšãããããŸãã
Array
ã®ã¹ã©ã€ã¹ãæ¹åããŸããtranspose
ã conj
ãªã©ã®é
延è©äŸ¡ãå®è£
ããŸãããè¡åãåæ§ã§ããããããæåã®ãã®ã ããé倧ãªå€æŽã«ãªãã®ã§ããããïŒ ãã®ä»ã¯ãçŸåšã®æ©èœãæ¹åãŸãã¯è¿œå ããŸãã ãããã¯ãã¹ãŠå€ããå°ãªããç¬ç«ããŠå®è£ ããããšãã§ãããããããã¹ãŠè¡ã䟡å€ã®ããããšã§ãã ïŒPS APLã¹ã©ã€ã¹ãå¿ èŠãªå Žåã¯ããžã¥ãªã¢ãã倧ããããªããããŠããã±ãŒãžãå€ããããªã©ã®åã«ã
ãããç³ãèš³ãããŸãããã M*v'
ãèš±å¯ãããšããç§ã®ææ¡ã¯ã補åãé¢é£ä»ããããŸããŸãªæ¹æ³ãå®å
šã«ç°ãªã圢ç¶ãçæãããããå®éã«ã¯æå³ããããŸããã ã§ãããããããå€ããã€ãããªããç§ã®æåã®ææ¡ãéã ãšæããŸãã ãããŸã§ã®ãšãããããã¯APLã¹ã©ã€ã¹åäœãšã®æè¯ã®çµã¿åããã®ããã§ãã ãã¡ãããAPLã¹ã©ã€ã¹åäœãå¿
èŠãã©ããã¯ãããé«ãã¬ãã«ã®èæ
®äºé
ã§ãã
ããã€ãèšãããã£ãã®ã§ãããäžç²ã®å¡©ãšäžç·ã«æã£ãŠãã£ãŠãã ããã 圌ãã¯ãã ã®æèŠã§ãããç§ã¯ç§ã®ãã®ãããŸãéèŠã§ã¯ãªãããšãç¥ã£ãŠããŸãã ãããã @ andyferrisã®ã³ã¡ã³ããèªãã§ããæ°ã¥ããŸããã ç·åœ¢ä»£æ°ã«ã€ããŠã¯ç¥ããªãããJuliaã§ããŒã¿ãæäœãããããã°ã©ããŒã«ãšã£ãŠã¯æå³ããããšããã³ã¡ã³ãã«ã¯åæã§ããªããšæããŸãã ããã°ã©ããŒã¯æ°åŠããã°ã©ã ãæžãã¹ãèŽè¡ã§ã¯ãªããšæããŸãã ããã°ã©ããŒãããŒã¿ãæäœãããå Žåããããå¯èœã«ããå€ãã®èšèªããããŸãã ãžã¥ãªã¢ã¯ã³ã³ãã¥ãŒãã£ã³ã°ã®ããã®èšèªã§ãããé«åºŠãªæè¡çã³ã³ãã¥ãŒãã£ã³ã°ãå¯èœã«ããã¯ãã§ãã
@ esd100確ãã«ãç§ã¯ãã®ããšãèããŸããã ãããããžã¥ãªã¢ãšäžç·ã«ãç§ãã¡ã¯_貪欲ã«ãªããããšæã£ãŠããŸãã...å€ãã®ç®çã«å¿ããå€ãã®ããšã«åªããŠããããšãæãã§ããŸããã éæ°å€ããŒã¿ãæäœããããšã«ã¯ãçã®ç§åŠççç±ããããããããŸããã ããäžè¬çãªããã°ã©ãã³ã°ãããããžã¥ãªã¢ãŠãŒã¶ãŒã§ããçŸåšãŸãã¯å
ã®ç§åŠè
ããããããããŸããã ç§ã®ä»¥åã®ãã€ã³ãã¯ã転眮/掻çšã«ã€ããŠè©±ãããã®è¿œå ã®ãã£ãŒã«ããäžããããšã«ãã£ãŠã Array
é
ãããããããå€ãã®ã¡ã¢ãªã䜿çšãããããã¹ãã§ã¯ãªããšããããš
APLã¹ã©ã€ã¹ãå®è¡ããå Žåãè¡ã¹ã©ã€ã¹ãŸãã¯åã¹ã©ã€ã¹ã®ãããããåããªããžã§ã¯ããè¿ãå¿
èŠããããŸãã åé¡ã¯ãAPLã¹ã©ã€ã¹ãªãã§ã M[1,:]
ãè¿ãããã®ã«æé©ãªãã®ã¯äœã§ããããã ãããšã M[1,:,:,:,:]
ãArray{T,n}
M[1,:,:,:,:]
è¿ãå Žåã M[1,:]
ãcovector{T}
è¿ããšãã¿ããªãæ··ä¹±ããããšæããŸãã M = zeros(3,3,3)
ãèš±å¯ããçŸåš1x9ã®è¡åãè¿ãM[1,:]
ãåŒã³åºããšã©ããªããŸããïŒ ãããå
±ãã¯ãã«ã«ããå¿
èŠããããŸããïŒ M
ãArray{String,3}
ã©ããªããŸããïŒ
ç§ã«ã¯ãããã¯éåžžã«é©ãã¹ãæ··ä¹±ãæãããã«æãããã§ãããã ãŸããå°æ¥çºçããå ŽåãAPLã¹ã©ã€ã¹ã®å€æŽãšäžèŽããŸããã ãããã£ãŠãç§ã¯ç·åœ¢ä»£æ°ã®ç®çã§æ°ããé¢æ°rowvec(M,i)
ãšcolvec(M,i)
ãè¿œå ããããšãææ¡ããŠããŸããã ããã¯çæ³çã§ã¯ãªããæ°ããé¢æ°ãè¿œå ããŸã...ããããå°ãªããšãç·åœ¢ä»£æ°ã®ç®çã§ããããäœãè¿ãå¿
èŠããããã¯æããã§ãã å€éç·åœ¢ä»£æ°ã«å¯Ÿå¿ããããšã¯ããŠããŸããããäžè¬çãªé
åã®åªããããããã£ãšç·åœ¢ä»£æ°ã®åªããããããã£ïŒããã³ã³ãã¯ãã«åïŒãåããŠãããšç§ãèããããšãã§ããã®ã¯ããã ãã§ããã è¡åããã³ãã¯ãã«ãæœåºããããã®ããè¯ãè¡šèšæ³ãããã°ããããããã§ãããïŒ
@ esd100 ïŒJuliaãèšèšãããŠããã®ã¯ããã°ã©ããŒã ãšç¢ºä¿¡ããŠããŸãã ç§åŠèšç®ã¯ãžã¥ãªã¢ã¹ã®åŒ·ã¿ã§ãããæ±çšããã°ã©ãã³ã°èšèªãšããŠããã䜿çšããå€ãã®ãžã¥ãªã¢ãŠãŒã¶ãŒãããŸãã
ãã³ãœã«èŠä»¶ãã³ã³ããèŠä»¶ããåå²ããå¿ èŠããããšãã@andyferrisã«åæããŸãã
ã¹ã¬ããå
šäœãèªãã§ããªããšãç§ã®å人çãªåé¡ã¯ã3Dé
åA
ïŒæå±€æ®åœ±ããŒã¿ãªã©ïŒãããã
imagesc( data[1,:,:] )
ããã¯åäœããŸããã IMHO data[1,:,:]
ã data[:,1,:]
ãããã³data[:,:,1]
ã¯2Dé
åïŒãŸãã¯ãµãé
åïŒã§ããå¿
èŠããããŸãã çŸåšããã®åé¡ã解決ããããã«ãèªå·±å®çŸ©ã®squeeze
é¢æ°ã䜿çšããŠããŸãã
ç¹°ãè¿ããŸãããããã¯ç§ã®æèŠã§ãããç§ãè¡åããé ãé¢ããŠããããšãèãããšãéåžžã«éèŠã§ã¯ãããŸããã ã¢ããªã±ãŒã·ã§ã³ãéçºãããšãã¯ããããå°ãäžé£ã®èšèšååãå¿ èŠã ãšæããŸãã ãã«ããŒã¯ããã®ç®çãšã¢ã€ãã³ãã£ãã£ã«ã€ããŠæ確ã§çµ±äžãããã¡ãã»ãŒãžãéä¿¡ããå¿ èŠããããŸãã é«éã§çŽæçã§æŽç·Žãããæè¡çãªã³ã³ãã¥ãŒãã£ã³ã°ãã©ãããã©ãŒã ãéçºããããšãç®çã§ããããããJuliaã®åŒ·ã¿ã§ããå Žåã¯ãããã«åºå·ããŸãã äžè¬çãªããã°ã©ããŒã®èŽè¡ã«ãã®ç®çãé©åãããããšããŠãæ··åä¿¡å·ãéä¿¡ããªãã§ãã ããã
éèŠãªã®ã¯ãçŽç²ã«ç§åŠçãŸãã¯æ°åŠçã¢ããªã±ãŒã·ã§ã³ã®å Žåã§ããããã€ãã®ççŸãã解éããããŸããããšãã°ããã¯ãã«ãšè¡åã䜿çšããŠè¡šãããšãã§ããããã€ãã®æ°åŠçãªããžã§ã¯ãããããããããŸãå ·äœçãªéžæãããã¹ãã§ã¯ãããŸããã
ç¹å®ã®äžé£ã®èŠåã«åŸã£ãŠç¹å®ã®åéã®ããŒãºãæºããããã«ãå°çšã®ããã±ãŒãžãçšæããããšããå§ãããŸãã
@juthoç§ã®
ããã¯éåžžã«ç°¡åã§ãã ã»ãšãã©ã®JuliaãŠãŒã¶ãŒã«ãšã£ãŠéèŠãªæ©èœã¯Baseã«å±ããŠããŸãã ããç¹å¥ãªæ©èœã¯ããã±ãŒãžã«å±ããŸãã
ãã¡ãããããã«ç·ãåŒãã®ã¯ç°¡åã§ã¯ãããŸããã ããããäœããããŒã¹ã«å ¥ããæè¯ã®æ¹æ³ã¯ãå€ãã®äººãããããã¹ãã§ããããã«ããã±ãŒãžãäœæããããšã§ãã Baseã«å°å ¥ãããããŸããŸãªã³ã¢æ©èœã¯ãæåã«ããã±ãŒãžã§éçºãããŸããã
@ esd100 ãããªãã®è³ªåãå®å šã«ã¯ç解ããŠããŸããã çµå±ãç§åŠèšèªãæäŸãã¹ããã®ã¯ãç§åŠã§äœ¿çšãããå žåçãªãªããžã§ã¯ãã§è¡šçŸããã³èšç®ããããã®ããŒã¿æ§é ãšæ¹æ³ã§ãã ãã ããç¹å®ã®ããŒã¿æ§é ã¯ãç°ãªãæ°åŠçæ§é ãè¡šãã®ã«åœ¹ç«ã€å Žåããããåãã¿ã€ãã®ãªããžã§ã¯ãã«ã¯ç°ãªãè¡šçŸã圹ç«ã€å ŽåããããŸãã ãããã£ãŠãåºå®ãããæ°åŠçæ§é ãããŒã¿åã«é¢é£ä»ããããšã¯ãäžéšã®åéã§ã¯å¶éãå³ãããä»ã®åéã§ã¯è€éãããå¯èœæ§ããããŸãã ãããã£ãŠãããã¯JuliaããŒã¹ã§ã¯è¿œæ±ãããã¹ãã§ã¯ãªãã1ã€ã®åéã®ããŒãºã«ã®ã¿å¯Ÿå¿ããããšããç¹å®ã®ããã±ãŒãžã«ãã£ãŠè¿œæ±ãããã¹ãã§ãã
çŸåšã®è°è«ã«é¢ããŠããã¯ãã«ãšè¡åãæ±ããã¹ãŠã®äººã¯ããã¯ãã«ã転眮ããv ^ T * w =ã¹ã«ã©ãŒãæã€å¯èœæ§ãæåŸ ããŸãã ãããããããã®ãã¯ãã«ãšè¡åã¯ãããŸããŸãªãã®ãè¡šãããã«äœ¿çšãããå¯èœæ§ããããããã¯ããããåé/åéã«äŸåããŸãã äžèšã®æçš¿ã§ãv ^ Tãå®éã®å ±ãã¯ãã«ã§ã¯ãªãå¯èœæ§ãããå Žæã®äŸã瀺ããŸããã
2015幎1æ11æ¥ã«ã¯ãåå18æ10åã§ãESD100 [email protected]æžããŸããïŒ
@jutho https://github.com/juthoç§ã®çŽæã¯ããªããæ£ãããšããããšã§ãããããã±ãŒãžããããè¯ãããšããããªãã®çµè«ã®æ ¹æ ã¯äœã§ããããããŠã©ã®ä»£æ¿æ¡ãšæ¯èŒããŠïŒ
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubhttps ïŒ //github.com/JuliaLang/julia/issues/4774#issuecomment-69501771ã§è¡šç€ºããŠ
ããã¯éåžžã«ç°¡åã§ãã ã»ãšãã©ã®JuliaãŠãŒã¶ãŒã«ãšã£ãŠéèŠãªæ©èœã¯Baseã«å±ããŠããŸãã ããç¹å¥ãªæ©èœã¯ããã±ãŒãžã«å±ããŸãã
ããã»ã©åçŽã§ã¯ãªããšæããŸãã ããšãã°ãBaseã«ã¯ããã»ã«é¢æ°ããããã»ãšãã©ã®JuliaãŠãŒã¶ãŒã«ãšã£ãŠããããéèŠã«ãªãå¯èœæ§ã¯ã»ãšãã©ãããŸããã ããããBaseã«ããããšãã§ããçç±ã¯ãããã»ã«é¢æ°ãäœã§ãããã«ã€ããŠ1ã€ã®åççã«æ®éçãªæšæºãããã誰ããããã®ååãä»ã®äœãã«äœ¿çšããããäœãå¥ã®ããšãããããšãæåŸ ãããããªãå¯èœæ§ãããããã§ãã
泚ææ·±ãïŒåé·ãšèšã人ããããããããŸãããïŒåœåèŠåã«ãããMathematicaã¯ã³ã¢èšèªã§4000ãè¶ ããé¢æ°ãé 眮ã§ããããã±ãŒãžãããŒãããå¿ èŠãã»ãšãã©ãªãã®ã§éåžžã«äŸ¿å©ã§ãã å¯Ÿç §çã«ãPython / Sageã䜿çšããŠããå Žåã1ã€ã®ãã¡ã€ã«/ããŒãããã¯ãäžéšã«200åã®é¢æ°ãæ瀺çã«ã€ã³ããŒãããããšã¯çãããããŸããïŒè¿œè·¡äžå¯èœãªãfrom ___ import *ãæ§æãåé¿ããŸãïŒã çµã¿èŸŒã¿ã§ã¯ãªãé¢æ°ã䜿çšããå¿ èŠããããã³ã«ã次ã®ãããªè¿œå ã®æé ãå®è¡ããå¿ èŠããããŸãã
ïŒ1ïŒãã®ãã¡ã€ã«ã§ãã§ã«äœ¿çšãããã©ãããèŠããŠããããããã¹ãæ€çŽ¢ãè¡ã£ãŠç¢ºèªããŸãïŒååãä»ã®éšåæååã®å Žåã¯åèªå
šäœã«å¶éããŸãïŒ
ïŒ2ïŒæ¬¡ã®ããããïŒïŒaïŒã€ã³ããŒããããã«è¿œå ããæèã®æµãã倱ããåã³èŠã€ããŸãã ãŸãã¯ïŒbïŒäœããè¡ã£ãåŸãå¥ã®ããšãã¡ã¢ãªã«ä¿æããŠãã€ã³ããŒããè¿œå ããããšãå¿ããªãããã«ããŠãã ãã
ïŒ3ïŒããŸãäžè¬çã§ãªãé¢æ°ã®å Žåããããããããã©ã®ããã±ãŒãžã«å«ãŸããŠãããã調ã¹ãå¿
èŠããããŸã
ããã¯è¿·æã§è¡°åŒ±ãããå¯èœæ§ããããŸãã ãããã£ãŠãããã»ã«é¢æ°ã®ããã«ãæšæºãšèŠãªããããã®ã¯ãã¹ãŠãã€ãŸãååã®ç«¶åãæ··ä¹±ãåŒãèµ·ãããªããã®ã¯ãå€ãã®äººã䜿çšãããã©ããã«é¢ä¿ãªããBaseã«å«ããå¿ èŠããããšæããŸãã 確ãã«ç·åœ¢ä»£æ°ã
ãããã¯ã«æ»ããšãæ©èœã®ããã€ãã®ã¬ã€ã€ãŒã«ã€ããŠè©±ããŠããŸãã---æå³çã«è£žã®ã³ã³ãããŒãšããŠã®é
åïŒ Base.AbstractArray
å®è£
ãããŠããïŒãããäžäžã®ã»ãã³ãã£ã¯ã¹ãæã€ãã«ã«ããã³ãœã«ãªããžã§ã¯ãïŒç§ã®èª¬æã«ããïŒãŸã§AbstractTensorArray
ææ¡ããã¯ãã«ç©ºéã«ããããããã€ã³ããã¯ã¹ãæã€ããäžè¬çãªãã³ãœã«ãªããžã§ã¯ãïŒ @Juthoã®TensorToolboxã®ããã«ïŒ---äžè¬æ§ãé«ããæé©åã®å¯èœæ§ãæžãããŸãã
ãŠãŒã¶ãŒããããã®ã¬ã€ã€ãŒéãç°¡åã«ç§»è¡ã§ããããšãéèŠã ãšæããŸããç¹ã«ããŠãŒã¶ãŒãæåã«å®éã«å¿
èŠãªäžè¬æ§ã®ã¬ãã«ããç¥ããªããå¯èœæ§ãããããã§ãã ç°¡åãªäŸãšããŠã@Juthoã¯ææ@jdbatesã®ç»ååŠçäŸã§ã¯ããŠãŒã¶ãéåžžã«ããããã«äžæ¹åãšå¥ã®æ¹æ³ã§è²ç©ºéã«ãããåŠçç»å座æšãšããŠãå¥åã®ãžãªã¡ããªã«ã€ã³ããã¯ã¹ã®ç°ãªããµãã»ãããé¢é£ä»ãããããããŸããã ãã ãããããã®1ã€ã ãã幟äœåŠçã«äœ¿çšãå§ããå Žåã¯ããããããç¬èªã®å¹ŸäœåŠçã«äœ¿çšã§ãããããäžè¬çãªè¡šçŸã«ã¢ãããã£ã¹ããããšäŸ¿å©ã§ãã äžè¬æ§ã®åã¬ãã«ã§éå§ããè¿œå ã®é¢æ°ïŒãŸãã¯é¢æ°åŒã³åºããã¿ãŒã³ïŒãé©åãªããã©ã«ãã䜿çšããå Žå---ããšãã°ã AbstractTensorArray
ã®ã¢ãã/ããŠã³ã€ã³ããã¯ã¹ãšãã¥ãŒãã©ã«ã€ã³ããã¯ã¹ãåäžã®ããã©ã«ãã®ãã«ã«ããã¯ãã«ç©ºéã«ã¢ãããã£ã¹ããããããããã·ãŒã±ã³ã¹ãã¹ããŒã¹---ãã®åŸãã»ãŒã·ãŒã ã¬ã¹ã«ãªããŸãã æ©èœã®äžäœå±€ã®ãŠãŒã¶ãŒã¯ãå¿
èŠã«ãªããŸã§äžäœå±€ãç¥ã£ããæ°ã«ãããããå¿
èŠã¯ãããŸããã
æ確ã§äºæž¬å¯èœãªãã®éšå---é¢é£ãããŠãŒã¶ãŒã«ãšã£ãŠ---éå±€ãã©ãããã¹ããã¯ãåççã«Baseã«å ¥ãå¯èœæ§ããããŸãã æ¬åœã®åé¡ã¯ãé åæŒç®ãç·åœ¢ä»£æ°ããã³ãœã«ä»£æ°ã®ãããã®å Žåã§ãããã®ã¿ã€ãã®æ©èœã®ãŠãŒã¶ãŒãå¥ã®æ¹æ³ãæåŸ ãŸãã¯æãã§ããå¯èœæ§ã¯ã©ã®ãããããã§ããããã
å€ãã®äººããPythonã©ã³ãã§äœããè¡ãããã«å¿ èŠãªã€ã³ããŒãã®æ°ã®ã°ãããç²åºŠãå«ã£ãŠããŸãããããã»ã©ã®é·ãã«ãªãããšãææ¡ããŠãã人ã¯ããªããšæããŸãã
ããããããã€ãã®äœ¿çšäŸã§ã¯ãå€æ°ã®äŸåé¢ä¿ãšã©ã€ãã©ãªã®è¥å€§åã¯æãŸãããªããšããéèŠãªè°è«ããããŸããJuliaèšèªã§ã¯ãFortranã©ã³ã¿ã€ã ã©ã€ãã©ãªãã³ã³ãã¥ãŒã¿ã«ã€ã³ã¹ããŒã«ããå¿ èŠã¯ãããŸããããçŸæç¹ã§ã¯ãJuliaæšæºã©ã€ãã©ãªãã€ã³ã¹ããŒã«ããå¿ èŠããããŸããå®è¡ãããã³ãŒãã¯ãç·åœ¢ä»£æ°ïŒãŸãã¯Besselé¢æ°ããŸãã¯FFTãªã©ïŒãå®è¡ããŠããŸãã ããã¯ãã¹ãŠïŒ5155ããã®ä»ã®åé¡ã§ååã«ã«ããŒãããŠããŸããããããã©ã«ãã§ã€ã³ã¹ããŒã«ãããŠããããšãæ©èœã«æäœéå¿ èŠãªãã®ãã¯ãæçµçã«ã¯ç°ãªãã¢ãžã¥ãŒã«ã®ã»ããã«åé¢ããå¿ èŠããããŸãã
ãããŒã«æè¬ããŸãã ããã«ãç§ãã¡ã®ããã±ãŒãžã·ã¹ãã ã§ã¯ãè€æ°ãã°ã«ãŒãåããããã±ãŒãžã®ãããªãããŒã«ããã¯ã¹ãã䜿çšããŠãåé¡ã¯ãããŸããã @reexport
ãã¯ãã䜿çšãããšãããã¯ããŸãæ©èœããŸãã
ããããå¥ã®ãã€ã³ãããããŸãã ããã±ãŒãžå ã§ã¯ãã¢ã€ãã¢ãåé²ãããã®ãã¯ããã«ç°¡åã§ãã äœããå€ãããã®ãªãããããããã ãã§ãã ããŒã¹1å ã§ã¯ãã¯ããã«å¶éãããŠããŸãã
ããã±ãŒãžã®ãããã¯ãŒã¯ã䜿çšãããšãç¬ç«æ§ãé«ãŸããŸããããã©ãããã©ãŒã ãæçåãããããã²ãŒããããå°é£ã«ãªãããã§ãã ããçµ±äžãããäžè¬åãããæ§é ã䜿çšãããšãåééã®çžäºäœçšãšæ°ãããã¡ã€ã³ã®æ¢çŽ¢ãåçåããã³ä¿é²ãããããã§ãã
ãã¯ãã«*è¡åãå®è¡ããããã®çŸåšæãæ
£çšçãªæ¹æ³ã¯äœã§ããïŒ
äŸãã°ãç§ãæã£ãŠãããšèšãX
圢ç¶ã§(K, N)
ãšb
圢ç¶ãš(K,)
ããšç§ã¯æããããb
ã«é·ã(N,)
ãã¯ãã«ãååŸããããã«æ®ããŸããã
BLAS.gemv('T',1.0,X,b)
ã«é»è©±ããŸãã
ãŸãã¯reshape(b'*X,size(x,2))
ã©ã¡ããå°ãéãã§ãã
ç§ã¯ããªããX'b
ãããããšãã§ãããšæããŸã
2015幎3æ13æ¥ååŸäºæ15 GMT-04ïŒ00 joschu [email protected] ïŒ
ãã¯ãã«*è¡åãå®è¡ããããã®çŸåšæãæ £çšçãªæ¹æ³ã¯äœã§ããïŒ
ããšãã°ã圢ç¶ïŒKãNïŒã®Xãšåœ¢ç¶ïŒKãïŒã®bããããå¿ èŠãªå Žå
å·ŠåŽã®bãæããŠãé·ãïŒNãïŒã®ãã¯ãã«ãååŸããŸãã
BLAS.gemvïŒ 'T'ã1.0ãXãbïŒãåŒã³åºããŸãã
ãŸãã¯reshapeïŒb '* XãsizeïŒxã2ïŒïŒ
ã©ã¡ããå°ãéãã§ããâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/JuliaLang/julia/issues/4774#issuecomment-79405868 ã
ãããç§ã¯ãããXã®ã³ããŒãããªã¬ãŒãããšæã£ãŠããŸããã
ãããã @ timeã¯ãã¡ã¢ãªå²ãåœãŠã«åºã¥ããŠãã³ããŒããªãããšã瀺ããŠããããã§ã
julia> X = rand(1000,1000); y = rand(1000);
julia> <strong i="8">@time</strong> y'X;
elapsed time: 0.00177384 seconds (15 kB allocated)
julia> <strong i="9">@time</strong> X'y;
elapsed time: 0.000528808 seconds (7 kB allocated)
'ã®æ§æ解æãè¡ãã®ã§ã X'y
ã¯Ac_mul_B(X,y)
ã«ãªãã
ããªããææ¡ããã®ãšåãBLASã³ãŒã«ã
2015幎3æ13æ¥ååŸäºæ28åGMT-04ïŒ00 joschu [email protected] ïŒ
ããããããXã®ã³ããŒãããªã¬ãŒãããšæã£ãŠããŸãããã
ïŒãããã @ time https://github.com/timeã¯ããªãããšã瀺ããŠããããã§ã
ã³ããŒãã¡ã¢ãªå²ãåœãŠã«åºã¥ããžã¥ãªã¢> X = randïŒ1000,1000ïŒ; y = randïŒ1000ïŒ;
ãžã¥ãªã¢> @time y'X;
çµéæéïŒ0.00177384ç§ïŒ15 kBå²ãåœãŠïŒãžã¥ãªã¢> @time X'y;
çµéæéïŒ0.000528808ç§ïŒ7 kBå²ãåœãŠïŒâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/JuliaLang/julia/issues/4774#issuecomment-79421713 ã
ä¿¡ããããªããããããŸãããããã®ã¹ã¬ããå šäœã®èšè¿°ã¯å ·äœåã«è¿ã¥ããŠããŸãã
æåŸã®ãã€ã³ãïŒèª°ãããããèæ ®ããŸãããïŒã å®éã«ã¯ 'ãšã¯ãŸã£ããç°ãªãåç©ã§ããå¯èœæ§ããããŸããïŒ åŸè ã¯ãã¥ã¢ã«ã§ããããã®æ£ããæ§é ãæã£ãŠããŸãããã åºã«ãªããã£ãŒã«ããå®æ°ã§ãªãå Žåã¯ããã§ã¯ãããŸããã å²ãåœãŠãã®ã¯ããããã§ãããã 転眮ã®ããã¹ãŠã®ã€ã³ããã¯ã¹ãéã«ãããæŠå¿µã転眮ããå察æ§ã®ãã¹ãŠã®æŠå¿µã 'ã«äºçŽããŸããããã«ããããé¢çœãè¡ãã¯ãã«ã/ãšã«ããŒãå ±åœ¹ãçæãããŸããïŒ
ãããã«ããã conj(transpose(x))
ã¯ctranspose(x)
ãšåçã§ããå¿
èŠããããšæããŸãã
äžã§è«ããããã«ã transpose
ãšctranspose
ãäœæããã©ãããŒã¿ã€ãã®ãããã«ãã dual
ãªã©ã®ç¹å®ã®æ°åŠçæŠå¿µãå«ãååãä»ããããããšãé¡ã£ãŠããŸãã Juliaãªã©ã®ç§åŠèšèªã¯ãäžé£ã®æçšãªããŒã¿æ§é ãæäŸããäžè¬çãªæäœãå®è£
ããå¿
èŠããããŸãããå³å¯ãªæ°åŠçæ§é ãããã«é¢é£ä»ããã®ã¯ééãã ãšæããŸããããã¯ãäžéšã®ã¢ããªã±ãŒã·ã§ã³ã«ã¯é©åã§ãªãããã®ä»ã ãããã®ããŒã¿æ§é ãšæŒç®ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã«æ°åŠæŒç®ãå®è£
ããã®ã¯ãŠãŒã¶ãŒã®è²¬ä»»ã§ãã z.' * A * z
ãã¹ã«ã©ãŒãè¿ãã¢ããªã±ãŒã·ã§ã³ã¯ç¢ºãã«ãããŸããããã§ã z
ã¯è€çŽ ãã¯ãã«ã§ããã A
ã¯è¡åã§ãããããã¯å
ç©ãå察ãšã¯é¢ä¿ãããŸããããã¯ãã«ã
@jutho z.' * A * z
ãŠãŒã¹ã±ãŒã¹ãæããŠããã ããŸããïŒ
z1
ãšz2
ã2ã€ã®è€çŽ ãã¯ãã«Z1
ãšZ2
ã®è¡šçŸã§ããå ŽåïŒããšãã°ãã±ãŒã©ãŒå€æ§äœã®æ¥ç©ºéã®ããã¢ã«ãã£ãã¯éšåã®æ¥ç·ãã¯ãã«ïŒããã³a
ã¯ã2ã€ã®å
±å€ã€ã³ããã¯ã¹ïŒããšãã°ãã±ãŒã©ãŒå€æ§äœã®è€çŽ æ°ïŒ2,0ïŒåœ¢åŒïŒãšA(Z1,Z2) = z.' * a * z
ãæã€ãã³ãœã«A
ã®è¡åè¡šçŸã§ãã
ããã§åŒ·èª¿ããã®ã¯ããžã¥ãªã¢ãªããžã§ã¯ãz1
ã z2
ãããã³a
ã¯ãïŒéžæãããåºåº/調æŽã«é¢ããŠïŒç¹å®ã®æ°åŠçãªããžã§ã¯ãã®_è¡šçŸ_ã圢æããã ãã§ãããšããããšã§ããããŒã¿æ§é ã«å¯Ÿããæäœã¯ããããã®ããŒã¿æ§é ãäœãè¡šããŠããããç¥ããªãéããæ°åŠæŒç®ã«äžæã«é¢é£ä»ããããšã¯ã§ããŸããã
@juthoããããšãã è¡šçŸã«ã€ããŠã®ããªãã®ææã¯ããç解ãããŠããããã®è°è«ã§ã¯äœåºŠãè¡šçŸãããŠããŸããã ãã¯ãã«ãšè¡åã®æå°ã€ã³ã¿ãŒãã§ã€ã¹ãèŠã€ããŠããã®æå°ã€ã³ã¿ãŒãã§ã€ã¹ãé åã®æå°ã€ã³ã¿ãŒãã§ã€ã¹ãšæ ¹æ¬çã«äºææ§ããªããã©ãããããã³ãŠãŒã¶ãŒå®çŸ©ã®æœè±¡ããŒã¿åã«äœããªãããŒãã§ãããã確èªããããšããŠããŸãã
ãã®æç¹ã§ãç§ã¯@StefanKarpinskiã®ææ¡ã«å šé¢çã«è³æã§ããããããäžèšã®@andyferrisã«ãã£ãŠã»ãšãã©ãšã³ãŒãããŠ
ä»ã®ãã¹ãŠã¯è©³çŽ°ã§ãã row(M,i)
col(M,i)
é¢æ°ãšM[i,:].'
ãå¿
èŠã«ãªããšæããŸããïŒ IIUCã M[i,:]'
ã¯ããã®å Žåã¯æãŸãªãconj
ãŸããïŒ
ã¯ããååæžãããšãã®APLã¹ã¿ã€ã«ã®ã€ã³ããã¯ã¹äœæã®è¯ããååã«ç解ããŠããªãã£ãããšãä»ãå ããŠãããŸãããä»ã§ã¯ãã®å€æŽãå
šé¢çã«ãµããŒãããŠããŸãã ããã«ãããå察ãã¯ãã«ãããã«é
åçã«ãªãã row
/ col
æ©èœããŸãã
ãã以æ¥ãå®è£ ãè©ŠããŠã¿ãŸããããæãæ··ä¹±ããã®ã¯ãè¡åããæœåºãããã³ãã¯ãã«ãå ±åœ¹ã§ãããã©ããã§ããâŠ
ãããªãã¯ã¹ã®ãªãã©ã«å€ãååŸããããšæããŸãã ãã£ã©ãã¯èšæ³ã䜿çšããŠãïŒä»»æã®ïŒè¡åM = sum_i | i>ãå±éããŸããrow(U,i)' = col(Uâ,i)
ãååŸããŸããããã¯ãåºæå解ããå·Šå³ã®åºæãã¯ãã«ãæœåºããã®ã«æé©ã§ãã
ã¢ã³ãã£
2015幎3æ15æ¥ã«ã¯ãåå9æ36åpmã«ããžã§ãBezansonã®[email protected]ã¯æžããŸããïŒ
ãã®æç¹ã§ãç§ã¯@StefanKarpinski https://github.com/StefanKarpinskiã®ææ¡ã«å šé¢çã«è³æã§ããããããäžèšã®@andyferrishttps ïŒ//github.com/andyferrisã«ãã£ãŠã»ãšãã©ãšã³ãŒãããŠããŸãã ç¹ã«
APLã¹ã¿ã€ã«ã®ã€ã³ããã¯ã¹äœæ
v 'ã¯ããçš®ã®CovectorãŸãã¯Transposeã¿ã€ããäžããŸã
ä»ã®ãã¹ãŠã¯è©³çŽ°ã§ãã rowïŒMãiïŒé¢æ°ãšcolïŒMãiïŒé¢æ°ãè¿œå ãããšäŸ¿å©ãªå ŽåããããŸãã ãã以å€ã®å Žåãè¡ãã³ãã¯ãã«ãšããŠæœåºããã«ã¯ãM [i ãïŒ]ãå¿ èŠã«ãªããšæããŸãã ïŒ IIUCãM [i ãïŒ] 'ã¯ããã®å Žåã«æãŸããªãæ¥ç¶è©ãå®è¡ããŸããïŒâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHub https://github.com/JuliaLang/julia/issues/4774#issuecomment-81228816ã§è¡šç€ºããŠ
ããã«åãçµã¿å§ãããã©ã³ãã£ã¢ã¯ããŸããïŒ ããšãã°ã @ mbauman ã @ jakebolewskiã¯ãç§ãé©ããããšã«ããã®ã¹ã¬ããã«ã¯ãŸã å«ãŸããŠããŸãã:)
å€æŽãå¿ èŠãªãã®ããã¹ãŠèŠã€ããã®ã¯é¢åãããããŸããããã€ã³ããã¯ã¹äœæã®åäœã«å¯Ÿããåºæ¬çãªå€æŽã¯ããã»ã©æªããªãã¯ãã§ãã ããããã @ jiahaoãš@andreasnoackã¯ã
ãããé²ããåã«ã9ã8ã®ã³ã¡ã³ãã¯å¿ èŠãããŸããã
ç§ã¯ãããæäŒãããšãã§ããŸãã
ç§ãã¡ã¯ããªãè¿ãã§ã
é¢é£ããã³ã¡ã³ããšããŠã Transpose
ãšCTranspose
ã©ãããŒã¿ã€ããããå Žåããããããã¬ãŒã³ãªConjugate
ã©ãããŒã¿ã€ãã§ããå¿
èŠããããŸããããšãã°ã conj(A)
ã¯æ¬¡ã®ããã«ãªããŸãããŸãæ æ°ã§ãã è¡åã«BLASãä¹ç®ããå Žåãç¹å¥ãªãµããŒãããªããããããã¯ããŸã圹ã«ç«ã¡ãŸããïŒBLASã®C
ã¯ãšã«ããŒãå
±åœ¹ãæå³ããŸãïŒããå®å
šãªJulia BLASå®è£
ãããå Žåã¯ããµããŒãããããšãã§ããŸãã conj(A)*B
æ瀺çãªæŽ»çšãªãã
ç§ã¯ã以åããããã¯ãã«è»¢çœ®ãçå£ã«åãæ¢ããŠããããã«æããŸãã
ããããã @ andreasnoackãš@simonbyrneã¯ãïŒ6837ãåæ€èšããå¿ èŠããããã©ãããæããŠãããŸãã
Transpose{Array} <: AbstractArray
ããã£ãŠã¯ãªããªããšãã@simonbyrneã«åæããŸãã
ãã®ä»ã®äžè¬çãªèãïŒ
u
ãµã€ãºã(n,)
å Žåã u * u'
ã¯(n,) x (1, n)
å«ãèšç®ã§ãã ãã®ç©ã¯ãæåã®åŒæ°ã(n, 1)
ã«èªåçã«å圢æããªãéããè¡åä¹ç®ã®éåžžã®èŠåã䜿çšããŠèšç®ããããšã¯ã§ããŸããã(n,)
é
åã¯ã圢ç¶(n,1)
ã圢ç¶(n,1,1)
ãªã©ã®å圢æãããé
åãšæå³çã«åäžã§ãããã ãã転眮ã«ãã£ãŠãã¹ãŠã®æ¬¡å
ãå転ããå Žåã¯ãçµæã®é
åã®åœ¢ç¶ã¯(n,)
ã (1, n)
ãããã³(1,1,n)
ã§ãããæ«å°Ÿã®ã·ã³ã°ã«ãã³ã®è¿œå ã®ã¿ãèš±å¯ãããŠããå Žåããããã¯åçã§ã¯ãããŸããã ãããè«ççã«æ¥µç«¯ã«èãããšãé
åã®è»¢çœ®ã¯ä»»æã®æ°ã®_leading_ã·ã³ã°ã«ãã³ãæã€å¯èœæ§ããããããè«ççã«äžè²«æ§ã®ãªããããŸããªåœ¢ç¶ã«ãªããŸãããŸããæç®èª¿æ»ãè¡ããããã€ãã®èå³æ·±ãAPLã®æŽå²ââãæããã«ããŸããã ç§ãã¡ãAPLã€ã³ããã¯ã¹èŠåãšåŒãã§ãããã®ã¯ãIversonã®1962幎ã®æ¬ã«ã¯ãããŸããã§ããããAPL \ 360ïŒ1968; APLã®æåã®å®è£ ïŒã«ã¯ååšããŠããŸããã ãã ããAPL \ 360ã¯ãã¹ã«ã©ãŒãš1ãã¯ãã«ãæ··åããŸãããããã¯ãïŒHaegiã1976ïŒãŸã§æç®ã§èªèãããŠããªãã£ãäžæŽåã§ãã å€æ¬¡å é åã®åœ¢åŒçã»ãã³ãã£ã¯ã¹ã«é¢ããè°è«ã¯ããã©ãŠã³ã®å士è«æïŒ1972;åŸã«APL2ãèšèšïŒã«æåã«ç»å Žãããããã®ã»ãã³ãã£ã¯ã¹ã圢åŒåããäžé£ã®äœæ¥ã«æè»ããããŸããã
APL2ã«ã€ãªããéçºã®åªãã調æ»ã¯æ¬¡ã®ãšããã§ãã
玢åŒä»ãèŠåã«æ³šæãæãããŠããããšã«ã€ããŠãæç®ã§æ³šç®ã«å€ããã®ã¯æ¬¡ã®ãšããã§ãã
ãŸãããæ«å°Ÿã®ã·ã³ã°ã«ãã³ãã£ã¡ã³ã·ã§ã³ãè¿œå ã§ãããã«ãŒã«ããªããšãã¢ã€ãã³ãã£ãã£ã«åŸããªã
å·ŠåŽã¯ã¹ã«ã©ãŒïŒãã¬ãŒã¹ã®å®çŸ©ã«ããïŒã§ãããå³åŽã¯åœ¢ç¶(1, n) x (n, n) x (n,) = (1,)
ã§ãã éã«ããã®ã¢ã€ãã³ãã£ãã£ã¯ããã¯ãã«è»¢çœ®ã»ãã³ãã£ã¯ã¹ãéžæããããã®æéãšèŠãªãããšãã§ããŸãã éèŠãªç¹ã¯ãæåã®IDãå®çŸ©ãããã¬ãŒã¹æäœã®åŸªç°ããããã£ã§ãã ãã¬ãŒã¹å
ã®éã¯ãã¹ã«ã©ãŒãŸãã¯ãããªãã¯ã¹ã®ããããã§ããå¿
èŠããããŸãïŒãã¯ãã«ã®ãã¬ãŒã¹ã¯å®çŸ©ãããŠããŸããïŒã Avv'
ã¯ãã§ã«æ確ã«è¡åã§ãïŒ (Av)v'
ãšA(vv')
ã¯åãçµæãçæããŸãã ãããã2çªç®ã®éãããã v'Av
ã¯è¡åãŸãã¯ã¹ã«ã©ãŒã§ãªããã°ãªããŸããã ïŒã¹ã«ã©ãŒã®å Žåã2çªç®ã®IDãä¿æãããŸããïŒ v'Av
ã¯ããæ«å°Ÿã®ã·ã³ã°ã«ãã³æ¬¡å
ãè¿œå ã§ãããã«ãŒã«ãã¢ã¯ãã£ããªå Žåã«ã®ã¿1ãã¯ãã«ã«ãªããŸãããã®å Žåãééçã«1x1è¡åã«å圢æã§ããŸãã
ãããã£ãŠããã¬ãŒã¹ãå®çŸ©ããå Žåã¯ãå¿
ç¶çã«ãå€ç©vv'
ããã³2次圢åŒv'Av
ã®èš±å®¹åœ¢ç¶ã«å¶éã課ããããŸãã
@jihao ïŒããªããç§ãã¡ã«å¯ŸããŠäœã䞻匵ããŠããã®ããã
ããªãã®è°è«ã®ããã€ãã¯ã転眮ããã¹ãŠã®æ¬¡å ãé転ããããšã¯èããããªãç«ââå Žã匷åããããã«åãããšãã§ãããšæããŸãïŒåãã¯ãã«ã¯åãã¯ãã«ããŸãã¯ããããä»»æã®æ°ã®å è¡ã·ã³ã°ã«ãã³æ¬¡å ãæã€é åã«è»¢çœ®ãããŸãïŒã è¡å代æ°ãšã®äžè²«æ§ãä¿ã€ã«ã¯ã代ããã«æåã®2ã€ã®æ¬¡å ã亀æãããã®ãšèŠãªãå¿ èŠããããšæããŸãã ããããã°ãããªããè¿°ã¹ãŠããççŸã®ããã€ãã¯æ¶ãããšç§ã¯ä¿¡ããŠããŸãã ããŸãããã°ã転眮æã«ã·ã³ã°ã«ãã³æ¬¡å ãè¿œå ããªããšãæ®ãã¯æ¶ããŸãïŒã³ãã¯ãã«ã®æåã®æ¬¡å ããªãããšã¯ã«ãŠã³ããããŸããïŒã
äžèšã®ç§ã®äžè¬çãªã³ã¡ã³ãã¯ããããã®ã«ãŒã«ãæ¯æããããšã§ã¯ãªããé åã€ã³ããã¯ã¹ã«ãŒã«ã®èšèšç©ºéãšç·åœ¢ä»£æ°ã®ã¢ã€ãã³ãã£ãã£ãšã®çžäºäœçšãæåããã®ã«åœ¹ç«ã€ããšã§ãã
ãæ«å°Ÿã®ã·ã³ã°ã«ãã³æ¬¡å
ãè¿œå ã§ãããã«ãŒã«ã¯MATLABã§äœ¿çšãããïŒ@ alanedelmanã«ãããšïŒå€æ¬¡å
é
åããµããŒãããããã«å°å
¥ãããŸããã MATLABé
åã§äœ¿çšãããã€ã³ããã¯ã¹ãããªãã»ãããžã®èšç®ã¯ã sub2ind
ã§å®çŸ©ãããŸããããã¯ãæ«å°Ÿã®1ãããã€ã¹ããŒããŠããåãç·åœ¢ã€ã³ããã¯ã¹ãè¿ããŸãã ããã«ãMATLABã®ãããªãã¯ã¹ã€ã³ããã¯ã¹äœæããã¥ã¡ã³ãã«ã¯ãã€ã³ããã¯ã¹äœææäœ
1ã«çããæ«å°Ÿã®æ·»ãåãå«ãŸãªããBã«æå®ãããæ·»ãåã®æ°ã¯ãndimsïŒBïŒãè¶ ããŸããã
ããæ£åŒã«ã¯ã次ã®ããã«è¿°ã¹ãããšãã§ãããšæããŸãã
é åãå ¥åãšããŠåãåãæäœã®å Žåã
(n,)
-arraysã(n,1)
-arraysã(n,1,1...)
é åã¯ããããã®æäœã®æå¹ãªåŒæ°ã§ãããšããç¹ã§ããã¹ãŠåãç䟡ã¯ã©ã¹ã«ãããŸãã ïŒn=1
å Žåãåå€é¡ã«ã¯ã¹ã«ã©ãŒãå«ãŸããŸããïŒ
äŸïŒ
A*b
ããã³A\b
ããã§ã A
ã¯è¡åã§ããã b
ã¯ãã¯ãã«ãŸãã¯è¡åïŒ n x 1
è¡åãšåãã»ãã³ãã£ã¯ã¹ïŒã§ããhcat(A, b)
ããã§ã A
ã¯è¡åã§ã b
ã¯ãã¯ãã«ãŸãã¯è¡åã§ããå€åŽã®è£œåã®äŸãé€ããŠãã»ãšãã©ã®å ŽåãJuliaã«ã¯ãã®ãæ«å°Ÿã®ã·ã³ã°ã«ãã³ãã£ã¡ã³ã·ã§ã³ã«ãŒã«ãè¿œå ã§ããŸããã«ãŒã«ããããŸããã ä»ã«ããããããããŸããããä»ã¯æãã€ããŸããã
Transpose{A<:AbstractArray}
ãAbstractArray
ãµãã¿ã€ãã§ãªãéããåé¡ã¯ãªããšæããŸãïŒãã ããçããã»ã©èããŠããªãã®ã§ãäœããèŠèœãšããŠããå¯èœæ§ããããŸãïŒ ïŒ
ãš
typealias AbstractVectorTranspose{A<:AbstractVector} Transpose{A}
typealias AbstractMatrixTranspose{A<:AbstractMatrix} Transpose{A}
typealias AbstractTMatrix Union(AbstractMatrix, AbstractMatrixTranspose}
ïŒãããŠåæ§ã«CTranspose
ïŒ
AbstractVectorTranspose * AbstractVector = Number
AbstractVector * AbstractVectorTranspose = AbstractMatrix
AbstractVectorTranspose * AbstractTMatrix = AbstractVectorTranspose
AbstractTMatrix * AbstractVector = AbstractVector
AbstractTMatrix * AbstractTMatrix = AbstractTMatrix
å¯äžã®æªè§£æ±ºã®è³ªåã¯ã AbstractTMatrix
æåã®ãµã€ãºã1ã®å Žåã«AbstractVector * AbstractTMatrix
ããµããŒãããå¿
èŠããããã©ããããŸãã¯AbstractVector * AbstractVectorTranspose
ã§ååãã©ããã§ãã
ãŸããæ°ããåã·ã¹ãã ã¯ããããã®typealias
ãšunion
ããã€ããããå°ã泚ææ·±ãè¡šçŸããã®ã«åœ¹ç«ã€ãããããŸããã
ãŸããããšãã°v.'*A
ã(A.'*v).'
ãšããŠèšç®ãããå Žåã A
èªäœãããšãã°A=B'
ããã°ã Conjugate
ã©ãããŒã®å¿
èŠæ§ããããã¢ããããŸãã ã
Transpose{Array} <: AbstractArray
ããã£ãŠã¯ãªããªããšãã@simonbyrneã«åæããŸãã
ããã§è©³ãã説æããŠããã ããŸããïŒ https://github.com/JuliaLang/julia/issues/4774#issuecomment -59428215ã§ã®æèŠã¯ãCoVectorã¯AbstractVectorã®ãµãã¿ã€ãã§ãã£ãŠã¯ãªããªããšãããã®ã ãšæããŸãããã Transpose{Matrix} <: AbstractArray
ããªãã®ã¯å°ãå¥åŠã«æããŸãã
CoVector
ã¯ã Vector
ãåè¡åãšããŠMatrix
å€æããã CoVector
ããšãé€ãã°ãã»ãšãã©Vector
ããã«åäœããã¯ãã§ãã CoVector
ã¯ãè¡è¡åãšããŠMatrix
CoVector
å€æãããŸãã
ããã¯ãã³ãã¯ãã«ãžã®ã€ã³ããã¯ã¹äœæãè¡è¡åãžã®ã€ã³ããã¯ã¹äœæãšåãããã«æ©èœããããšãæå³ãããšæããŸããïŒ
ããã¯èå³æ·±ãèãã§ãã 転眮/å ±ãã¯ãã«åã§_leading_ã·ã³ã°ã«ãã³æ¬¡å ã®ã¿ããããããããå Žåãç©äºã¯ããç°¡åãŸãã¯ããè€éã«ãªããŸããïŒ
ïŒç§ã¯èå³ãæã£ãŠãã®åé¡ããã©ããŒããŠããŸããããç§ã®ç·åœ¢ä»£æ°ã¯ååã«éã³ãŠããã®ã§ãè²¢ç®ããè³æ Œããããšã¯æããŠããŸããïŒã
@mbauman ïŒ
転眮/å ±ãã¯ãã«åã§å é ã®ã·ã³ã°ã«ãã³æ¬¡å ã®ã¿ãåé€ãããå Žåãäºæ ã¯ããç°¡åãŸãã¯ããè€éã«ãªããŸããïŒ
ä»»æã®æ°ã®å è¡ã·ã³ã°ã«ãã³æ¬¡å ãèš±å¯ãããšãé åã€ã³ããã¯ã¹ã¯é©åã«é åºä»ããããªããªãããæåã®ã次å ã®ãããªãã®ã¯ãªããªããŸããããã¯ãå ¬çãšããŠé©åãªé åºä»ããè¡ãã®ã«ååãªã»ã©å¥åŠã§ãã
@tkelman ïŒ
ïŒ4774ïŒã³ã¡ã³ãïŒã®æèŠã¯ãCoVectorã¯AbstractVectorã®ãµãã¿ã€ãã§ãã£ãŠã¯ãªããªããšãããã®ã ãšæããŸããããTranspose {Matrix} <ïŒAbstractArrayããªãã®ã¯å°ãå¥åŠã«æããŸãã
ãã®åé¡ã¯ãé åã»ãã³ãã£ã¯ã¹ïŒïŒ10064ãåç §ïŒãç·åœ¢ä»£æ°ã»ãã³ãã£ã¯ã¹ããåé¢ããæ··åãããŠããå Žæãæ¢ãããšã«é¢ãããã®ã§ããããšãå®å šã«æããã«ãªããŸããã
cat
é¢æ°ãAbstractArray
ã®åºæ¬çãªã€ã³ã¿ãŒãã§ã€ã¹ã®äžéšãšããŠå®çŸ©ãããšãé£çµåäœãç°ãªãããã Transpose{<:AbstractArray}
ã¯æããã«AbstractArray
ã¯ãããŸããã ã 圢ç¶ãšã€ã³ããã¯ã¹ä»ãã®ã¿ãéèŠãªã€ã³ã¿ãŒãã§ã€ã¹ã®äžéšã§ãããšèãããšãç¶æ³ã¯ããŸãæ確ã§ã¯ãããŸããã
æã
ã¯ã®éèŠãªã€ã³ã¿ãã§ãŒã¹ã®äžéšãšããŠé£çµãå¿
èŠãšããå Žåã¯AbstractArray
ãæ£åœåããããšã容æã«ãªãçç±ã®ãããªã¿ã€ãã®SymTridiagonal
ãããŠããªãAbstractArray
以äžã®é£çµæŒç®ä»¥æ¥ã®ã SymTridiagonal
ã®ãããªS [SymTridiagonal(randn(5), randn(4)) randn(5)]
ãçŸåšå®çŸ©ãããŠããŸããã
@toivoh ïŒ
ããã¯ãã³ãã¯ãã«ãžã®ã€ã³ããã¯ã¹äœæãè¡è¡åãžã®ã€ã³ããã¯ã¹äœæãšåãããã«æ©èœããããšãæå³ãããšæããŸããïŒ
Transpose{Vector}
ã€ã³ããã¯ã¹äœæåäœã¯ãéåžžã®Vector
ãšåãã§ããå¿
èŠãããããšã瀺åããIDããããŸãã æ°å€åã®å Žåã v[1]
ã¯v' * eâ = v â
eâ
ãšåãçµæãçæãã v[1:2]
ã¯v' * [eâ eâ]
ãšåãçµæãçæããããšãèæ
®ããŠãã ãããããã§eâ
ã¯æ£èŠåºåºVector{Int}
[1, 0, 0, ...]
ããã³eâ
ã¯[0, 1, 0, 0, ...]
ã§ãã ã€ã³ããã¯ã¹ä»ããå
ç©ã転眮ã«é¢é£ãããããã®ã¢ã€ãã³ãã£ãã£ãä¿æããå¿
èŠãããå Žåã¯ã次ã®ããã«äž»åŒµã§ããŸãã
(v')[1] == (eâ' * v'') == (v' * eâ)' == (v â
eâ)' == conj(v â
eâ)* = conj(v[1])
ïŒæåã®ã¹ãããã¯æ°ããå
¬çã§ããã4çªç®ã®ã¹ãããã¯ã¹ã«ã©ãŒã®è»¢çœ®ãããŒãªãã¬ãŒã·ã§ã³ã§ãããšããäºå®ãå©çšããŸãïŒ Transpose{Vector}
ãžã®ã€ã³ããã¯ã¹ä»ãã¯æ¬è³ªçã«è»¢çœ®ãç¡èŠãã CTranspose{Vector}
ãžã®ã€ã³ããã¯ã¹ä»ããè¡ããŸã
ãã®åé¡ã¯ãé åã»ãã³ãã£ã¯ã¹ïŒïŒ10064ãåç §ïŒãç·åœ¢ä»£æ°ã»ãã³ãã£ã¯ã¹ããåé¢ããæ··åãããŠããå Žæãæ¢ãããšã«é¢ãããã®ã ãšç§ã¯æããŸãã
- é åã®ã»ãã³ãã£ã¯ã¹ã¯ãsizeãlengthãgetindexãsetindexãhcatãvcatãreshapeãrot90ãªã©ã®é¢æ°ã«ãã£ãŠå®çŸ©ãããŸãã
- ç·åœ¢ä»£æ°ã®ã»ãã³ãã£ã¯ã¹ã¯ã+ã-ã*ã/ ãã 'ãtrace ..ãªã©ã®é¢æ°ã«ãã£ãŠå®çŸ©ãããŸãã
ãã®èŠ³ç¹ã«+1ãã Transpose <: AbstractArray
æããªãããã«ããŸãã ãŸããcovectorã«ã€ã³ããã¯ã¹ãä»ããå Žåã¯ãåäžã®ã€ã³ããã¯ã¹ã䜿çšããå¿
èŠããããŸããããããªããšãcovector * vectorïŒåäžã®ã€ã³ããã¯ã¹ã§çž®å°ïŒã®çµæãã¹ã«ã©ãŒïŒã€ã³ããã¯ã¹ããŒãã®ãªããžã§ã¯ãïŒã«ãªãããšããªãããã§ãã
@jihao ïŒãªãç§ãã¡ãå¿ èŠãªã®ãã欲ããã®ãããããŸãã
(v')[1] == (eâ' * v'')
æ°ããå ¬çãšããŠã ã³ãã¯ãã«ãè¡è¡åãšããŠã€ã³ããã¯ã¹ä»ããããå Žåã§ããç·åœ¢ã€ã³ããã¯ã¹ä»ãã«ãããäžèšãšåãçµæãåŸããããšæããŸãã
ãããŠãç·åœ¢ä»£æ°ã«é¢ä¿ãããã®ãšããŠå ±ãã¯ãã«ãèŠãããšã«+1ã
ãããã SymTridiagonal
ãšã®é£çµãå®çŸ©ãã¹ãã§ã¯ãªãçç±ã¯ãããŸããããïŒ
é åã®@toivohç·åœ¢ã€ã³ããã¯ã¹ä»ãã¯ãæåã«é åããã¯ãã«ã«å圢æãã次ã«æ°ãããã¯ãã«ã«ã€ã³ããã¯ã¹ã
ç·åœ¢ã€ã³ããã¯ã¹ä»ãã¯ã¹ãã¬ãŒãžã®é åºã«é¢ãããã®ã ãšæããŸãããããã¯ãã«ã®ç·åœ¢ã€ã³ããã¯ã¹ä»ãã«ã¯ä»ã«è³¢æãªé åºã¯ãããŸããããïŒ ïŒã¹ãã«ãã¹ã«ã€ããŠã¯ç³ãèš³ãããŸãããïŒ
èšæ¶ã«ã¯ãç¬ç¹ã®è³¢æãªæšªæé åºã¯ãããŸããã Fortrané åã®å Žåã§ããèŠçŽ ãåã¡ãžã£ãŒãè¡ã¡ãžã£ãŒããŸãã¯éåã¡ãžã£ãŒã®é åºã§æ ŒçŽããããšãéžæã§ããŸãïŒããã¯å ã®IBM Fortran Iã³ã³ãã€ã©ãŒãè¡ã£ãããšãšãŸã£ããåãã§ãïŒã ããã«ãé åãšããŠäœ¿çšã§ãããã©ããŒãµã«é åºã®ãªãã·ã§ã³ãããã«å€ãè©Šè¡ãªã©ã®ä»ã®ããŒã¿æ§é ïŒïŒ10064ãåç §ïŒããããŸãã
ãã¯ãã«ãšè¡åã«ã€ããŠãåãããšãèšããŸãã ç·åœ¢ã€ã³ããã¯ã¹ã¯ãåè¡åãšãã®è»¢çœ®ã«å¯ŸããŠåãé åºã§ïŒãããŠåãã¯ãã«ã®å Žåãšåãããã«ïŒèŠçŽ ã«ã¢ã¯ã»ã¹ããã®ã§ããªãã³ãã¯ãã«ãç°ãªãå¿ èŠãããã®ã§ããïŒ ãããããéããšããããã³ãã¯ã¿ãŒã®ã€ã³ããã¯ã¹ä»ãããŸã£ããå®çŸ©ããªãã¯ãã ãšæããŸãã
@toivohã¯ããåãå®çŸ©ãéåžžã®é åã«ã
Transpose
ãªããžã§ã¯ãã®ã€ã³ããã¯ã¹äœæ
ç·åœ¢ä»£æ°é¢æ°ã®å€ãã®çŽç²ãªJuliaå®è£ ã¯ã転眮ã«ã€ã³ããã¯ã¹ãä»ããããšæãã§ãããã é¢ä¿ãã2ã€ã®è¡åã®å¯èœãªã±ãŒã¹ïŒéåžžã転眮ãctransposeãconjïŒïŒãåºå¥ããå¿ èŠããªããéåžžã®è¡åãšããŠæ±ãå Žåã¯ãçŽç²ãªJuliaè¡åä¹ç®ïŒéBLASæ°åã®å ŽåïŒãç°¡åã«èšè¿°ã§ããŸãã ãã£ãã·ã¥ãç¡èŠããæ¹æ³ãè©ŠããŠãããçšåºŠããŒã«ã«ãªã¡ã¢ãªã¢ã¯ã»ã¹ãã¿ãŒã³ãååŸããããšãã§ããŸãã
ããã ãã
@Jutho ïŒåæããŸãã ãããŠãããã«åãŸãããã«ãã³ãã¯ãã«ã¯è¡è¡åã®ããã«ã€ã³ããã¯ã¹ãä»ããå¿ èŠããããŸãããïŒ
@toivoh ãããããªãã圌ããåã«äœåãªã€ã³ããã¯ã¹1ãæã£ãŠããã¹ãã ãšããããšãæå³ãããªããç§ã¯åæããããããç§ã®å£°æã«ãã£ãŠã©ã®ããã«æ瀺ãããŠããã®ãããããŸããã ç§ã¯ãããªãã¯ã¹ãããªãã¯ã¹è£œåã«ã€ããŠã®ã¿è©±ããŠããŸããã Matrix * vectorãŸãã¯covector * matrixã¯ãã¡ã¢ãªã¢ã¯ã»ã¹ãã¿ãŒã³ãç°ãªãã ãã§ãªããæ»ãå€ã®åïŒMatrix_vector = vectorãŸãã¯covector_matrix = covectorïŒãç°ãªããããç°ãªãé¢æ°å®çŸ©ãå¿ èŠãšããç°ãªãã¡ãœããã§ããããããããã®ãã®ãæ··ããªããšãããžã¥ãªã¢ã®éåžžã«å®çšçãªçç±ã
äžè¬ã«ãç§ã¯ãN次å
é
åã«ã€ã³ããã¯ã¹ãä»ãããšãã«ã€ã³ããã¯ã¹1ãè¿œå ããæ©èœããããšãã°VecOrMat
ã¿ã€ãã®ãšã€ãªã¢ã¹ã®å€§ãã¡ã³ã§ã¯ãããŸããã ããã«ãããããããªããã°ã©ãã³ã°ãå¯èœã«ãªããŸããããããééããç¯ããããä»ã®ééããããé
ãæ€åºãããããã®ã容æã«ããçç±ã§ããããŸãã å€éç·åœ¢ãªããžã§ã¯ããšããŠäœ¿çšããŠããå Žåã¯æ£ç¢ºãªNã€ã³ããã¯ã¹ã䜿çšãããã³ãœã«ç©ã§ãã¯ãã«ãšããŠäœ¿çšããŠããå Žåã¯ç·åœ¢ã€ã³ããã¯ã¹ã䜿çšããŠãN次å
é
åãinexãã2ã€ã®äŸ¿å©ãªæ¹æ³ãããããŸãããã¹ããŒã¹ïŒããšãã°ããã®ãããª2ã€ã®é
åãè¿œå ããããã¹ã«ã©ãŒãä¹ç®ãããããå ŽåïŒã ç§ã®äœ¿çšæ¹æ³ã«ã¯ããã§ååã§ãããããã¯ä»ã®äººã«éå®ãããŠããããšãåãå
¥ããããšãã§ããŸãã
@Jutho ïŒ
ãããç§ãã¡ãããããšããŠããããšã説æããããã€ãã®å ¬çãäžããè©Šã¿ã§ãïŒ
åºçºç¹ã¯è¡å代æ°ïŒè¡åã®ã¿ã«åºã¥ãïŒã§ãããšããããªãæ確ãªã³ã³ã»ã³ãµã¹ã«å°éãããšæããŸãã ã»ãšãã©ã®æäœã§ã¯ãçŽç²ãªãããªãã¯ã¹èšå®ã§ã®åäœãããã£ãŠããŸãã
ç§ãã¡ãããããšããŠããã®ã¯ãçŽç²ãªè¡åèšå®ãäžè²«ããæ¹æ³ã§æ¡åŒµããã³æ¹è¯ããŠãçã®ã¹ã«ã©ãŒãšãã¯ãã«ãæã€ããã«ããããšã§ããäžè²«æ§ã®ããã«å¿ èŠãšæããããããã³ãã¯ãã«ã§ãã
ãããã¹ã«ã©ãŒãšãã¯ãã«ã®ç§ã®èŠæ¹ã§ãïŒçŽç²ãªè¡åã®èŠ³ç¹ããèŠãå ŽåïŒïŒã¹ã«ã©ãŒã¯è¡åã§ããããã®ã¿ã€ãã«ãã£ãŠ1 x 1ã«å¶çŽãããŸãããã¯ãã«ã¯ããã®ã¿ã€ãã«ãã£ãŠæ¬¡ã®ããã«å¶çŽãããè¡åã§ãã be nx 1ïŒã³ãã¯ãã«ã¯ããã®ã¿ã€ãã«ãã£ãŠ1 x nã«å¶çŽãããè¡åã§ãããšä»¥äžã§è°è«ããŸããïŒãã®èŠ³ç¹ããã2ã€ã®å ¬çãäžããããšãã§ããŸã:(以äžã§ã¯ããŸãæ£åŒã«ã¯èª¬æãããŠããŸããïŒ
äžèšã«åæããå Žåããã¯ãã«ã®è»¢çœ®ã¯äžèšã®çš®é¡ã®å ±ãã¯ãã«ã§ãªããã°ãªããŸãããanx1è¡åã®è»¢çœ®ã¯ã1xnè¡åãçæããŸãã çµæã®æåã®æ¬¡å ã«æ²¿ã£ããµã€ãºãåžžã«1ã§ãããšããäºå®ããšã³ã³ãŒããããšãäžèšã®ããã«ã³ãã¯ãã«ãåŸãããŸãã
è¡å代æ°ã®èŠ³ç¹ããå§ããå Žåãããªãã®èšãããšã¯æ£ããã§ãã ããã¯ãMATlabãããããå®å šã«å®è£ ããŠããã¢ãã«ã§ãã ãã¹ãŠããããªãã¯ã¹ã§ãã ããã¯ééç³»ã§ãããè¡åã«å¯Ÿãããã¹ãŠã®æäœã§æ°ããè¡åãçæãããŸãã
ãã®åé¡ã®ãã€ã³ãïŒãã¯ãã«ã¯åãªãè¡åã§ã¯ãªãããããã¯ãã«ã®è»¢çœ®ãçå£ã«åãæ¢ããïŒã¯ããã®è¡å代æ°ã¢ãã«ããé¢ããããšã§ãããšããå°è±¡ã確ãã«æã£ãŠããŸãããçç±ã«ããã1x1è¡åããæ°å€ãåé¢ãããå Žåã«ççŸã衚瀺ãããããã§ããå¹çã®ã 次ã«ãç·åœ¢ä»£æ°ã®ã¢ãã«ã«åŸãããšãã§ããŸãããã®ã¢ãã«ã§ã¯ããã£ãŒã«ãïŒã¹ã«ã©ãŒïŒããã¯ãã«ç©ºéïŒããã³ããã«å¯Ÿå¿ãããã¥ã¢ã«ïŒãããã³ç·åœ¢æŒç®å/å€æïŒè¡åïŒã®ç©ºéãæ確ã«åºå¥ãããŸãã
Juliaã®ç·åœ¢ä»£æ°æŒç®ã¯ãã¹ã«ã©ãŒãšãã¯ãã«ãæã¡ããŠãŒã¶ãŒãäºåºŠãšæšæž¬ããããšããªããªã©ã®ããã€ãã®æ³šç®ãã¹ãäŸå€ãé€ããŠãMATLABã®äŒçµ±ã«ããªã匷ãæ ¹ãããŠãããšæããŸãã ããããé¢ããããŠãããã®ã¯ãããããéåžžã«å€§ããªæ··ä¹±ã§ãã
äžèšã®ç§ã®å ¬çã¯ãã¹ã«ã©ãŒãšãã¯ãã«ãè¡åããåé¢ããããšãã«çŸããäžæŽåã解決ããããã«åœ¹ç«ã€ã¯ãã ãšç§ã¯ä¿¡ããŠããŸãïŒå¹çãšæ£ç¢ºãã®çç±ããïŒã ããããç§ã¯ä»ã®å¯èœãªã·ã¹ãã ã«ã€ããŠèããŠééããªããªãŒãã³ã§ãã
ããã§@Juthoã«åæããŸãã ãã®åé¡ã®å
šäœçãªãã€ã³ãã¯ãMATLABã®ããã¹ãŠããããªãã¯ã¹ã§ãããã»ãã³ãã£ã¯ã¹ããé¢ããããšã§ãã å®å®ã¯ãç·åœ¢ä»£æ°æŒç®ã®äžã§éããããããã«ããããã«MATLABã®ãã·ã³ã°ã«ãã³ã®å¯žæ³ãæ«å°Ÿã«è¿œå ããããšãã§ããŸããã«ãŒã«ãå¿
èŠã§ãããããã®ã«ãŒã«ã®å®çŸ©ã¯ãã¿ã€ãã®ã¡ã³ããŒãå«ãã¯ã©ã¹åå€T
ãšã¿ã€ãã®ä»ã®Array{T,N}
ã«ã€ããŠãã¹ãŠN
ã§ãããMATLABã®åã·ã¹ãã ã決å®äžèœã§ããäž»ãªçç±ã§ãã ïŒ Joisha and Banerjeeã2006ã®å®ç1ãåç
§ããŠãã ãããçµæã¯åœ¢ç¶ã§ç€ºãããŠããŸãããåé¡ã¯ãé
åã©ã³ã¯ãå€æŽãããšããã°ã©ã ã®ã»ãã³ãã£ã¯ã¹ãã©ã®ããã«å€æŽãããããšããããšã§ããïŒ
ããããã¹ã«ã©ãŒããã¯ãã«ãã³ãã¯ãã«ãããã³è¡åã®ä¹ç®ã¯é£æ³çã§ããå¿
èŠããããšããããšã«ã€ããŠã¯ããŸã ããªãè¯ãã³ã³ã»ã³ãµã¹ããã£ããšæããŸãïŒãã ãã2ã€ã®éã¹ã«ã©ãŒãä¹ç®ããŠã¹ã«ã©ãŒãçæãã(v'*v)*v
ãªã©ã¯äŸå€ã§ãïŒãããšãã°ã v'*M*v
ã¯ã¹ã«ã©ãŒã M*v
ã¯ãã¯ãã«ã v'*M
ã¯ã³ãã¯ãã«ãçæããå¿
èŠããããŸãã ãããã®æ¡ä»¶ãæºããäžæ¹ã§ããã¹ãŠããããªãã¯ã¹ã®ã»ãã³ãã£ã¯ã¹ããã©ãã ãé¢ããããšãã§ãããã¯ããããŸããã
ãã以äžé¿ããããšããŠããããšã¯äœã§ããïŒä»£ããã«ã©ã®ããããã£ãååŸãããã§ããïŒ
å Žåã«ãã£ãŠã¯T
ãšArray{T,0}
ã ããæ··åãããšããããã©ãã»ã©æªãããšã§ããããã ïŒäŸïŒã€ã³ããã¯ã¹äœæïŒ M[:,2]
ã¯Array{T,1}
ãçæããŸããã M[2,2]
ã¯Array{T,0}
çæããŸããïŒ
Transpose{Vector}
ã䜿çšããŠããæå¹ãªã»ãã³ãã£ã¯ã¹ãç¶æã§ããŸãã
ç§ã¯çµåæ§ã«é¢ãããã¹ãŠã®ã³ã¡ã³ããèªã¿çŽãããã®è°è«ã®ã»ãšãã©ã¯å®éã«ã¯çµåæ§èªäœã«é¢ãããã®ã§ã¯ãªããå ç©ãšå€ç©ã®ã»ãã³ãã£ã¯ã¹ã«é¢ãããã®ã§ãããšçµè«ä»ããŸããã ã©ã¡ãã«ãåœãŠã¯ãŸããªãè¡šçŸãèŠã€ãããããããææããŠãã ããã
Matlabã¿ã€ãã®ã»ãã³ãã£ã¯ã¹ã®åé¡ã¯ã M*v'
ãšv*M
ãæ©èœããªãå Žåã§ãæ©èœããå Žåãããããšã§ãã M
ãm x 1
å Žåã M*v'
ã¯æå¹ã§ãããå€ç©ã®ãããªæ°éãè¿ããŸãïŒ v'
ã¯1 x n
ïŒã åæ§ã«ã M
ã1 x m
ããããæ«å°Ÿã®ã·ã³ã°ã«ãã³ãè¿œå ã§ãããã«ãŒã«ãããå Žåã v*M
ã¯n x 1
ãš1 x m
ã®ç©ãšããŠè©äŸ¡ã§ããŸãã
T
ãšArray{T,0}
ãæ··åããåé¡ã¯ãAPLã®æç®ã§ãæèµ·ãããŸãããAPLã§ã¯ãå€æ¬¡å
é
åãååž°çã«ãã¹ããããŠããããã Array{T,0}
ãšT
ã®ã©ã¡ãã§ããããšããåé¡ãçºçããŸãã T
ãŸã§ååž°ããïŒã§ãããããã§ãªãå Žåã¯ãæµ®åé
åãïŒ Array{T,0}
ã®ã¿ãŸã§ååž°ããïŒã§ãã Moreã1973ã¯ãã©ã¡ãã®éžæãå
¬ççã«äžè²«ããŠããããšãå®éã«èšŒæãããšæããŸãã ã»ãšãã©ã®éæ¥å»ãåŒéããããä»ã®äœãã«ç§»ãåã«ãAPLãã©ã¡ãã䜿çšããããšããåé¡ã解決ãããã©ããã¯ããããŸããã
@jiahao ïŒããªãã®èŠ³å¯ãã©ãã»ã©åºæ¬çã§ãããç§ã¯
v[i] = e_i' * v
ç·åœ¢ä»£æ°ãšã€ã³ããã¯ã¹ä»ãã®ã»ãã³ãã£ã¯ã¹ãçµã³ä»ããŸãã ããããããªãã¯ãŸãèæ ®ããå¿ èŠããããŸã
M[i,j] = e_i' * M * e_j
ããã¯ãå³ããã®åºåºãã¯ãã«ãæã€å
ç©ã2次å
ã«æ²¿ã£ãã€ã³ããã¯ã¹ä»ãã«å¯Ÿå¿ããããšã瀺ããŠããŸãã ãããã£ãŠãã³ãã¯ãã«v'
ã®i
çªç®ã®ãšã³ããªã¯æ¬¡ã®ããã«ã€ã³ããã¯ã¹ä»ãããå¿
èŠããããšäž»åŒµããŸãã
v' * e_i = v'[1, i]
ãã¡ãããæåã®ã€ã³ããã¯ã¹ãšããŠ1
以å€ã®ãã®ãæžãããã®ã§ãããã©ãã§ããããã
ãšã«ãããèš±å¯ããã®ã§
e_i' * v = v[i] = v[i, 1]
ãã®å Žåãäžèšã®å Žåã1
ããã¬ãŒã¹ãã«ããŒãšããŠèš±å¯ããå¿
èŠããããŸãã
ãã ãã v' * e_i
ã¯ã¹ã«ã©ãŒã§ããããã e_1' * (v' * e_i)
ã¯ã¹ã«ã©ãŒã§ã¯ãªããå
±ãã¯ãã«ã§ãã ãããã£ãŠã寞æ³ã¯v'[1, i] = e_1' * v' * e_i
ãèãããšäžèŽããŸãã
ç·šéïŒããã¯ãã€ã³ããã¯ã¹äœæã§æ«å°Ÿã®ã·ã³ã°ã«ãã³ãèš±å¯ããããšã«å察ããè°è«ãããããªããšæããŸããïŒ
ã¯ããè¡åã®ã€ã³ããã¯ã¹ä»ãã¯æ¬¡ã®è«ççãªã¹ãããã§ãã e_i' * M * e_j
ã¯ãå®éã«ã¯çµåæ³åã圹ç«ã€åŒã®1ã€ã§ãã
(e_i' * M) * e_j = m_i' * e_j
e_i' * (M * e_j) = e_i' * m_j
çãããªããã°ãªããŸããã è¡åã®ã€ã³ããã¯ã¹ä»ãã¯ããã¯ãã«ã€ã³ããã¯ã¹ä»ãã«ãŒã«ãšã³ãã¯ãã«ã€ã³ããã¯ã¹ä»ãã«ãŒã«ããå°åºã§ããŸãã
ãã®åé¡ãäžè²«ããŠè§£æ±ºããã«ã¯ã v[i, 1]
ãããªåŒãçŠæ¢ããå¿
èŠããããšæããŸããããã¯ããã®ã€ã³ããã¯ã¹äœæåäœãèš±å¯ããã«ãŒã«ãããããã§ãã
aïŒ A*v'
ãšv*A
ç䌌ã±ãŒã¹ãæ©èœããã¯ãã§ãïŒåè
ã¯æ©èœããŸãããåŸç¶ã®ã·ã³ã°ã«ãã³ã«ãŒã«ãäžè²«ããŠé©çšããªãããåŸè
ã¯æ©èœããŸããïŒã
bïŒ v[i] = v[i, 1, 1, 1]
ã®åçæ§ãèæ
®ãããšã察å¿ããã³ãã¯ãã«ã€ã³ããã¯ã¹ã«ãŒã«ã¯(v')[1, 1, 1, i]
ããã«ãªããäžè²«æ§ãä¿ã€ããã«ãã³ãã¯ãã«ã«å¯Ÿå¿ãããä»»æã®æ°ã®å
è¡ã·ã³ã°ã«ãã³ãèš±å¯ãããã«ãŒã«ãå¿
èŠã§ãã ç¬èªã«å®çŸ©ãããäžæ¬¡å
ã®æ¬ åŠã¯éåžžã«æ°ãããã§ãã
ãã®ã€ã³ããã¯ã¹ã®æšè«ã¯å®éã«ã¯ã©ãã«ãè¡ããªããšæããŸãã ã€ã³ããã¯ã¹ä»ãã¯N
次å
é
åã®äžè¬çãªããããã£ã§ããã N=1
ãŸãã¯N=2
åçŽãªè¡ååŒãšããŠèšè¿°ã§ããããšã¯ãããªãäºçŽ°ãªããšã§ãããåºæ¬çãªãã®ã¯å«ãŸããŠããŸãããæ
å ±ã ãã ããããã¯äžäœã®é
åã«äžè¬åãããªããããã€ã³ããã¯ã¹ãäœæãããšãã«ã³ãã¯ãã«ã«å
é ã®1ãå¿
èŠãã©ãããå€æããããã«äœ¿çšããªãã§ãã ããã ããã¯ã以åã®æçš¿ã§èŠ³å¯ãããããã«ãããã«äžæŽåã«ã€ãªãããŸãã
äžã§è¿°ã¹ãããã«ãç§ã¯1ã€ã®ã€ã³ããã¯ã¹ã远跡ããããšã«äŸåããã®ã奜ãã§ã¯ãªãããããå¿ èŠã§ãããããŸãã¯æ¬åœã«åœ¹ç«ã€åäžã®ç¶æ³ãèããããšãã§ããŸããã§ããã ããããç§ã®èŠç¹ã¯ããŸãã«ãéãããŠããããšãåãå ¥ããããšãã§ããŸãã
ç§ã¯ããããã¹ãŠãå®å
šã«æ¶åããŠããŸããããç§ã®äž»ãªè³ªåã¯åçŽã§ãïŒ size(covector)
ã¯(n,)
ãŸãã¯(1,n)
çããã§ããïŒ
ããããAbstractArray
ãã¡ããªãŒã®äžéšã§ãªãå Žåã size
ãå®çŸ©ããå¿
èŠã¯ãããŸããã
å®çšçãªçç±ããïŒæ°åãªã©ã®ããã«ïŒå®çŸ©ããããšæããŸãããç§ã®æ祚ã¯(n,)
ãŸãã ã¹ãã¬ãŒãž/ã³ã³ããã®èŠ³ç¹ããã¯ããã¯ãã«ãšã³ãã¯ãã«ã®åºå¥ã¯ãããŸããã ãããã£ãŠãã³ãã¯ã¿ãŒãã³ã³ãããŒãšããŠäœ¿çšããå¿
èŠããããŸããããããã£ãŠãã³ãã¯ã¿ãŒã¯AbstractArray
éå±€ã«å±ããŠããŸããã ç·åœ¢ä»£æ°æŒç®ã«é¢ããŠããã¯ãã«ãšã¯ç°ãªãåäœãããããšãè¡šçŸããã®ã¯ãåçŽãªã©ãããŒã¿ã€ãã§ãã
ã代æ°ãšå¹ŸäœåŠãåé¢ãããŠããéãããããã®é²æ©ã¯é ãããããã®äœ¿çšã¯å¶éãããŠããŸãããããããããã®2ã€ã®ç§åŠãçµ±åããããšãããããã¯ããããã®çžäºã®åã貞ããå®å šã«åãã£ãŠäžç·ã«è¡é²ããŸãããã -ãžã§ã»ãã»ã«ã€ã»ã©ã°ã©ã³ãžã¥
ãã£ãšè²¢ç®ã§ããã°ããã®ã§ãããç©çåŠè ãæè¡è ã䜿ãæŽç·Žãããæ°åŠçããŒã«ãçŽæçã§æ£ç¢ºã«äœ¿ããã·ã¹ãã ã奜ãã ãšæããŸããã ãããããMITããã®ãã®ãªãœãŒã¹ã¯åœ¹ã«ç«ã€ãããããŸãã...
http://ocw.mit.edu/resources/res-8-001-applied-geometric-algebra-spring-2009/lecture-notes-contents/
å®éãèããŠã¿ããšããã£ãšå ¬å¹³ã ãšèšããŸã
e_i' * x = x[i, :] # x is a vector or matrix
x * e_j = x[:, j] # x is a covector or matrix
次ã«ããããªãã¯ã¹ã®ã€ã³ããã¯ã¹äœæã§ã¯ã
e_i' * M * e_j = e_i' * (M * e_j) = e_i' * M[:, j] = M[:, j][i, :] = M[i, j]
e_i' * M * e_j = (e_i' * M) * e_j = M[i, :] * e_j = M[i, :][:, j] = M[i, j]
çŸåšãããã¯Juliaã«ã¯åœãŠã¯ãŸããŸãããããšãã°ã v[i, :]
çŸåšãã¹ã«ã©ãŒã§ã¯ãªã1x1é
åãçæããŸãã ïŒããããå€åããã¯ãã¹ãã§ã¯ãããŸããïŒ
e_i' * M * e_j
ã§ã®è¡åä¹ç®ã®çµåæ§ã¯ãããŸããŸãªæ¬¡å
M[:, j][i, :] = M[i, :][:, j]
ã«æ²¿ã£ãã¹ã©ã€ã¹ã®å¯ææ§ã«å¯Ÿå¿ããŸããããã¯ãæãŸããæ©èœã®ããã§ãã
äžèšã®çç±ã«ããã
v'[:,i] = conj(v[i])
@Jutho ïŒãã®ãç¹°ãè¿ãã¹ã©ã€ã¹ãšããŠã®ã€ã³ããã¯ã¹äœæããã©ãã€ã ã¯ãããé«æ¬¡å
ã®é
å/ãã³ãœã«ã«äžè¬åãããšæããŸããå次å
ã«1ã€ã®ã¹ã©ã€ã¹ãä»»æã®é åºã§ã€ã³ããã¯ã¹ã«é©çšããŸãã ããã¯ã e_i
ãªã©ã«å¯Ÿå¿ãã1次ãã³ãœã«ãä»»æã®é åºã§ããäžé£ã®åçž®ã«å¯Ÿå¿ããŸãïŒã©ã®æ¬¡å
ãäžèŽãããã远跡ããŠããéãïŒã
ãã®ãç¹°ãè¿ãã¹ã©ã€ã¹ãšããŠã®ã€ã³ããã¯ã¹äœæããã©ãã€ã ã¯ãããé«æ¬¡å ã®é å/ãã³ãœã«ã«äžè¬åãããšæããŸããå次å ã«1ã€ã®ã¹ã©ã€ã¹ãé©çšããŠãä»»æã®é åºã§ã€ã³ããã¯ã¹ãäœæããŸãã ããã¯ãe_iãªã©ã«å¯Ÿå¿ãã1次ãã³ãœã«ãä»»æã®é åºã§äœ¿çšããäžé£ã®çž®çŽã«å¯Ÿå¿ããŸãïŒã©ã®æ¬¡å ãäžèŽãããã远跡ããŠããéãïŒã
ã¯ããç§ã¯ãã³ãœã«ã®çž®çŽãªã©ã«éåžžã«ç²ŸéããŠããŸããå®éãè¡åèŠçŽ /ãã³ãœã«èŠçŽ ãååŸããããšã¯ãæšæºã®èšç®åºåºã§æåŸ
å€ãååŸããããšã«å¯Ÿå¿ããŸããã€ãŸããããã€ãã®åºåºãã¯ãã«ã§åçž®ããŸãïŒå°ãªããšãçŽäº€åºåºãããå ŽåïŒã ïŒããã€ã³ããã¯ã¹ãe_i
ãŸãã¯e_i'
çž®å°ã«å¯Ÿå¿ãããã©ããã«é¢ããŠäžæã®é¢é£ä»ãã¯ãããŸããã ããã¯ã察å¿ããã€ã³ããã¯ã¹ãå
±å€ãŸãã¯åå€ã®äœçœ®ã«è¡šç€ºããããã©ããã®æ±ºå®ã«å¯Ÿå¿ããäžæã®æ±ºå®ã¯ãããŸããã äžäœã€ã³ããã¯ã¹ãšäžäœã€ã³ããã¯ã¹ã®ãã¹ãŠã®å¯èœãªçµã¿åããã«ã¯ãæçšãªã¢ããªã±ãŒã·ã§ã³ããããŸãã ãããã e_i
ããã³e_i'
ãšã®n x 1
è¡åïŒã§å°å
¥ããã䟿å©ãªããªãã¯ã§ãããïŒå
±åœ¹ããã®æ£èŠãããã³ã°ããããŠãŒã¯ãªãã空éã«ããããã«ã®ã¿æ©èœããŸãïŒ ïŒãã¯ãã«ç©ºéãå察空éã«ã
ç¹ã«ãäžèšã§èª¬æããããããã£ãå¿
èŠãªå Žåã¯ã M[i,:]
ãå¥ã®ãªããžã§ã¯ãïŒ 1xn
è¡åãŸãã¯ã³ãã¯ãã«ïŒãè¿ãã次ã«M[:,i]
è¿ãããã«ããå¿
èŠããããŸãïŒ nx1
è¡åãŸãã¯ãã¯ãã«ã§ããïŒã ããã¯ãããã«é«ã次å
ã«äžè¬åãããŠããªããšããäºå®ã¯ããŸãã«ãã®åé¡ã®äž»èŠãªè«ç¹ã®äžã€ã§ãããã»ãšãã©ã®äººã¯APLã®ã€ã³ããã¯ã¹äœæã«è³æããŠããããã«æãããçªå·ã§ã€ã³ããã¯ã¹ã寞æ³ããããããããŠããå ŽåïŒããªãã¡ãäž¡æ¹ã®M[:,i]
ãšM[i,:]
ã¯ãã©ã³ã¯1ã®é
åãã€ãŸããã¯ãã«ãçæããŸãã ã€ã³ããã¯ã¹ä»ãã¯é
åã®ããããã£ã§ãããæåã«ãã¹ãŠã®æ··ä¹±/äžæŽåãåŒãèµ·ããã®ã¯ãã€ã³ããã¯ã¹ä»ãã®åäœãšç·åœ¢ä»£æ°æŒç®ã®ãã®æ··åã§ãã ã©ã³ã¯N=2
ãªããžã§ã¯ãã®éãããšã³ã·ã¹ãã å
ã«ãšã©ãŸãéããäžè²«æ§ãä¿ã€ããšãã§ããŸããã€ãŸãããã¹ãŠãè¡åã§ããããã¯ãã«ãšæ°å€ã§ãããé«æ¬¡å
ã®é
åãèæ
®ããããšã¯ãããŸããã
ããªããèšãããã«ãç§ã¯ãŸãã M[i,:]
ãäžèšã®ç§ã®æšè«ã«ãã£ãŠå
±ãã¯ãã«ãçæããªããã°ãªããªãããšã«æ°ã¥ããŸããã ãããã£ãŠãã³ãã¯ãã«ãæã€ããšã¯ãããã¬ãã«ã§ã¯APLã€ã³ããã¯ã¹ä»ããšæ ¹æ¬çã«ççŸããŠããããã§ãã APLã€ã³ããã¯ã¹äœæã奜ãå ŽåïŒãããŠç§ã¯ããã奜ãã§ãïŒãåé¡ã¯ããã®äžçãšã³ãã¯ã¿ãŒãååšããäžçãšã®éã«ç·ãåŒãå Žæã«ãªããŸãã ïŒç§ã¯2ã€ã調æŽããããšãå¯èœã«ãªãããšãæãã§ããŸãããå€åããªãã®æ®ãã¯ç§éãããããããããªããã°ãªããªãããšã«ãã§ã«æ°ã¥ããŠããŸãããïŒïŒ
ããªããããã«ã€ããŠèãããªãã°ããã®å¯Ÿç«ã¯ããããããã»ã©é©ãã¹ãããšã§ã¯ãããŸããïŒ
v'
ãããè¡ããšãããšã v' = conj(v)
ãŸãã 代ããã«ãã³ãã¯ãã«ã¯æ¬ èœããŠããæåã®æ¬¡å
ã远跡ããŠãããšèŠãªãããšãã§ããŸããåºæ¬çã«ã¯ãä¹ç®ãå ç®/æžç®ãããã³å·Šé€ç®ãå®çŸ©ããã ãã§ãã³ãã¯ãã«ãå¯èœãªéãå¶éããããšããå§ããã®ããããšæããŸãã
ãããã<: AbstractArray
ããªããšããèãã®ããã§ãã ããããæ°ããLinearOperator
ã¿ã€ãã®ãµãã¿ã€ãã«ããããšã¯æå³ããããŸããïŒ ïŒç§ãç¥ã£ãŠããããšã¯ä»¥åã«è°è«ã®äœå°ããããŸããããçµè«ãå®å
šã«èŠããŠããŸãããïŒ
å€éç¶æ¿ãã€ã³ã¿ãŒãã§ãŒã¹ã®èšèªæ§ç¯ïŒã©ã¡ããè°è«ãããŠããŸãïŒããªããããç¹å®ã®æŠå¿µã¯ãæé»ã®ãã€ã³ã¿ãŒãã§ãŒã¹ãã€ãŸãå®çŸ©ããå¿
èŠã®ããäžé£ã®ã¡ãœããã«ãã£ãŠã®ã¿å®è£
ãããå¿
èŠããããšæããŸãã ã€ãã¬ãŒã¿ã¯ãã®ãããªæŠå¿µã®1ã€ã§ãããç·åœ¢æŒç®åã¯ãããããåéå±€ã§ã¯ãªãäžé£ã®ã¡ãœããã§æå®ããå¿
èŠãããå¥ã®æŠå¿µã§ãã æœè±¡åLinearOperator
ããããã®ãµãåãšãªãMatrix
ããªãã®ã¯å¥åŠãªããšã§ãã
@toivohããã¯éèŠãªèæ
®äºé
ã§ããããããè¡åããi
çªç®ã®ãã¯ãã«ãŸãã¯ã³ãã¯ãã«ãæœåºããããã«row(M,i)
ãcol(M,i)
ãªã©ã®æ°ããé¢æ°ãææ¡ããçç±ã§ãã ãããã®é¢æ°ã¯ã2次å
é
åM
ãšãè¡å代æ°ã«é¢å¿ã®ãã人åãã§ãã æåã¯MATLABã¹ã¿ã€ã«ã®ã€ã³ããã¯ã¹ä»ããããå°ããããã«ããããã«æããããããããŸããããå
šäœãšããŠããã¯ãã«ã®æŠå¿µãšãã®ãã¥ã¢ã«/転眮/ã³ãã¯ãã«ãæŠå¿µçã«åé¢ãããšãç©äºãæ確ã«ããã®ã«åœ¹ç«ã¡ãŸãã éåååŠã®å Žåããã¯ãã«ãšå
±ãã¯ãã«ã®ãã®åºå¥ãè€éãªãã¯ãã«ã«ãšã£ãŠéåžžã«éèŠã§ãããšããçç±ã ãã§ããã£ãŒã«ãå
šäœããã£ã©ãã¯ã®ãã©ã±ããèšæ³ã«ãžã£ã³ãããŸããããã£ã©ãã¯ã®èšæ³ã¯ãããæããã«ããŸãã Juliaããããå®è¡ããé«æ¬¡å
ã®ã¹ãã¬ãŒãžé
åãšé«æ¬¡å
ã®ç·åœ¢ä»£æ°ã«é©ããããŒã«ã«ãªãããšãé¡ã£ãŠããŸãã ïŒç§ãã¡ã¯è²ªæ¬²ã ããã§ãããïŒïŒ
MATLABã®çµéšããããã»ãšãã©ãå®éã®è¡åã«ç²ŸéããŠãã人ïŒãã ããããŒãã³ã¢ã®ç·åœ¢ä»£æ°ã®çä¿¡è ã§ã¯ãªãïŒã¯ãæåã¯ãç§ãã¡ã®äœäººãã䞻匵ããŠããããšãéèŠã§ããçç±ãç解ããŠããªããããããŸããããç§ã¯ä¿¡ããŠãã ããã
ããã¯åã«èšããŸããããç¹°ãè¿ããŸããç§ã®èŠ³ç¹ããã¯ããã®åªå é äœã®ãªã¹ãããããå æé¢ä¿ã¯äžåãã«æµããŠããŸãã
ïŒ1ïŒé
åã¯åºæ¬çã«ããã¹ãŠã®JuliaãŠãŒã¶ãŒã䜿çšããã¹ãã¬ãŒãžã³ã³ãããŒã§ãããããã«æé©ãªã»ãã³ãã£ã¯ã¹ãå¿
èŠã§ãã ãšã«ãããAPLã¹ã¿ã€ã«ã®ã«ãŒã«ã¯éåžžã«è¯ã解決çã®ããã§ãã äžæ¹ãMATLABã¹ã¿ã€ã«ã®æå°2次å
é
åã§ãæ«å°Ÿã«1次å
ã®ã€ã³ããã¯ã¹ãããä»®å®ã¯äžèªç¶ã§æ··ä¹±ããŠããããã«èŠããŸãããŸããJuthoãèšã£ãããã«ãããã°ã©ãã³ã°ãããããªããšã«ãªããé
åã®æ¬¡å
ã ãããŸã§ã®ãšããããã¯ãã«v
å Žåã v
ã¯1次å
ã§ãããããã³ãŒãv[i,:]
ã¯ãšã©ãŒãã¹ããŒããã¯ãã§ãã +
ã.*
ãããªèŠçŽ ããšã®æŒç®ã¯ãè¡åãå€éç·åœ¢ä»£æ°ã ãã§ãªããããããã³ã³ããã¯ã©ã¹ã«åœ¹ç«ã¡ãŸãã 以äžã®ãã®ã®ããã«äººã
ãäœãå¯äžã®è²æ©ã¹ãã¬ãŒãžã³ã³ããã¯ã .*
ãªã©ã®äœåãªãããã§ãã
ïŒ2ïŒãã¹ãŠã§ã¯ãããŸããããã»ãšãã©ã®JuliaãŠãŒã¶ãŒã¯è¡å代æ°ã䜿çšãããããäžéšã®ãã¯ãã«ããã³è¡åæŒç®ã«æ§æç³è¡£æ§æãè¿œå ããŸããã»ãšãã©ã®å Žåã *
èšå·ã䜿çšããŸãïŒãã ããè¡åé€ç®ãªã©ãããå ŽåããããŸãïŒã ãã®ã·ã¹ãã ã§ã¯ã1次å
é
åãš2次å
é
åã¯ãããããåãã¯ãã«ãšè¡åã§ãã å®å
šã«æ©èœããè¡åã·ã¹ãã ã®å Žåãè¡ãã¯ãã«ïŒã³ãã¯ãã«ïŒãšè»¢çœ®æŒç®'
ãå¿
èŠã§ãã è¡ãã¯ãã«ã¯ããããæå³ã§1次å
é
åã§ããããã®ããã«ã€ã³ããã¯ã¹ãä»ããå¿
èŠããããšæèšããŸãïŒãããŠã確ãã«covec[1,i]
ãšã¯ç°ãªããŸã!!ïŒAPLã«ãŒã«ã䜿çšãããšãããã€ããäœæããå¿
èŠããããŸãããã¯ãã«ãšã³ãã¯ãã«ã®åºå¥ãããã³åã·ã¹ãã ã¯ããã«çæ³çã§ãïŒã©ãããŒåã§ã¯ãªãã1次å
ããã³2次å
é
åã®åãšã€ãªã¢ã¹ãšããŠè¡åãšãã¯ãã«ããã§ã«åå©çšã§ããã®ã¯å¹žéã§ãã...ååãšããŠå¯èœã§ããããããã©ããããŸãããèŠç¹ãããããŸããïŒã åã·ã¹ãã ã䜿çšãããšãã³ã³ãã€ã©ã¯CoVector * Vector
ãã¹ã«ã©ãŒã§ããã Vector * CoVector
ãè¡åã§ãããšå€æã§ããŸãã toivohãèšã£ãããã«ã_MATLABã®èŠ³ç¹ãããCoVectorã¯ãæ¬ èœããŠãããæåã®æ¬¡å
ãæ£ç¢ºã«è¿œè·¡ããŠããŸãã_ã«ãžã¥ã¢ã«ãŠãŒã¶ãŒã¯ãããã®ãªããžã§ã¯ããäœæããå¿
èŠã¯ãããŸããã ãã¯ãã«ãšè¡åãå
¥åãã *
ãš'
æŒç®ã䜿çšããŸãã æ°ã«ãªã人ã¯ãã®éãã«æ°ã¥ããæè¬ããã§ãããã ãŠãŒã¶ãŒã«ãšã£ãŠã®_æ倧ã®_å€æŽã¯ã M[i,:]
ãæ°ããé¢æ°row(M,i)
䜿çšããããã«å€æŽãããã Transpose(M[i,:])
ãM[i,:]'
ãããªã©ãããŒã¯ã©ã¹ã«å€æããå¿
èŠãããããšã§ã-ãã£ã©ãã¯èšæ³ã®ããã«ãã©ã®ãªããžã§ã¯ãããã¯ãã«ã§ãã©ã®ãªããžã§ã¯ããå
±ãã¯ãã«ã§ãããã決ããŠå¿ããªããããããã¯å©ç¹ãšèããããšãã§ããŸããã¿ã€ãã¢ãµãŒãã䜿çšããŠãªããžã§ã¯ãã«å²ãåœãŠããšãå¿
èŠã«å¿ããŠãšã©ãŒãçºçããŸãã ãã ãããã®è¡šèšã«ã€ããŠã¯è°è«ãã䟡å€ããããšæããŸãã å°æ¥çã«ã¯ãã©ãããŒã®ã·ã¹ãã ãæ¡åŒµããŠãå¹ççãªé
延è©äŸ¡ãå¯èœã«ããå¯èœæ§ããããŸãã ç§ãèŠãéããããã¯èª°ã«ãšã£ãŠããäºãã«æå©ã§ãã
ïŒ3ïŒå€éç·åœ¢ä»£æ°ã«èå³ããããå察空éãšè»¢çœ®åŒã®éããªã©ãåŠã°ãªããã°ãªããªãã£ã人ãããŸããJuthoã¯ããã«è§ŠããŠããŸãã Juliaã®é
åã¯ããã§ã«é«æ¬¡å
ã®ãã³ãœã«çšã®åªããã¹ãã¬ãŒãžããã€ã¹ã§ãããè¿œå ã®ããã±ãŒãžïŒBaseã«å
¥ãå ŽåãšèŠã€ãããªãå ŽåããããŸãïŒãç§ãã¡ã®ãããªäººã
ã«ãã£ãŠäœ¿çšãããŸãã 2ãã倧ãã次å
ã®é
åã§å®çŸ©ããã'
ã*
ãããªæäœã¯å¿
èŠãããŸããã ã€ã³ããã¯ã¹ãæ瀺çã«äžŠã¹æ¿ããŠããããã¯ãªãŒã³ã«å®è¡ã§ããªã'
ã¹ãã¬ãŒãžæåã®ãŠãŒã¹ã±ãŒã¹ã¯èŠåœãããŸããã 1次å
ã€ã³ããã¯ã¹ã远跡ãããšããå
šäœçãªèãæ¹ã¯ãæŠå¿µã®é
åãäœäžãããã ãã§ã...ãããã£ãŠãMATLABã®ããã«1次å
ããã³2次å
é
åã«å¯ŸããŠã®ã¿'
ãä¿æããŠãã ããïŒïŒïŒåç
§ããŠãã ããã MATLABã«ã€ããŠèšã...ïŒ
å®å šã«æ©èœããè¡åã·ã¹ãã ã®å Žåãè¡ãã¯ãã«ïŒã³ãã¯ãã«ïŒãšè»¢çœ®æŒç® 'ãå¿ èŠã§ãã
ãã®å£°æã¯æ¬åœã«åé¡ã®æ žå¿ã«è¿«ã£ãŠããŸãã ã€ã³ããã¯ã¹äœæã転眮ãããã³*
補åã¯ãã¹ãŠæ··åãããŠããŸãã ãŸããããã«ãããªé¢æ°ãå°å
¥ããããšãªãcovectorsã®ãã®ãšè¡ãã¯ãã«ã®å®å
šãªã»ãã³ãã£ã¯ã¹ã調æŽããããšã¯äžå¯èœã§ããrow(A, i)
è¿ãããã«i
ã®è¡ãA
AãšããŠ1次å
é
åã§ã¯ãªãã³ãã¯ãã«ã çŸåšã A[1, :]
ã¯ããAã®æåã®è¡ãååŸããããšãAã®2çªç®ã®æ¬¡å
ã«æ²¿ã£ãŠæåã®ã¹ã©ã€ã¹ãååŸãããã®äž¡æ¹ãæå³ããããšèããŠããŸããããããã®æŠå¿µã¯ãã³ãã¯ãã«ææ¡ã§ã¯åºæ¬çã«äºææ§ããããŸããã
è¡ãã¯ãã«ã¯ãããããæå³ã§1次å é åã§ããããã®ããã«ã€ã³ããã¯ã¹ãä»ããå¿ èŠããããšæèšããŸãã
ç§ã¯ããªãããã®å£°æã«å°ãæ°é£ãããšæããŸãã åã®èª¬æã§ã¯ãå®å
šãªç·åœ¢ä»£æ°ã»ãã³ãã£ã¯ã¹ïŒæ£ããç©ãšè»¢çœ®ã䜿çšïŒãå¿
èŠãªå Žåãè¡ãã¯ãã«ã¯1次å
é
åãšåãåãæã€ããšã¯ã§ããªãããšãæ確ã«ç¢ºç«ããŠããŸãã ãŸããã³ãã¯ãã«ãžã®ã€ã³ããã¯ã¹ä»ãã¯ãå
ç©dot
ãšã®äžè²«æ§ãä¿ã€ããã«ãè€çŽ å
±åœ¹å€(v')[1] = conj(v[1])
ãè¿ãå¿
èŠããããŸãã 第äºã«ãã³ãã¯ãã«ã¯ãã¯ãã«ã§ã¯ãªãããã¯ãã«ã§å
ç©ãçæããã®ãåŸ
ã£ãŠããç·åœ¢æ±é¢æ°ã§ãã 第3ã«ããã¯ãã«ãšå
±ãã¯ãã«ã¯ã hcat
ãšvcat
äžã§ç°ãªãé
åé£çµåäœãããŸãã ããããã¹ãŠã®çç±ãããè¡ãã¯ãã«ããããããæå³ã§1次å
é
åãã«ããããšã¯ã§ããŸããã
æ«å°Ÿã®ã·ã³ã°ã«ãã³ãåãé€ãããšã«è³æã§ãããããå©çšããJuliaã³ãŒããèŠãããšããªããšæããŸãã ããšããšã¯0次å
é
åã«å¿
èŠã ãšèšã£ãŠããŸãããã X[]
ã¯åé¡ãªãæ©èœããããšãããããŸããã
è¡ãã¯ãã«ã®row(M,i)
é¢æ°ãšãšãã«ãAPLã€ã³ããã¯ã¹äœæãæãçã«ããªã£ãŠãããé©åãªåŠ¥åç¹ã®ããã«æãããŸãã è¡ãã¯ãã«ã®ã€ã³ããã¯ã¹ä»ãã«ã€ããŠã¯ããããããŸãããã (v')[1,i]
ã¯å¥œãã§ã¯ãããŸããã
ãŸã 觊ããŠããªããã1ã€ã®å€§ããªæ±ºå®ã¯ãã¿ã€ãã§ãã 以åã«ãããè©ŠããŠã¿ãç§ã®1ã€ã®çºèŠã¯ã v'
AbstractVector
ã«ããã®ã¯éåžžã«é£ãããšããããšã§ãã
2ã€ã®å¯èœãªãªãã·ã§ã³ïŒ
Transpose <: AbstractMatrix
CoVector <: Any
Factorization
ãªããžã§ã¯ãã®ããçš®ã®è»¢çœ®ãX'
ã¯AbstractMatrix
ãŸããTranspose <: Any
æ¥åã«ã€ããŠã¯ã次ã®ãããããè¡ãããšãã§ããŸã
aã ConjugateTranspose
å®çŸ©ããŸãïŒäžèšã®ãªãã·ã§ã³1ã䜿çšããå Žåã¯ConjugateCoVector
ãšãšãã«ïŒ
bã Conjugate
ã©ãããŒã¿ã€ãã䜿çšããé©åã«ãã¹ãããŸãã Transpose{Conjugate{T}}
ãšConjugate{Transpose{T}}
ã©ã¡ãã䜿çšãããã«ã€ããŠãäœããã®èŠåãå¿
èŠã«ãªããŸãã
AbstractMatrix
ãµãã¿ã€ãã§ã¯ãªãTranspose{Matrix}
ãæã€ã®ã奜ãã§ãã ç§ãã¡ãããŒã¹ã«æã£ãŠããæãè¿ãé¡äŒŒç©ã¯ã Symmetric
ãããªç¹å¥ãªè¡åã¿ã€ãã§ãããšæããŸããããã¯ã代æ°çã«è¡åã®ããã«åäœããŸãããã€ã³ããã¯ã¹ä»ãã®ã»ãã³ãã£ã¯ã¹ã§ã¯åäœããŸããã ïŒïŒ987ã¯ãè€æ°ã®åºææ§ãŸãã¯ç¥èãªç¹æ§ããªãå Žåãåéå±€ã¯ä»£æ°çã»ãã³ãã£ã¯ã¹ãããã³ã³ãããŒã»ãã³ãã£ã¯ã¹ãå°éããå¿
èŠãããããšã確ç«ããŸãããïŒ
åºæ¬çã«ãã»ãã³ãã£ãã¯ã¿ã°ãã§ããåãæ§æããåé¡ã¯ãïŒ8240ã«ãçŸããŸããã 掻çšã¯èŠçŽ ã®åºç€ãšãªãåéã«ãŸã§åã¶æŠå¿µã§ããããã Transpose{Conjugate{T}}
ãæãŸãããšæããŸãã
以äžã¯ãMATLABãšåãæ«å°Ÿã®ã·ã³ã°ã«ãã³ã«ãŒã«ã«åŸãå ŽåãšåŸããªãå Žåã®äŸã§ãã
julia> (1:5)[5,1,1,1,1,1,1]
5
julia> (1:5)[5,:]
ERROR: BoundsError()
in getindex at abstractarray.jl:451
julia> A=zeros(2,2,2); A[1,2]=5; A #Same as A[1,2,1]=5
2x2x2 Array{Float64,3}:
[:, :, 1] =
0.0 5.0
0.0 0.0
[:, :, 2] =
0.0 0.0
0.0 0.0
julia> A[:,:]=3; A
2x2x2 Array{Float64,3}:
[:, :, 1] =
3.0 3.0
3.0 3.0
[:, :, 2] =
3.0 3.0
3.0 3.0
julia> A=reshape(1:8,2,2,2); A[:,1]
2-element Array{Int64,1}:
1
2
julia> A[:,1,1]
2-element Array{Int64,1}:
1
2
julia> A=reshape(1:8,2,2,2); A[1,:]
1x4 Array{Int64,2}:
1 3 5 7
julia> A=reshape(1:8,2,2,2); A[1,:,:]
1x2x2 Array{Int64,3}:
[:, :, 1] =
1 3
[:, :, 2] =
5 7
julia> A=zeros(1); A[1] = randn(1,1)
ERROR: `convert` has no method matching convert(::Type{Float64}, ::Array{Float64,2})
You might have used a 2d row vector where a 1d column vector was required.
Note the difference between 1d column vector [1,2,3] and 2d row vector [1 2 3].
You can convert to a column vector with the vec() function.
in setindex! at array.jl:307
julia> A=zeros(1,1); A[1,1] = randn(1)
ERROR: `convert` has no method matching convert(::Type{Float64}, ::Array{Float64,1})
in setindex! at array.jl:308
julia> 1/[1.0,] #In MATLAB, interpreted as the inverse of a 1x1 matrix
ERROR: `/` has no method matching /(::Int64, ::Array{Float64,1})
julia> [1:5]*[1:5]' # Shapes are (5,) and (1,5) - promoting to (5,1) x (1,5) works
5x5 Array{Int64,2}:
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
ãããã®åäœãã©ã®ããã«ãããããçµè«ä»ãããããããã®ããšã¯å°ãã¯ãªãŒã³ã¢ãããã䟡å€ãããããã§ãã æåŸã®ã€ã³ããã¯ã¹ãã¹ã©ã€ã¹ã§ããã€ã³ããã¯ã¹ãå°ãªãããå Žåã®çŸåšã®åäœã¯ãç¹ã«æªããããã§ãã
ã¯ãªã Jiahaoãæ瀺ããäŸã¯ãéåžžã«åä»ã§ã...æé»æ§ãšãããŸããã®ããã«ãã€ã³ããã¯ã¹äœææäœãšã€ã³ããã¯ã¹ä»ãå²ãåœãŠæäœã§ã·ã³ã°ã«ãã³ã远跡ããã®ã¯å¥œãã§ã¯ãããŸããã ãããã®åäœãäºåã«èªèããŠããªãå Žåãå®éã«å¥ã®ããšãè¡ãããšããŠãããšãã«ãããããšãå®è¡ããŠããŸãå¯èœæ§ããããŸãã ç§ã¯ãèšèªã®æ£ç¢ºã§æ確ãªäœ¿çšæ³ã«ã³ããããããããŸããªã·ã§ãŒãã«ãããåé¿ããããšã«è³æã§ãã
ãããå®éã«å®è£
ããã«ã¯ãããçš®ã®äžè§åœ¢ã®ãã£ã¹ããããå¿
èŠã«ãªããŸããããããªããšãã Complex64
ãŸãã¯Complex128
ãšã³ããªãæã€è¡åããã®è»¢çœ®ããªã©ãã©ã®ããã«è¡šçŸãããããããŸããã ããŸãã¯ãã®å
±åœ¹è»¢çœ®ãã ç¹ã«äžèšã®ãªãã·ã§ã³2 + bã䜿çšããå Žåã
@ esd100 ããããã®
è¡ãã¯ãã«ã¯ãããããæå³ã§1次å é åã§ããããã®ããã«ã€ã³ããã¯ã¹ãä»ããå¿ èŠããããšæèšããŸãã
ç§ã¯ããªãããã®å£°æã«å°ãæ°é£ãããšæããŸãã
æ¬åœã§ãïŒ ç³ãèš³ãããŸããã@jiahao ãç§ã¯[]
ã€ã³ããã¯ã¹äœæã®åäœãå³å¯ã«åç
§ããŠããŸããã é£çµãéèŠãªèæ
®äºé
ã§ããããšã¯æ£ããã§ãããããè¡ãïŒè¡åãäœæããïŒèªç¶ãªæ¹æ³ã¯ïŒãã®å Žåã¯1 xnãµã€ãºãšèããããšã§ïŒããªãæçœã ãšæããŸãã æããã«ãã³ãã¯ãã«ã¯ãããããæå³ã§ã1D JuliaArrayã§ã¯ãããŸãã...ãããå
šäœã®ãã€ã³ãã§ã...
ãžã¢ããªã®äŸãç§ãæ©ãŸããŠããŸãã ç§ã¯ãå¯èœæ§ã®ããåŸç¶ã®ã·ã³ã°ã«ãã³ã®åäœãåé€ããããšã«è³æã§ãã åŸã®æ¬¡å ãç·åœ¢åããããšã¯æçšãããããŸããããé åã®æ¬¡å æ°ãå¿ãããããªæ æ°ãå©é·ããå¯èœæ§ããããŸã...ïŒããã¯ããããŸãããšãå±éºãã«ãã£ãŠæ瀺ããããã®ã ãšæããŸã...ç§ã¯æ¬åœã«æ¬²ããã§ãããšãã°ã16次å é åã15次å é åã®ããã«æ±ããšãJuliaããšã©ãŒãã¹ããŒããŸãã
ãããã®ã©ããææ§ãŸãã¯å±éºã§ããïŒ
4ã€ç®ã¯ããããŸãã§å±éºãªããã§ãã
julia> A=zeros(2,2,2); A[:,:]=3; A
2x2x2 Array{Float64,3}:
[:, :, 1] =
3.0 3.0
3.0 3.0
[:, :, 2] =
3.0 3.0
3.0 3.0
æããã«ïŒç§ã«ãšã£ãŠïŒããã¯æ§æãšã©ãŒã§ããã¯ãã§ãã Aã¯ã©ã³ã¯3ã§ããã3次å ã¯ãŸã£ããåç §ãããŠããŸããã 3çªç®ã®æ¬¡å ããšã©ãŒã«ãã£ãŠçç¥ãããå¯èœæ§ãé«ããèŠã€ãã«ãããã°ãã³ãŒãã«å°å ¥ãããŠããŸãã 圌ã®æç¹ã§ãšã©ãŒãçºçããããšãæè¬ããŸãïŒIDLãšFortranã®äž¡æ¹ã«ããããïŒã
é åãæ£ããã€ã³ããã¯ã¹æ°ã§ã®ã€ã³ããã¯ã¹äœæã®ã¿ãèš±å¯ãããã1Dç·åœ¢ã€ã³ããã¯ã¹äœæã®ç¹æ®ãªã±ãŒã¹ïŒéåžžã«äŸ¿å©ãªããïŒãèš±å¯ããã®ãæåã ãšæããŸãã ããã«ã¯ãåŸç¶ã®ã·ã³ã°ã«ãã³ãçŠæ¢ããããšãå«ãŸããŸãã
ãŸãã¯1Dç·åœ¢ã€ã³ããã¯ã¹ã®ç¹æ®ãªã±ãŒã¹ïŒéåžžã«äŸ¿å©ãªããïŒ
ç§ãã¡ã®ååã¯ã©ãã»ã©ç°¡åã«å£²ãããŸããïŒ :)
ç§ã¯ç·åœ¢ã€ã³ããã¯ã¹ãããã»ã©å¥œãã§ã¯ãããŸããã§ããã ããã¯ã¡ãã£ãšããããã¯ãšããŠç§ã襲ããŸãã å€ãã®å Žåãé åãå埩åŠçããããã®æéã®æ¹æ³ãå¿ èŠã§ãã ãŸããåçŽãªé«å¯åºŠé åãé€ããã¹ãŠã®å Žåãç·åœ¢ã€ã³ããã¯ã¹äœæã¯éåžžã«é ããªãå¯èœæ§ããããŸãã ãšã¯ãããç·åœ¢ã€ã³ããã¯ã¹ãå®å šã«æé€ããããšã¯ã§ããªããããããŸããïŒããã©ãŒãã³ã¹äžã®çç±ãšãã³ãŒãã®ç Žæãå€ãããããïŒã
ã¯ããååã«çå®ã§ãã ããããå°ãªããšã1Dã€ã³ããã¯ã¹ã¯èŠèŠçã«åºå¥ãããŸãã äžæ¹ã6Dé åã«5Dã§ã€ã³ããã¯ã¹ãä»ããããšã¯ãããã»ã©ã§ã¯ãããŸããã ãããã«ãããç§ã¯ä»ã®æ¹åã«é²ãããããããå³å¯ãªã€ã³ããã¯ã¹äœæã«ãŒã«ãæã¡ã1Dç·åœ¢ã€ã³ããã¯ã¹äœæããããããããšæããŸãã ç¹ã«ãã¡ã¢ãªãå ±æããé åãžã®å圢æãããåç §ãç°¡åã«ååŸã§ããããã§ãã
ç·åœ¢ã€ã³ããã¯ã¹äœæã«{}
è§ãã£ãïŒãŸãã¯ãã®ä»ïŒã䜿çšããå€æ¬¡å
ã€ã³ããã¯ã¹äœæã«[]
ãä¿æã§ããŸããïŒ ãã ã®ã¢ã€ãã¢...
2015幎3æ23æ¥ã«ã¯ã14:36ã§ãããPortmannã®[email protected]ã¯æžããŸããïŒ
ã¯ããååã«çå®ã§ãã ããããå°ãªããšã1Dã€ã³ããã¯ã¹ã¯èŠèŠçã«åºå¥ãããŸãã äžæ¹ã6Dé åã«5Dã§ã€ã³ããã¯ã¹ãä»ããããšã¯ãããã»ã©ã§ã¯ãããŸããã ãããã«ãããç§ã¯ä»ã®æ¹åã«é²ãããããããå³å¯ãªã€ã³ããã¯ã¹äœæã«ãŒã«ãæã¡ã1Dç·åœ¢ã€ã³ããã¯ã¹äœæããããããããšæããŸãã ç¹ã«ãã¡ã¢ãªãå ±æããé åãžã®å圢æãããåç §ãç°¡åã«ååŸã§ããããã§ãã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHub https://github.com/JuliaLang/julia/issues/4774#issuecomment-84805310ã§è¡šç€ºããŠ
ãŸããæ§æãåé¢ã§ãããããã®ã«ãšæããŸã
éåžžã®ã€ã³ããã¯ã¹æ§æããã®ç·åœ¢ã€ã³ããã¯ã¹ã®å Žåã§ãããç§ã¯ããã«åæããŸã
éåžžã«å€§ããªå€åãããããŸããã
ãã®åé¡ã¯å€ãã®è°è«ãåŒãã§ããããã«èŠããŸãããã€ã³ããã¯ã¹äœæãæ¹åããããã®å®éã®äœæ¥ã®ã»ãšãã©ã¯ã0.4ãµã€ã¯ã«å
šäœã§éåžžã«å€ãã®ãã«ãªã¯ãšã¹ãã§çºçããŠããŸãã ããšãã°ã CartesianIndex
ãšåéãã§ããã®ã§ãç·åœ¢ã€ã³ããã¯ã¹ãšãã«ã«ãã€ã³ããã¯ã¹ã®æ§æãåé¢ããå¿
èŠãããçç±ãããããŸãã---å®éãããããçµã¿åãããããšãã§ããŸãïŒïŒ10524ïŒã ç·åœ¢ã€ã³ããã¯ã¹ãåé€ãããã®ã§ãããããã©ãŒãã³ã¹ãåäžããå ŽåããããŸãïŒãããããäž»ã«ïŒ9080ãåå ã§ãã enumerate
ãšzip
ã¯åãåé¡ã«æ©ãŸãããŠããŸãïŒã ãããããïŒ10507ã®ããã«ã eachindex
ã©ãããŒãšããŠfastindex
ãå®è£
ããå¿
èŠããããŸãã
ã«ãŒã«ã®ã€ã³ããã¯ã¹äœæã«èå³ãããå Žåã¯ããã®åé¡ãæã¡è² ããã®ã§ã¯ãªããæãèå³æ·±ãããã³ãã£ã¢ã«çŠç¹ãåœãŠãŸãããã çŸæç¹ã§ã¯ãããã¯ééããªãïŒ10525ã§ãã ç¹ã«https://github.com/JuliaLang/julia/pull/10525#issuecomment-84597488ã«ã¯äœããã®è§£æ±ºçãå¿ èŠã§ãã
@timholyé«éãã«ã«ãã€ã³ããã¯ã¹äœæã®ãã¹ãŠã®éçºãå®éã«è¿œè·¡ããããã§ã¯ãªããbase /
ããã€ãã®ç¹ã§ãç¥ãããšã¯ããŸããããŸãããå éšã§ã¯ããªãã®éãè¡ãããŠããŸãããã¢ã€ãã¢ã¯ãããç°¡åã«äœ¿çšã§ããããã«ããããšã§ãã ãšãŠãæåéã
k = 0
for I in eachindex(A)
B[k+=1] = A[I] # B is being linearly-indexed, A is being cartesian-indexed
end
ããªããç¥ãå¿
èŠãããã®ã¯ããã ããããããŸããã ïŒèšãæããã°ã eachindex
ã®ãã«ããå¿
èŠãªãã¹ãŠã®ããã¥ã¡ã³ãã§ããå¯èœæ§ããããŸããïŒãã ãããã®åºæ¬çãªãã©ãã€ã ã®ããã€ãã®æ¡åŒµã䜿çšããŠãéåžžã«å€ãã®ã¢ã«ãŽãªãºã ãèšè¿°ã§ããããšãããããŸãã ãããã®æ¡åŒµæ©èœãäœã§ãããããããŠãªããããã匷åã§ãããã¯ãå®éãããŸãæçœã§ã¯ãªããããããŸããã
ç§ã¯ãããä»åŸæ°ã¶æã®ãã¡ã«æžãçããäºå®ã§ããã人ã ãæ¬åœã«è©³çŽ°ãç¥ãããã®ã§ããã°ãããããJuliaConã®è©±ã¯åççã§ãããã @JuthoãŸãã¯@mbaumanã¯ãç§ãšåãããã«ãã®è©±ãããããšãã§ããŸãã
ãããŸããã«ã€ããŠããã«è¿œå ããŸãããæåŸã®è°è«ã®ããã€ãã¯ç¹å®ã®éèŠãªãã€ã³ããèŠçŽãããšæããŸãã ããããç§ã¯ãéšå€è ãšããŠããŸãã¯æãããããã®çš®ã®ææ§ãã«ææã§ãããåçã«èããããªã¹ã¯ããããŸãã ç§ã®è¬èãªæèŠã§ã¯ãåçŽã§ããã·ã§ã³ã¯ãªãã£ã«ã«ãªæèæŒç¿ãããã€ãã£ãŠããåçŽãªãšã©ãŒã®è²»çšäŸ¿çåæã䟡å€ã®ãªãéã«ããªããå°ãå¯èœæ§ããããŸãã
ïŒ10507ã®ããã«ãåã€ã³ããã¯ã¹ã®ã©ãããŒãšããŠfastindexãå®è£ ããå¿ èŠããããŸãã
@timholy eachindex
ãé«éç·åœ¢é
åã®UnitRangeãè¿ããªãçç±ã¯ãããŸããïŒ ããã§ãã¿ã€ãã¯å®å®ããŠãããåŒã³åºãå
ãCartesianIndexã確å®ã«ååŸãããå Žåã¯ãæåã§CartesianRangeãäœæã§ããŸãïŒ CartesianRangeã¯ãšã¯ã¹ããŒããããªãããã eachindex(size(A))
ã¡ãœãããè¿œå ããããšãã§ããŸãïŒã
ãããæåã«ãã£ãããšã§ããã @ Juthoããããå€ãããšæããŸãã ïŒãããåœãŠã¯ãŸããªãå Žåã¯ãããããæ°ä»ããã«å€æŽããŸãããïŒå€æŽã¯äžè²«æ§ã®ããã«åæ©ä»ãããããšæããŸãïŒãããã£ãŠã CartesianIndex
ãååŸããããšãæåŸ
ã§ããŸãïŒãããã«ã¯ããçšåºŠã®æå³ããããŸãã ã ããããããªããææããããã«ãããã確å®ã«ããããã®ä»£æ¿æ段ããããŸãã
@Jutho ãäœãèãã¯ãããŸããïŒ
eachindex
å€æŽããããšãèŠããŠããŸããããå€æŽã§ããå¯èœæ§ããããŸãã é
åã®ã¿ã€ãã«é¢ä¿ãªãäžè²«ããçµæãåŸãããããšãé€ããŠãç§ã¯ç¢ºãã«ããã®æ£åœãªçç±ãèŠããŠããŸããã ããããå¹ççãªç·åœ¢ã€ã³ããã¯ã¹ã䜿çšããé
åãšäœ¿çšããªãé
åã®éããããã¥ã¡ã³ãã§æ確ã«èª¬æãããŠããå Žåãå¹ççãªç·åœ¢ã€ã³ããã¯ã¹ã䜿çšããé
åã®å Žåã eachindex
ãç·åœ¢ç¯å²ãè¿ãããšãã§ããªãã£ãçç±ã¯ããããŸããã
@timholy ãããªãã®ä»¥åã®æçš¿ã«å¿ããŠãç§ã¯JuliaConã«åå ã§ããªãã®ã§ã CartesianIndex
ããšã«ã€ããŠæ°è»œã«è©±ããŠãã ããïŒãšã«ããç§ã¯ããã€ãã®æåŸã®ä»äžããæäŸããã ãã§ãïŒã ãã§ã«ã«ã³ãã¡ã¬ã³ã¹ã®ã¬ããŒããšãããªã楜ãã¿ã«ããŠããŸãã
æ°ãŸãããªèãïŒä»»æã®æ¬¡å
ïŒæ¬¡å
> 2ãå«ãïŒã®é
åA
ã®å Žåã A'
ãA
ã€ã³ããã¯ã¹ãåšæçã«äžŠã¹æ¿ããããšãã§ããŸãã ãããã£ãŠã A'[i, j, k] == A[j, k, i]
ã ããã¯ãMATLABã®ããã«è§£éãããå ŽåïŒã€ãŸãããããã[nã1]ããã³[1ãn] 2dé
åïŒã2dé
åã®éåžžã®è¡å転眮ãããã³è¡ãšåã®ããã¯ãã«ãã®éåžžã®è»¢çœ®ã«ãªããŸãã ãããã£ãŠã2Dåã®ããã¯ãã«ããçã®ã³ãã¯ãã«ã«ããããããã2Dè¡ã®ããã¯ãã«ããçã®ãã¯ãã«ã«ããããããããããšã¯ãããŸããã ïŒãã®ããããã£ã¯è¯ããšæããŸãããä»ã®äººã¯åæããªããããããŸãããïŒé
åãªããžã§ã¯ããšããŠè§£éãããè¡åãšãã¯ãã«ã®ã¢ã€ãã³ãã£ãã£A'' == A'
ãšv'' == v
ãäžããŸãã äžã§èª¬æãããããªã¿ã€ãéå±€ïŒçã®ãã¯ãã«ãšå
±ãã¯ãã«ãæœè±¡é
åãšååã«åºå¥ãããŠããïŒãèãããšã '
ã¯ãç·åœ¢ä»£æ°ã®æŠå¿µã«å¯Ÿå¿ããçã®ãã¯ãã«ãšå
±ãã¯ãã«ã«å¯ŸããŠãŸã£ããç°ãªãæ¹æ³ãäžããããšãã§ããŸãã v'' == v
æºããå¿
èŠã¯ãããŸããïŒãã ããããã人ã
ãæããšå€æããå Žåã¯å¯èœã§ãïŒã
æ確ã«ããããã«ïŒç§ã¯'
ã次å
> 2ã®é
åã®ããã®ã¡ãœãããæã£ãŠããå¿
èŠããããšäžç¬èããŸããããç§ã¯äžèšã®ãã®ææ¡ãèŠãŠããŸããã§ããïŒããããã€ã³ããã¯ã¹ãéã«ããããšããæå³ã§ãªãéãïŒ "ïŒãããŠç§ã¯ããã«ã€ããŠèšåããããšæããŸããã ç§ããããããŠããã®ãèŠãæã害ïŒäžå¿ã®ïŒã¯æŠå¿µçã§ã:(å°ãæ£æçãªïŒçµã¿åããæŒç®ãç·åœ¢ä»£æ°ã®é åãšããŠéåžžåãããæŒç®åãšæ··åããŸãã ããã«å¯ŸããŠãç·åœ¢ä»£æ°ã®æŠå¿µãçŽç²ã«ããŒã¿äžå¿ã®æŠå¿µã«æ¡åŒµããããšãããšãå°ãªããšãããçšåºŠã®ãã®ãããªæ··ä¹±ã¯é¿ããããªããšçããããšãã§ããŸãïŒãã®è°è«å
šäœã§èšŒæãããŠããŸãïŒã ãã®ãããå€æ¬¡å
é
åã®å·¡å眮æã®äŸ¿å©ãªçç¥åœ¢ããå€æ¬¡å
é
åã®æ¬¡å
ã«å¯ŸããŠäžè¬çã«'
ãäœããã¹ããã決å®ããå¯ç£ç©ãšããŠãæåŸ
ãããã±ãŒã¹ã«éå
ãããéããåãåãããšãã§ããŸãã 2次å
ã A'(k)[I]
ãA[I]
ã®ã€ã³ããã¯ã¹ãkååšæçã«äžŠã¹æ¿ãã A'(ndims(A))[I] == A[I]
ãšA'(-k)[I]
ãã€ã³ããã¯ã¹ã䞊ã¹æ¿ããããã«ãæŽæ°åŒæ°ãåãã¡ãœãããè¿œå ããããšãã§ããŸããå察æ¹åã«ã
ã¡ãã£ãšããèãã
transpose
ãå€æ¬¡å
é
åã«å¯ŸããŠå®çŸ©ãããŠããå Žåãããã§ãA''=A
æºããããšããå§ãããŸããã€ãŸããããèªäœãéã§ãã ããã¯ã以åã®ææ¡ãšçŽæ¥ççŸããŠããŸãã
ããã¯å
¬æ£ã§ãã ç§ãèšã£ãããã«ãç§ã®ææ¡ã¯ã転眮ã®ç·åœ¢ä»£æ°çéèŠæ§ãšãd> 2ã®å Žåã«èª²ãé
åäžå¿ã®éèŠæ§ãšã®éã«äºè£ãçããããããšã«æµæããªãå Žåã«ã®ã¿ïŒæœåšçã«ïŒé
åçã§ãã ç§ã®æšè«ã¯ããã®è£ãç®ããã§ã«ïŒäžçš®ã®ïŒèµ·ãã£ãŠããéãããããŠã¡ãœãããä»ã®æ¹æ³ã§å®å
šã«äœ¿çšãããªãã®ã§ããã°ãã€ã³ããã¯ã¹ã䞊ã¹æ¿ããããã®çç¥åœ¢ãæã£ãŠããã®ã¯ãããããããŸãã-ãããäœãå¿
èŠãšããªãéãd = 2ã±ãŒã¹ãæ©èœãããããã®ç¹å¥ãªåŠçã ããªãïŒ@JuthoïŒãè¿°ã¹ãããã«ã2次å
ã®å Žåã®è»¢çœ®æ¬¡å
ãç·åœ¢ä»£æ°çéèŠæ§ãæã£ãŠããããšã¯äŸ¿å©ãªå¶ç¶ã®äžèŽã§ãïŒãããŠãïŒå
±ïŒãã¯ãã«ã2次å
é
åãšããŠèå¥ããåŸã§ã®ã¿ïŒã d> 2ã®å Žåã transpose
ã®æ°åŠçç¹æ§ïŒããšãã°ã A'' == A
ãå¿
èŠïŒã«ã€ããŠæ
éã«èããå¿
èŠã¯ãããŸããããã®ã«ãŒãã䜿çšãããå Žåã¯ã圹ç«ã€å¯èœæ§ã®ããæ¹æ³ããããããããŸããå²ãåœãŠãããŸããäŸïŒ A'
1ååšæçã«äžŠã¹æ¿ãã A'(k)
kååšæçã«äžŠã¹æ¿ãã A'(I)
ã¯I::Array{Int, 1}
ãé·ã<= ndims(A)
åšæçã«äžŠã¹æ¿ããŸãI
ã«ãªã¹ããããŠããã€ã³ããã¯ã¹ã䞊ã¹æ¿ãã p::Permutation
ã®é·ã<= ndims(A)
A'(p)
ã¯ã p
ã«åŸã£ãŠã€ã³ããã¯ã¹ã䞊ã¹æ¿ããŸãã ããããããããæåã®æ¹æ³ã¯ãããã±ãŒãžãäœæããŠããããååã«åœ¹ç«ã€ãã©ããã確èªããããšã ãšæããŸãã
ããšãã°ã2014幎10æ16æ¥ã®StefanKarpinskiãš2015幎3æ22æ¥ã®simonbyrneã«ãã£ãŠèšåããã2ã€ã®å€æŽ/説æããµããŒãããŸããã1ã€ã®èŠå®ããããŸãã
transpose
ã¯ãäžè¬çãªãã³ãœã«ã§ã¯ãªãããã¯ãã«ãš2次å
è¡åã«ã®ã¿äœ¿çšããå¿
èŠããããŸãã*
ããã³transpose
ã¯ãèšç®ã®æåŸã«æ«å°Ÿã®ã·ã³ã°ã«ãã³æ¬¡å
ãåé€ããå¿
èŠããããŸãã ããããªããšãæ«å°Ÿã®ã·ã³ã°ã«ãã³å¯žæ³ãä¿æãããå ŽåããããŸãããããã®2ã€ã®å€æŽã¯ãå€ãã®äŸ¿å©ããæäŸããåŸæ¥ã®ç·åœ¢ä»£æ°äœæ¥å ã®å€ãã®ãããŸããã解決ããŸãã 圌ãã¯ãåå¥ã«èããããšãã§ããäžè¬çãªé åã®çŽ¢åŒä»ãããã³ãœã«ä»£æ°ã«ã€ããŠæå³çã«äœãè¿°ã¹ãŠããŸããã ïŒç¹ã«ããã³ãœã«è»¢çœ®ã¯ãè¡å/ãã¯ãã«è»¢çœ®ãšã¯å®å šã«å¥åã®æäœã§ãããšèŠãªãå¿ èŠããããŸããïŒ
ãã®ææ¡ã§ã¯ãè¡åã®ä¹ç®ãšè»¢çœ®ã䜿çšããå Žåããã¯ãã«ãš1åã®è¡åã®éã«æ¬è³ªçã«åºå¥ã¯ãªããã¹ã«ã©ãŒãé·ã1ã®ãã¯ãã«ãããã³1è¡åã®éã«æå³ã®ããåºå¥ããããŸããã -1è¡åã ãã ãã x'
ã¯ããã¯ãã«ã§ã¯ãªã1è¡nåã®è¡åã«ãªããŸãã
äžæ¹ãããŒã¿ãä¿æããç®çã§ãä»»æã®ãµã€ãºã®é åãäœæã§ããŸãã ä¹ç®ãšè»¢çœ®ã®ç·åœ¢ä»£æ°ã®æŠå¿µãå«ãŸããªããããã·ã³ã°ã«ãã³æ¬¡å ã¯åé€ãããŸããã
以äžã¯ãææ¡ãããå€æŽã䌎ãJuliaã»ãã·ã§ã³ã®æ¶ç©ºã®ãã©ã³ã¹ã¯ãªããã§ãã
ãŸããã¹ã«ã©ãŒã2ã€ã®ãã¯ãã«ãããã³è¡åãå®çŸ©ããŸãã
julia> alpha = 2.0
2.0
julia> x = [1.0; 2.0; 3.0]
3-element Array{Float64,1}:
1.0
2.0
3.0
julia> y = [4.0; 5.0; 6.0]
3-element Array{Float64,1}:
4.0
5.0
6.0
julia> A = [1.0 2.0 3.0; 4.0 5.0 6.0; 7.0 8.0 9.0]
3x3 Array{Float64,2}:
1.0 2.0 3.0
4.0 5.0 6.0
7.0 8.0 9.0
ã¹ã«ã©ãŒãã¯ãã«ã®ä¹ç®ã¯ãç¡é¢ä¿ãªæ¬¡å ãååšããå Žåã§ãæ©èœããçµæã¯åžžã«ãã¯ãã«ã«ãªããŸãã
julia> alpha*x
3-element Array{Float64,1}:
2.0
4.0
6.0
julia> alpha*x[:,[1]]
3-element Array{Float64,1}:
2.0
4.0
6.0
転眮ã¯å¯Ÿåã§ãã
julia> x'
1x3 Array{Float64,2}:
1.0 2.0 3.0
julia> x''
3-element Array{Float64,1}:
1.0
2.0
3.0
julia> x==x''
true
julia> x'''
1x3 Array{Float64,2}:
1.0 2.0 3.0
è¡åã«1åã®è¡åãæãããšãè¡åãšãã¯ãã«ã®ç©ãšåãçµæãåŸãããŸãã
julia> A*x
3-element Array{Float64,1}:
14.0
32.0
50.0
julia> A*x[:,[1]]
3-element Array{Float64,1}:
14.0
32.0
50.0
1è¡ã®è¡åã«è¡åãæãããã®ã1è¡ã®è¡åã«çãããªããŸãã
julia> x'*A
1x3 Array{Float64,2}:
30.0 36.0 42.0
å ç©ã¯ã¹ã«ã©ãŒã§ãããè¡å-ãã¯ãã«ããã³è¡å-è¡åç©ã®ããäžè¬çãªèŠåã«ãã£ãŠçæãããŸãã
julia> x'*y
32.0
julia> x'*y[:,[1]]
32.0
å€ç©ã¯ç¹å¥ãªãã®ã§ã¯ãããŸããã
julia> x*y'
3x3 Array{Float64,2}:
4.0 5.0 6.0
8.0 10.0 12.0
12.0 15.0 18.0
julia> x[:,[1]]*y'
3x3 Array{Float64,2}:
4.0 5.0 6.0
8.0 10.0 12.0
12.0 15.0 18.0
ãã¯ãã«ãšãã¯ãã«ã®ç©ã¯ãšã©ãŒã§ãã
julia> x*y
ERROR: `*` has no method matching *(::Array{Float64,1}, ::Array{Float64,1})
ãã¯ãã«ãšè¡åã®ç©ã¯ãšã©ãŒã§ãã
julia> x*A
ERROR: DimensionMismatch("*")
in gemm_wrapper! at linalg/matmul.jl:270
in * at linalg/matmul.jl:74
è¡åã®ä¹ç®ã¯çµåæ³åã§ãã
julia> (x*x')*y
3-element Array{Float64,1}:
32.0
64.0
96.0
julia> x'*y
32.0
julia> x*(x'*y)
3-element Array{Float64,1}:
32.0
64.0
96.0
julia> norm((x*x')*y-x*(x'*y))
0.0
ç·šéïŒè£œåã®å 寞ã®éæ Œãå«ã2ã€ã®äŸãåé€ããŸããã 圌ãã¯çŸåšã®è°è«ãšã¯ããŸãé¢ä¿ããããŸããã§ããã
æ«å°Ÿã®ã·ã³ã°ã«ãã³æ¬¡å ãç Žæ£ããããšã¯åå®å®æäœã§ã¯ãªããããããã«ãããé¢é£ããæäœã®åå®å®æ§ã倱ãããã®ã§ã¯ãªãããšå¿é ããŠããŸãã
ç§ã®èŠæ¹ã§ã¯ãã³ãã¯ã¿ãŒããžãã¹å
šäœã¯ãåé€ãããã¿ã€ãã«åºã¥ããŠæ¢ç¥ã®ã·ã³ã°ã«ãã³æ¬¡å
ãæã€ããšã§ãã ãŸããããŸããŸ1ã€ã®åããæããªããã¯ãã«ãšè¡åã®åºå¥ãç¶æããããã«ããªãã®åªåãx''
ãŠããŸãããããã®ææ¡ã«ããã
ç°ç«¯çãªææ¡ïŒåãã©ã¡ãŒã¿ãŒãã次å ãåé€ããå®è¡æã«ãã¹ãŠã®æ¬¡å /ãµã€ãºããã§ãã¯ããå Žåã¯ã©ããªããŸããïŒ ïŒãšã«ãããããªãã®éãå®è¡ããããšã«ãªããŸããïŒãããŠããµã€ãºãåãã©ã¡ãŒã¿ãŒãšããŠãšã³ã³ãŒãããåã®æ¬¡å ãã©ã¡ãŒã¿ãŒã¯ãã®ãŸãŸã«ããŠãããŸãã ïŒã¢ãã«ã2é±éé ããŠãgithubã¢ã«ãŠã³ãã@SomeoneWhoCertainlyIsntTimHolyUhUhNoWayã«å€æŽããŸããïŒ
ïŒãã¡ãããïŒ10525ã ãã§æ¬åœã«æå¥ãèšãã§ããããïŒ
FWIWãããã¯ããã»ã©ã¯ã¬ã€ãžãŒãªã¢ã€ãã¢ã§ã¯ãªããšæããŸããããšãã°ãããŒãã®ä»çµã¿ã§ããããŒãã®éçºè ã¯ãåã·ã¹ãã å ã§ã®ãžã¥ãªã¢ã®æ¬¡å ã®ãšã³ã³ãŒãã«äžæºãè¡šæããŠããŸãã
@timholy質åïŒããã䜿çšããŠãç·åœ¢ä»£æ°ãšãã¯ãã«ã®è»¢çœ®ã«é¢ããã»ãã³ãã£ã¯ã¹ãæ¹åã§ããŸããïŒ
ããã§ãCoVector
/ DualVector
/ TransposeVector
䜿çšã«èå³ãããå Žåã¯ãæ°ããTimHolyArray{DataType}
ã©ããããå¿
èŠããããã©ã¡ãããç解ããå¿
èŠããããŸãã 2ã€ïŒãŸãã¯1ã€ïŒãã倧ãã次å
ã®é
åã®è»¢çœ®ããŸãã¯tharray
次å
ã2ã€ïŒãŸãã¯1ã€ïŒãã倧ããå Žåã®æ§ç¯TransposeVector(tharray)
çŠæ¢ãã...å®éã«ã¯ãããããçš®é¡ã®å®è¡æã¬ãã«ã§ãçŸåšã³ã³ãã€ã«æãšã©ãŒã§ãããšã©ãŒãçºçãããå¿
èŠããããŸãïŒçŸåšå®çŸ©ãããŠããªããããåã·ã¹ãã ã§çŠæ¢ãããŠããä¹ç®ãªã©ïŒã
äžæ¹ããã®æ°ããã¯ã©ã¹å ã«è»¢çœ®ãã©ã°ãå®è£ ããã®ã¯æªããããããŸãã...ããã¯å¹ççã§è»œéãªã³ã³ããã§ããã¹ããã®ãããè€éã«ããŸãã ç§ã¯ãã®ãªãã·ã§ã³ãé€å€ããåŸåããããã³ã³ãã€ã©/åã·ã¹ãã ã«ããŒãã¯ãŒã¯ãä»»ããŸãã
ç§ã¯å¿ ãããããªãã®èãã«å察ããŠããããã§ã¯ãããŸãããããã¯ãã«è»¢çœ®ãšäžŠè¡ããŠå®è¡ã§ããè¿œå ã®åé¡ã®ããã§ãã
@timholy ïŒãããé²ãã¹ãéãã©ããã¯æ¬åœã«ç¢ºä¿¡ããŠããŸãã ãã£ã¡ã³ã·ã§ã³ã«ãã£ã¹ãããããããšãéåžžã«åœ¹ç«ã€å ŽåããããŸãã
ããããã¹ãŠã®ã¢ã¬ã€ã«é©çšããããšãææ¡ããŸããã ããããç§ã¯ä»ãç§èªèº«ã®ææ¡ã«å察ããŠããŸãããªããªããå€ãã®å€æ¬¡å
ã®å Žåã N
次å
é
åã«å¯ŸããŠN
ã«ãŒããçæããå¿
èŠãããããã§ãã N
ãåãã©ã¡ãŒã¿ãŒã§ãªããã°ããã以äžãããè¡ãããšã¯ã§ããŸããã
ã¯ããããã¯ãã«ã«ããã¯ãïŒãŸãã¯ç§ããŸã æ
£ããŠããªã段éçãªé¢æ°:-)ïŒã®èŠç¹ã§ã¯ãããŸãããïŒ
ãã³ãã¬ãŒããã©ã¡ãŒã¿ãšããŠãã£ã¡ã³ã·ã§ã³ã䜿çšããã®ãéåžžã«é¢åãªC ++ã§ãåæ§ã®ããšãè¡ããŸããã ããããããŸããŸãªé
åã®æ¬¡å
ãç¹æ®åããããã«å€§ããªifã¹ããŒãã¡ã³ããå¿
èŠã ã£ããããåçããªã¢ã³ããå¶éãããŠããç¶æ³ããããŸããã
ææ¡ïŒ
timesfast
ããçŸåšã®è»¢çœ®åäœã®ååãtransposefast
ãŸãã(*)
ãštranspose
ãå€æŽããŠãåã®ã³ã¡ã³ãã®ããã«æ«å°Ÿã®ã·ã³ã°ã«ãã³æ¬¡å
ãåãæšãŠãŸãã ããšãã°ã u'*v
ã¯ã¹ã«ã©ãŒã«ãªãã v''
ã¯ãã¯ãã«ã«ãªãã (v*v')/(v'*v)
ãå®çŸ©ãããŸããæ¢åã®åäœã¯ã¿ã€ãå®å®ã§ãã ææ¡ãããåäœã¯ãå€ãã®ç·åœ¢ä»£æ°ããã¹ãã®èŠåã«åŸããŸãã ãããã¯äž¡æ¹ãšã䟡å€ããããŸãã ãããããžã¥ãªã¢ã¯äž¡æ¹ãæã£ãŠããå¿ èŠããããŸãã
æ宀ã§Juliaã䜿çšãããã®ã§ãå¹çãããå©äŸ¿æ§ãéèŠããããã©ã«ãã®åäœã«æ祚ããŸãã
ãã®éåžžã«é·ãã¹ã¬ããã«ã€ããŠç§ãç解ãããŠãããäœäººãã®è²¢ç®è ã«æè¬ããŸãïŒ
@briansutton ïŒããªãã¯æ¬åœã«ããªããæ±ããŠãããã®ãåèããã¹ãã ãšæããŸãã æãç®ã®æå³ãåå®çŸ©ããããšãææ¡ããåã«ããžã¥ãªã¢ãã©ã®ããã«æ©èœããããããæ·±ãç解ãããŸã§åŸ ã€ããšããå§ãããŸãã
ãã®åé¡ã¯ãå¯èœãªéãå€ãã®ç¹æ®ãªã±ãŒã¹ãåé¿ããæ¹æ³ã«é¢ãããã®ã§ãã
ã·ã³ã°ã«ãã³æ¬¡å
ã®æ··ä¹±ãèš±å¯ããã«ãŒã«ã¯ãã·ã³ã°ã«ãã³æ¬¡å
ã®1ã€ãå®éã«æ°ã«ãªãç¬éã«åŽ©å£ããŸãã ã[ãã¹ãŠã®]æ«å°Ÿã®ã·ã³ã°ã«ãã³æ¬¡å
ãåãæšãŠããã«ãŒã«ã§ã¯ã v
ã1èŠçŽ ã®ãã¯ãã«ã®å Žåã v'
ã¯ã¹ã«ã©ãŒã§ããããã v''
ãã¹ã«ã©ãŒã ãããã£ãŠããã®ææ¡ã§ãã v == v''
ãåžžã«ä¿æãããšã¯éããŸããã
ã«ãŒã«ãå€æŽããŠããé
åã®æ¬¡å
ã2ã®å ŽåãæåŸã®æ«å°Ÿã®ã·ã³ã°ã«ãã³æ¬¡å
ã®ã¿ãåãæšãŠããããšãã§ããŸãã ãã ãããã®å€æŽãããã«ãŒã«ã䜿çšããŠããå€ç©v * w'
ã¯è¡åä¹ç®ã®å®çŸ©ã«èªåçã«ã¯åŸããã代ããã«Vector * Matrix
ç¬èªã®ç¹æ®ãªå®çŸ©ã§ããå¿
èŠããããå®çŸ©ã¯ã圢ç¶ãïŒNïŒxïŒ1ãMïŒã§ãªãéãããšã©ãŒãã¹ããŒããŸããã
@jiahao ïŒ
ãã¯ãã«ãšè¡åã䜿çšããŠç·åœ¢ä»£æ°ãå®è¡ããå Žåãã¹ã«ã©ãŒã1èŠçŽ ãã¯ãã«ãããã³1è¡1åã®è¡åãåºå¥ããããããŸããã çŸåšãããŸããŸãªæäœã§3ã€ã®ãªããžã§ã¯ãã®ãããããçæãããŸãã ç§ã®ææ¡ã¯ãè¡åã®ä¹ç®ãšè»¢çœ®ã®æäœã«ã€ããŠã3ã€ã®ãã¡ã®1ã€ãåªå è¡šçŸãšããŠéžæããããšã§ãã
æåã®äŸïŒ v==v''
ïŒã«é¢ããŠã¯ãããããv
èŠçŽ ã®ãã¯ãã«
2çªç®ã®äŸã«é¢ããŠã¯ãã¯ãã v*w'
ã¯ããªãã説æãããšããã«åŠçããå¿
èŠããããšæããŸãã è¡åã®ä¹ç®ãšè»¢çœ®ã䜿çšããå Žåããã¯ãã«v
ãšNè¡1åã®è¡åv[:,[1]]
ã¯ãå
éšè¡šçŸãç°ãªã£ãŠããŠããåãæ°åŠçãªããžã§ã¯ããè¡šãããã«ããŸãã ããã«ã¯ãNãã¯ãã«Ã1è¡Måã®è¡åãåŠçããããã®ç¹å¥ãªã³ãŒããå¿
èŠã«ãªããŸãã
åã®å®å®æ§ãéèŠã§ãããšããªãã¯ãŸã 確信ã
@briansutton ïŒçŸåšã®åã·ã¹ãã ã§Juliaã³ãŒããå®è¡ã§ããã®ãšåãéãã§ææ¡ãå®è¡ããããã«å¿ èŠãªæ©æ§ãå®è£ ããŠã¿ããšãéåžžã«æçã ãšæããŸãã ç§ã¯ãäºæž¬å¯èœãªããã©ãŒãã³ã¹ãšCã¡ã¢ãªã¬ã€ã¢ãŠãã®äºææ§ãæäŸãããšãããžã¥ãªã¢ã³ã®ç®æšãèãããšãããªããè¿°ã¹ãç®æšã¯éæã§ããªããšä¿¡ããŠããŸãã
è°è«ãè¡ã亀ãããšãç解ããŠãããã©ããã¯ããããŸãããã1ã€ã®ããšãç§ã®ç®ã«çãŸããŸããã åžæç芳枬ãããããŸããããã³ã³ãã¥ãŒã¿ãŒã人éã®è³ãšåããããéãèããããšãã§ããã°ããã®ã§ããã ç§ãèšãããã®ã¯ããã©ã€ã¢ã³ã»ãµããã³ãã奜ãŸããè¡šçŸãéžã¶ããšããããã°ã©ã ã«ã€ããŠè©±ããšããç§ãã¡ãæ°åŠããããšããšåãããã«èããããšãã§ããããã°ã©ã ãæ³åãããšããããšã§ãã ãããããããã¯ä»æ¥ã®æè¡ã§ã¯å®çŸäžå¯èœã§ãããç©äºãé ãããããã§ãããã ããããããã¯ããããšã§ã¯ãªãã§ãããã...
ç§ã¯ç©çåŠè ã§ããããžã¥ãªã¢ã®ã¢ã¯ãã£ããŠãŒã¶ãŒã§ãã
ç§ã¯ãã¯ãã倩åãç¶æããããåŸç¶ã®ã·ã³ã°ã«ãã³ã®æ¬¡å ããã¹ãŠåé€ãããããããšã匷ã奜ã¿ãŸããã
ããããããã§ç§ã¯å¯æ¥ã«é¢é£ããåé¡ãæèµ·ããããšæããŸãã
çŸåšã®Juliaã®å®è£ ïŒ
Vã3次å
ã©ã³ã¯1ãã³ãœã«ïŒãã¯ãã«ïŒãšããŸãã
V [1]ã¯ã1次å
ã®ã©ã³ã¯1ãã³ãœã«ã§ã¯ãªãã¹ã±ãŒã©ãŒãæäŸããŸã
Aã3x4x5ã©ã³ã¯3ãã³ãœã«ãšããŸã
B = A [1ãïŒãïŒ]ã¯ã1x4x5ã©ã³ã¯3ã®ãã³ãœã«ãäžããŸãã
äžèšã®2ã€ã®åäœã¯å®å šã«äžè²«ããŠããŸããã
ç§ã¯æ¬¡ã®ã€ã³ããã¯ã¹äœæ/ã¹ã©ã€ãæ©èœã匷ã奜ã¿ãŸãã
Aã3x4x5ã©ã³ã¯3ãã³ãœã«ãšããŸã
B = A [1ãïŒãïŒ]ã¯ã4x5ã®ã©ã³ã¯2ãã³ãœã«ãäžããŸãã
C = A [1ïŒ1ãïŒãïŒ]ã¯ã1x4x5ã®ã©ã³ã¯2ãã³ãœã«ãäžããŸãã
ïŒçŸåšãäžèšã®2ã€ã¯åãçµæããããããŸãïŒ
Vãã©ã³ã¯1ãã³ãœã«ãšããŸã
B = V [1]ã¯ç§ãã¡ã«ã¹ã±ãŒã©ãŒãäžããŸã
C = V [1ïŒ1]ã¯ã1次å
ã®ã©ã³ã¯1ãã³ãœã«ãäžããŸãã
ãã®æ©èœã¯ããã³ãœã«ã®åœ¢ç¶ãããç°¡åã«å€æŽããã®ã«åœ¹ç«ã¡ãåŸç¶ã®ã·ã³ã°ã«ãã³ã€ã³ããã¯ã¹ãèš±å¯ãããšãã«åœ¹ç«ã¡ãŸãã
ãã¹ã
Xiao-Gang
å·®åºäººïŒesd100 [[email protected]]
éä¿¡ïŒ2015幎6æ9æ¥ç«ææ¥21:46
å®å
ïŒJuliaLang / julia
CcïŒã·ã£ãªã¬ã³ãŠã§ã³
件åïŒReïŒ[julia]ãã¯ãã«è»¢çœ®ãçå£ã«åãæ¢ããïŒïŒ4774ïŒ
è°è«ãè¡ã亀ãããšãç解ããŠãããã©ããã¯ããããŸãããã1ã€ã®ããšãç§ã®ç®ã«çãŸããŸããã åžæç芳枬ãããããŸããããã³ã³ãã¥ãŒã¿ãŒã人éã®è³ãšåããããéãèããããšãã§ããã°ããã®ã§ããã ç§ãèšãããã®ã¯ããã©ã€ã¢ã³ã»ãµããã³ãã奜ãŸããè¡šçŸãéžã¶ããšããããã°ã©ã ã«ã€ããŠè©±ããšããç§ãã¡ãæ°åŠããããšããšåãããã«èããããšãã§ããããã°ã©ã ãæ³åãããšããããšã§ãã ãããããããã¯ä»æ¥ã®æè¡ã§ã¯å®çŸäžå¯èœã§ãããç©äºãé ãããããã§ãããã ããããããã¯ããããšã§ã¯ãªãã§ãããã...
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGi tHubhttpsïŒ//github.com/JuliaLang/julia/issues/4774#issuecomment-110554622ã§è¡šç€ºããŠãã ããã
ã€ãŸããC = A [1ïŒ1ãïŒãïŒ]ã¯1x4x5ã®ã©ã³ã¯3ãã³ãœã«ãäžããŸãã
Xiao-Gang
å·®åºäººïŒXiao-Gang Wen [[email protected]]
éä¿¡æ¥ïŒ2015幎6æ22æ¥æææ¥12:01 PM
å®å
ïŒJuliaLang / julia; JuliaLang / julia
CcïŒã·ã£ãªã¬ã³ãŠã§ã³
件åïŒREïŒ[ãžã¥ãªã¢]ãã¯ãã«è»¢çœ®ãçå£ã«åãæ¢ããïŒïŒ4774ïŒ
ç§ã¯ç©çåŠè ã§ããããžã¥ãªã¢ã®ã¢ã¯ãã£ããŠãŒã¶ãŒã§ãã
ç§ã¯ãã¯ãã倩åãç¶æããããåŸç¶ã®ã·ã³ã°ã«ãã³ã®æ¬¡å ããã¹ãŠåé€ãããããããšã匷ã奜ã¿ãŸããã
ããããããã§ç§ã¯å¯æ¥ã«é¢é£ããåé¡ãæèµ·ããããšæããŸãã
çŸåšã®Juliaã®å®è£ ïŒ
Vã3次å
ã©ã³ã¯1ãã³ãœã«ïŒãã¯ãã«ïŒãšããŸãã
V [1]ã¯ã1次å
ã®ã©ã³ã¯1ãã³ãœã«ã§ã¯ãªãã¹ã±ãŒã©ãŒãæäŸããŸã
Aã3x4x5ã©ã³ã¯3ãã³ãœã«ãšããŸã
B = A [1ãïŒãïŒ]ã¯ã1x4x5ã©ã³ã¯3ã®ãã³ãœã«ãäžããŸãã
äžèšã®2ã€ã®åäœã¯å®å šã«äžè²«ããŠããŸããã
ç§ã¯æ¬¡ã®ã€ã³ããã¯ã¹äœæ/ã¹ã©ã€ãæ©èœã匷ã奜ã¿ãŸãã
Aã3x4x5ã©ã³ã¯3ãã³ãœã«ãšããŸã
B = A [1ãïŒãïŒ]ã¯ã4x5ã®ã©ã³ã¯2ãã³ãœã«ãäžããŸãã
C = A [1ïŒ1ãïŒãïŒ]ã¯ã1x4x5ã®ã©ã³ã¯2ãã³ãœã«ãäžããŸãã
ïŒçŸåšãäžèšã®2ã€ã¯åãçµæããããããŸãïŒ
Vãã©ã³ã¯1ãã³ãœã«ãšããŸã
B = V [1]ã¯ç§ãã¡ã«ã¹ã±ãŒã©ãŒãäžããŸã
C = V [1ïŒ1]ã¯ã1次å
ã®ã©ã³ã¯1ãã³ãœã«ãäžããŸãã
ãã®æ©èœã¯ããã³ãœã«ã®åœ¢ç¶ãããç°¡åã«å€æŽããã®ã«åœ¹ç«ã¡ãåŸç¶ã®ã·ã³ã°ã«ãã³ã€ã³ããã¯ã¹ãèš±å¯ãããšãã«åœ¹ç«ã¡ãŸãã
ãã¹ã
Xiao-Gang
å·®åºäººïŒesd100 [[email protected]]
éä¿¡ïŒ2015幎6æ9æ¥ç«ææ¥21:46
å®å
ïŒJuliaLang / julia
CcïŒã·ã£ãªã¬ã³ãŠã§ã³
件åïŒReïŒ[julia]ãã¯ãã«è»¢çœ®ãçå£ã«åãæ¢ããïŒïŒ4774ïŒ
è°è«ãè¡ã亀ãããšãç解ããŠãããã©ããã¯ããããŸãããã1ã€ã®ããšãç§ã®ç®ã«çãŸããŸããã åžæç芳枬ãããããŸããããã³ã³ãã¥ãŒã¿ãŒã人éã®è³ãšåããããéãèããããšãã§ããã°ããã®ã§ããã ç§ãèšãããã®ã¯ããã©ã€ã¢ã³ã»ãµããã³ãã奜ãŸããè¡šçŸãéžã¶ããšããããã°ã©ã ã«ã€ããŠè©±ããšããç§ãã¡ãæ°åŠããããšããšåãããã«èããããšãã§ããããã°ã©ã ãæ³åãããšããããšã§ãã ãããããããã¯ä»æ¥ã®æè¡ã§ã¯å®çŸäžå¯èœã§ãããç©äºãé ãããããã§ãããã ããããããã¯ããããšã§ã¯ãªãã§ãããã...
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGi tHubhttpsïŒ//github.com/JuliaLang/julia/issues/4774#issuecomment-110554622ã§è¡šç€ºããŠãã ããã
ããªããæ±ããŠããã®ã¯ã slice
çŸåšã©ã®ããã«æ©èœããŠãããã§ãã ç§ã®æèŠã§ã¯ã A[stuff]
ã¯slice(A, stuff)
å矩èªã«ãªãã®ã§ãããããããªãã¯ããªãã®æã¿ãåŸãã§ãããã
芪æãªããã£ã ïŒ
ãã³ãããããšãããããŸãã ã¹ã©ã€ã¹ããŠã¿ãŸããã ããã¯ç§ã®ããŒãºã«åããŸããã ã¹ã©ã€ã¹ã¯ã:: ArrayããŒã¿åã䜿çšããä»ã®ã³ãŒãã§ã¯äœ¿çšã§ããªãæ°ããããŒã¿åãsubarrayããçæããŸãã
ããµãã¢ã¬ã€ãããŒã¿åãèš±å¯ããããã«ãä»ã®ã³ãŒããå€æŽã§ãããããããŸããã
Xiao-Gang
å·®åºäººïŒTim Holy [[email protected]]
éä¿¡æ¥ïŒ2015幎6æ22æ¥æææ¥17:32
å®å
ïŒJuliaLang / julia
CcïŒã·ã£ãªã¬ã³ãŠã§ã³
件åïŒReïŒ[julia]ãã¯ãã«è»¢çœ®ãçå£ã«åãæ¢ããïŒïŒ4774ïŒ
ããªããæ±ããŠããã®ã¯ãã¹ã©ã€ã¹ãçŸåšã©ã®ããã«æ©èœãããã§ãã ç§ã®æèŠã§ã¯ãA [stuff]ã¯sliceïŒAãstuffïŒã®å矩èªã«ãªãã®ã§ãããããããªãã¯ããªãã®æã¿ãåŸãã§ãããã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGi tHubhttpsïŒ//github.com/JuliaLang/julia/issues/4774#issuecomment-114268796ã§è¡šç€ºããŠãã ããã
ã³ãŒãã§AbstractArray
代ããã«å
·äœçãªArray
ã¿ã€ãã䜿çšããããšã«æ¬åœã«äŸåããŠãããã®ã¯ãããŸããïŒ ç©äºãæ©èœãããã«ã¯ã Array
ãAbstractArray
ã«æ€çŽ¢/眮æããã ãã§æžã¿ãŸãã
芪æãªãã¹ã³ãã
ãã³ãããããšãããããŸãã
Xiao-Gang
å·®åºäººïŒã¹ã³ããP.ãžã§ãŒã³ãº[[email protected]]
éä¿¡æ¥ïŒ2015幎6æ25æ¥æšææ¥9:55 AM
å®å
ïŒJuliaLang / julia
CcïŒã·ã£ãªã¬ã³ãŠã§ã³
件åïŒReïŒ[julia]ãã¯ãã«è»¢çœ®ãçå£ã«åãæ¢ããïŒïŒ4774ïŒ
ã³ãŒãã§AbstractArrayã®ä»£ããã«å ·è±¡é ååã䜿çšããããšã«æ¬åœã«äŸåããŠãããã®ã¯ãããŸããïŒ ç©äºãæ©èœãããã«ã¯ãé åãAbstractArrayã§æ€çŽ¢/眮æããã ãã§æžã¿ãŸãã
â
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGi tHubhttpsïŒ//github.com/JuliaLang/julia/issues/4774#issuecomment-115265047ã§è¡šç€ºããŠãã ããã
ããã¯ããªãã®ããã«ããªãã¯ãããŸãããïŒ åãã§ãæäŒããããŠããã ããŸãïŒ
@wenxgwen ããŸãã¯ã copy(slice(A,...))
ãåŒã³åºããŠãæ¢åã®é¢æ°ã§ãã€ãã£ãã«æ©èœããæ°ããArray
ã®ã¹ã©ã€ã¹ã®ã³ããŒãååŸããããšãã§ããŸãã
ãã®åé¡ãä¿®æ£ããããšã¯ãä»ãå²ããåªåã«ãªã£ãŠããŸã
ãã®åé¡ãä¿®æ£ããããšã¯ã3ã€ã®ã³ã³ããžã®ãã¹ã§éèŠã«ãªããŸãã...
ãããããã¹ãŠã®æ·±å»ãã§ã ç§ã¯è°è«ãå®å šã«èªã¿éãããšããŸããããããã以åã«ææ¡ãããŠããªãããšãä¿èšŒããããšã¯ã§ããŸããïŒ
AbstractArrayå®çŸ©ãæ¡åŒµããŠãåºã«ãªãããŒã¿ãè¡ããŒã¹ãŸãã¯åããŒã¹ã®ã¹ãã¬ãŒãžã§ãããã©ãããå®çŸ©ããè¿œå ã®ç¹æ§ïŒLinearIndexingãšåæ§ïŒãæãããããšã¯ã§ããŸããïŒ ãã®è¿œå ã«ããã次ã®ããããã£ãéããŸãïŒååã«çŠç¹ãåœãŠãªãã§ãã ãã...æŠå¿µã®ã¿ïŒã
v --> length-2 Vector{Col}
[ 1
2 ]
v' --> length-2 Vector{Row}
[ 1 2 ]
m --> 2x2 Matrix{Col}
[ 1 3
2 4 ]
m' --> 2x2 Matrix{Row}
[ 1 2
3 4 ]
Some operations:
v' --> length-2 Vector{Col}
v'' == v
v*v or v'*v' --> either error, or do element-wise multiplication
v' * v --> scalar
v * v' --> 2x2 Matrix (could be Row or Col??)
v' * m --> 2-length Vector{Row}
v * m --> either error or broadcasting operation
m * v --> either error or broadcasting operation
m * v' --> 2-length Vector{Col}
Indexing:
v[2] --> 2
v[1,2] --> error
v'[1,2] --> 2
m[1,2] --> 3
m'[1,2] --> 2
Size:
length(v) --> 2
length(v') --> 2
size(v) --> (2,)
size(v') --> (2,)
length(m) --> 4
size(m) --> (2,2)
æããã«ããã®ææ¡ã«ã¯å€ãã®å®çŸ©ãæ¬ ããŠããŸãããããããããã¯è°è«ãå§ããããšãã§ããŸãã åã€ã³ããã¯ã¹ãšè¡ã€ã³ããã¯ã¹ã®äž¡æ¹ã®ã¹ãã¬ãŒãžãåæã«ãµããŒãããéäžã§ããã€ãã®åé¡ããä¿®æ£ãããããšã¯ã§ããŸããïŒ
ã«ãŒããä»ã®å€ãã®æäœã«ã€ããŠç§ãèããã®ã¯åœç¶ã®ããšãªã®ã§ãJuliaãè¡ããŒã¹ã®ã¹ãã¬ãŒãžã§ããããšã匷ãæãã§ããŸãã ïŒãããŠç§ã ãããã®ããã«èããŠãããšã¯æããŸããïŒã³ã¡ã³ãããé¡ãããŸãïŒ
ã³ã³ã¹ãã©ã¯ã¿ãŒã«ãè¡ãŸãã¯åãåã蟌ãããšã¯èå³æ·±ãèãã§ãã ããã¯ãGitHubã®çºè¡ã·ã¹ãã ã®ã©ããã§ä»¥åã«è°è«ããããšæããŸãã ç§ã¯ééã£ãŠããå¯èœæ§ããããŸãïŒ
ç§ã®æç§æžã®ã»ãšãã©ã¯æ°åŠã«åã䜿çšããŠãããããå人çã«ã¯åããŒã¹ã®ã¹ãã¬ãŒãžã奜ã¿ãŸãããžã¥ãªã¢ã§ã¯ã代ããã«è¡ã䜿çšããããã«ãã¹ãŠãå€æŽããå¿ èŠã¯ãããŸããã ç§ãæåã¯å¥åŠã ãšæããŸããããããã«ç§ã®ä»äºã§ã¯åé¡ã«ãªããŸããã§ããã è¡ã§ç°¡åã«è¡šçŸã§ããã¢ã«ãŽãªãºã ããããŸããããããå¿ èŠãªãšãã«éæšæºã®ã¹ãã¬ãŒãžã䜿çšã§ããããã«ããå¿ èŠãããã®ã¯ãã®ããã§ãã é¢æ°ãåŒã³åºããšãã«ã©ã®ã¿ã€ãã䜿çšãããã«ã€ããŠçåãçããªãããã«ããšã¯ã¹ããŒããããé¢æ°ãããå Žåã¯ãåžžã«åã®äž»è¡åãŸãã¯åãã¯ãã«ãè¿ããšããèŠåãããããšãé¡ã£ãŠããŸãã ããããªããšãéåžžã«é¢åã«ãªããè¿ãããã¿ã€ããåžžã«èª¿ã¹ãªããã°ãªããªããšãã«äœ¿çšããã®ãäžå¿«ã«ãªãå¯èœæ§ããããŸãã
åããŒã¹ãšè¡ããŒã¹ã¯ããã®åé¡ã®ç¯å²å ã§ã¯ãããŸããã
@tbreloffç§ã¯ãã®ã¢ã€ãã¢ããšãŠã奜ãã§ãã è¡ãäž»èŠãªèšèª/ã©ã€ãã©ãªãšããç°¡åã«ã€ã³ã¿ãŒãã§ã€ã¹ã§ãããšäŸ¿å©ã§ãã
Jiahaoã¯ãè¡ã¡ãžã£ãŒãšåã¡ãžã£ãŒã®ã©ã¡ããåªå
ãããã¯ãããã¯ããå€ããŠãããšããã®ã¯æ£ããããšã§ãã ãã®
ããžã¥ãªã¢ã³ãã®æ¹æ³ã§è»¢çœ®åé¡ã解決ãããšããçŽ æŽãããå¯äœçš
ïŒãã©ã¡ããªãã¯ã¿ã€ããšæ®µéçé¢æ°ïŒã¯ã人ã
ã«ããå€ãã®æè»æ§ãäžããŸã
ã¹ãã¬ãŒãžåœ¢åŒã
è¡/åã®ç¹æ§ãé
åã«è¿œå ãããšããã¢ã€ãã¢ãæ°ã«å
¥ããªãå Žåã¯ã
TransposeView {TãN}ã§ããŸã£ããåãããšãã§ããŸãããç§ã¯
ããŸãå®è£
ããã®ã¯ãã£ãšè€éã«ãªãã®ã§ã¯ãªãããšæããŸãã
è¿œå ã®ç¹æ§ã®æ倧ã®æ¬ ç¹ã¯ãæ°ãããŠãŒã¶ãŒã®æ··ä¹±ã§ãã
ããã¯ç§ãå解ããã®ã«èŠåŽããŠããããšã§ãã
2015幎9æ26æ¥åææ¥ãã¹ã³ããP.ãžã§ãŒã³ãº[email protected]
æžããŸããïŒ
@tbreloffhttps ïŒ//github.com/tbreloffç§ã¯ãã®ã¢ã€ãã¢ããšãŠã奜ãã§ãã ãã
èšèª/ã©ã€ãã©ãªãšããç°¡åã«ã€ã³ã¿ãŒãã§ãŒã¹ã§ããããã«ãªããšçŽ æŽãããã§ããã
ããã¯è¡ã¡ãžã£ãŒã§ããâ
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/JuliaLang/julia/issues/4774#issuecomment-143436947 ã
ã³ãŒã«ãªãŒããŒããŒãã¯ãã¶ã€ã³ã¹ããŒã¹ããŸã£ããå€æŽããŸããïŒ äžèšã®å Žåã *
æå³ã«ããçš®ã®ãããŸãããååšããããã«æãããããšããããŸããã ç¹ã«ã v::Covector * w::Vector
ã«ã¹ã«ã©ãŒãè¿ãããå Žåã *
å®éã«ã¯è¡åã®ä¹ç®ã§ã¯ãªããã v
äžã«w
ããããããã®ã§ããããã ãããããªãããã¯ãã«èªäœãå
±ãã¯ãã«äžã®ç·åœ¢ååã§ããããã w::Vector * v::Covector
ãã¹ã«ã©ãŒãè¿ãããšãåæ§ã«èŠæ±ããããšã¯ã§ããŸãããïŒ
ããããããã¯ã代ããã«éè² è·ã«åœ¹ç«ã€ã ããcall
ãšæžãv(w)
"äžã®ãããã瀺ãããã«v
äžã®æäœ" w
ãããã³åæ§ã®ããã®w(v)
-ã©ã¡ããã¹ã«ã©ãŒãè¿ããŸãã ããã«ããã2次å
é
åã®å Žåã«ãé
åæŒç®ãšç·åœ¢ä»£æ°æŒç®ãå
±æããã»ãã³ãã£ã¯ã¹ã«å¯Ÿå¿ããããã®äœè£ãã§ããŸããïŒ
ãããããªãããã¯ãã«èªäœãã³ãã¯ãã«äžã®ç·åœ¢ãããã§ãããããw :: Vector * v :: Covectorãã¹ã«ã©ãŒãè¿ãããšãåæ§ã«èŠæ±ããããšã¯ã§ããŸãããïŒ
ç§ãã¡ã¯ãå€ãã®äººã1幎çã®å€§åŠã§èŠãŠããè¡åãšãã¯ãã«ã®èŠåã«åŸãããšããŠãããšæããŸããããã¯ãéå¯æã§ããã¯ãã«*転眮ãã¯ãã«->è¡åïŒã©ã³ã¯1ãã€ãŸã1ã€ïŒéãŒãïŒã®ç¹ç°å€ã®ã¿ïŒãæã¡ãŸããå€ïŒã ããªããæžãããã®ã¯ãæœè±¡çãªç·åœ¢ä»£æ°ã®æŠå¿µã®ããã«èãããŸãããã¯ãã«ãšco / dual-vectorã¯ãäºãã«ããããããŠã¹ã«ã©ãŒã«ãªããŸããããã¯åé¡ãããŸããããJuliaãšMATLABã§è©Šè¡ããããã®ïŒIMHOïŒãšã¯å°ãç°ãªããŸãã ããªããæžãããã®ãå
ç©ãšããŠè§£éã§ãããšæããŸãã dot()
ãŸãã¯â
ã2ã€ã®å
±ãã¯ãã«ïŒããããå
±ãã¯ãã«ã«å¯ŸããŠå®çŸ©ããå¿
èŠããããŸãïŒã«äœçšããŸãããå€åŽãå¿
èŠãªå ŽåããããŸãã -ç©ã§ãããçŸåšãé环ç©*
䜿çšãããšãäž¡æ¹ã®åäœãèšè¿°ããŠè¡šçŸã§ããŸãã
åŒã³åºãèŠçŽv(w)
ã«ã€ããŠã¯ããããç©ã«ã€ããŠãåæ§ã«ã w
ã®æ¹åã«v
ã®éãå¿
èŠã§ãããšèšããŸããããã¯ãã€ã³ããã¯ã¹æŒç®åv[w]
ã䜿çšããããšã瀺åããŠããŸãã
åæ§ã«ããããç©ã«ã€ããŠã¯ã
v
ã®æ¹åã«w
v
ã®éãå¿ èŠã§ãããšèšãããšãã§ããŸããããã¯ãã€ã³ããã¯ã¹æŒç®åv[w]
ã䜿çšããããšã瀺åããŠããŸãã
ãã®ææ¡ã¯ãã€ã³ããã¯ã¹äœæã®ã»ãã³ãã£ã¯ã¹ã«ã»ãŒæºæ ããŠããŸãããæºæ ããŠããŸããã ãŸãã v
ãVector{<:Integer}
å Žåããã¯ãã«ã€ã³ããã¯ã¹ã®çŸåšã®ãµããŒããšãè¡çªããŸãã
v :: Vector{T<:Real}
å Žåã v[1]
ã¯å
ç©vâ
eâ
ãšåçã§ããã eâ
ã¯æåã®è»žã«æ²¿ã£ãæšæºåºåºãã¯ãã«ã§ãããšèããŠãã ããã ãããã£ãŠãåçŽãªã€ã³ããã¯ã¹äœæã¯å®éã«ã¯æ©èœã§ã
v[n] : n :: Integer --> y = (v â
eâ) :: T
ãã¯ãã«ã€ã³ããã¯ã¹ã®å Žåã v[[1, 2]]
ã¯[vâ
eâ, vâ
eâ]
ãçæããŸããããã¯ã {eâ, eâ}
ãŸãããéšå空éã«v
ãå°åœ±ããçµæã§ãããåçã«v' * [eâ eâ]
çµæã§ãã
ãããã£ãŠããã¯ãã«ã€ã³ããã¯ã¹ã¯é¢æ°ã§ã
v[I] : I :: Vector{<:Integer} --> y = v' * [eâ for n in I] :: Vector{T}
v[w] = (w â
v) v
ãäœæããææ¡ã¯ãã€ã³ããã¯ã¹ã®ã³ã¬ã¯ã·ã§ã³n
ïŒ w
ïŒããæ£èŠåºåºãã¯ãã«ã®ã³ã¬ã¯ã·ã§ã³ãžã®æé»ã®ãããã³ã°ãæé€ããããããã®å®çŸ©ãšççŸããŸãã eâ
ãããã¯ãçŸåšã®ã€ã³ããã¯ã¹äœæã«ãŒã«ãæ©èœããããã«å¿
èŠã§ãã
ä»ã®ãšãããã¹ã³ãŒãããã¯ãã«è»¢çœ®ã ãã«å¶éãããšã2ã€ã®ãªãã·ã§ã³ããããšæããŸãã ãšã©ãŒã«ããããç¹å¥ãªã³ãã¯ãã«åãå°å ¥ããããšãã§ããŸãã ãžã¥ãªã¢ã®ãã¯ãã«ã®ãã¡ãŒã¹ãã¯ã©ã¹ã®æ§è³ªãèãããšãåè ã¯éåžžã«é£ãã販売ã«ãªããšæããŸãâŠãããŠãããäžè²«ããŠè¡ãã«ã¯ããã¯ãã«ãè¡åã®ä»£æ°ã«å®å šã«åå ããããšãå®å šã«çŠæ¢ããå¿ èŠããããŸãã
ããã§ãç§ã¯ã³ãã¯ã¿ãŒãæã¡ãŸããã 倧å€ãªäœæ¥ã§ãããæ®å¿µãªãããã以äžæéããããããšã¯ã§ããŸããã 誰ããããã§èµ°ãããç§ãã¡ãå°é£ããåŠã³ãéããããšã決å¿ããããšãæåŸ
ããŠãç§ã¯ããã«ãããæçš¿ããŸãã ãããããã¥ãŒãšããŠè»¢çœ®ã䜿çšãããã©ã³ããã«ãã£ã³ã°ããããè¡åã®ä¹ç®ã¯ã³ãã¯ãã«ã§å®è£
ãããŠããŸãã äžéšã®éžæããããã¹ãã¯åæ ŒããŸããã depwarn=error
ããªãå Žåã®ã¿ã§ãïŒäŸïŒ ./julia -e 'using Base.Test; include("test/matmul.jl")'
ïŒã https://github.com/JuliaLang/julia/compare/mb/transpose
è¡åãšãã¯ãã«ã®transpose
ãšctranspose
ã«äœ¿çšãã2ã€ã®æ°ãããã¥ãŒã¿ã€ããå®çŸ©ããŸããã
immutable MatrixTranspose{C,T,A} <: AbstractArray{T,2}
data::A # A <: AbstractMatrix{T}
end
immutable Covector{C,T,V}
data::V # V <: AbstractVector{T}
end
C
ãã©ã¡ãŒã¿ãŒã¯ã転眮ã転眮ã§ãããã©ãããè¡šãåçŽãªããŒã«å€ã§ãã Covectorã¯AbstractArray
ãµãã¿ã€ãã§ã¯ãªãããšã«æ³šæããŠãã ããã ããã¯ããã£ã¹ããããåççã«æ©èœãããããã®éåžžã«åŒ·åãªèŠä»¶ã§ãã
RowVector
ãšåŒã¶ããšãã§ããŸãã ãšã«ããããã®æ¯ãèãã説æããããšãããšãã«æåã«çŽé¢ããåé¡ã¯ãã³ãã¯ãã«ã®åœ¢ç¶ã«ã€ããŠè©±ãæ¹æ³ã§ãïŒ size
ã¯æªå®çŸ©ã§ãïŒã (m,n)
ãè¡åã®åœ¢ç¶ã§ããå Žåã (m,)
ã¯ãã¯ãã«ã®åœ¢ç¶ãè¡šãããšãã§ããŸãâŠãããŠãã¿ãã«è¡šèšãä¹±çšããå Žåã圢ç¶ã(,n)
ããã«ã³ãã¯ãã«ãä¹±æŽã«èšè¿°ããããšãã§ããŸã(m,n) à (n,) â (m,)
(,m) Ã (m,n) â (,n)
(n,) Ã (,n) â (n,n)
(,n) à (n,) â α
ïŒã¹ã«ã©ãŒïŒããã§ã®äºé æŒç®ãšåã®æ°ã¯ãå®çŸ©ããå¿ èŠã®ããã¡ãœããã®æ°ã®å€§å¹ ãªçµã¿åããççºã«ã€ãªãããŸãâŠä¹ç®ã®ããã ãã«ïŒ
ãããã®æäœã®ããã€ãã¯ãè€æ°ã®ãã£ã¹ãããããã³ãã©ãŒã«ããã¯åäœãšããŸãé£æºããŸãããããã§ãåãªãã¬ãŒã¿ãŒã®ã¡ãœããã®æ°ã¯_èšå€§ã§ã_ã ããã§æ··åè¡å/ãã¯ãã«ã®ãµããŒããå®å šã«åé€ãããšãééããªãç©äºãåçŽåããã®ã«åœ¹ç«ã¡ãŸãã
A[1,:]
ã§ã³ãã¯ãã«ãè¿ãããšãã§ããŸãããäžè¬åãããŸãããããã¹ã©ã€ã¹ããéAbstractArrayãè¿ãã®ã¯ããªãå¥åŠã§ãã 人ã
ãïŒ13612ãè©ŠããŠããã¯ãã«ã®å
±åœ¹è»¢çœ®ãåé¡ãåŒãèµ·ããã±ãŒã¹ãå
·äœçã«æ¢ãããšãã§ããã°çŽ æŽãããã§ããããçŸåšã®ãã¯ãã«è»¢çœ®ã»ãã³ãã£ã¯ã¹ã§ãåæ§ã«æªããCovectorãå
¬éããå¿
èŠã¯ãããŸãããAx_mul_Bx
ãžã®ç¹å¥ãªè§£æã®ä»£ããã«çŽæ¥ãã£ã¹ãããã䜿çšããããšã¯å€§ããªåå©ã§ãã ããã¯BLASã®APIã§éåžžã«ããŸãæ§æãããŠããŸãã äžè¬ã«ãã¢ã«ãŽãªãºã ã®æãå
åŽã®ã¬ãã«ã§æŽ»çšãããã®ã§ããã®æ
å ±ãåŒæ°ãšãšãã«ä¿æããæ¹ãã¯ããã«çã«ããªã£ãŠããŸãã BLASåŒã³åºãã®å ŽåãåçŽãªé¢æ°ã䜿çšããŠè»¢çœ®æåïŒ ntc
ïŒãæ€çŽ¢ã§ããŸããv'v
ã¯ã¹ã«ã©ãŒãè¿ãããããã¯ãã«ãšå
±ãã¯ãã«éã®ä¹ç®ã¯çµåæ³åã«ãªããŸããã v'v*v
ãå·Šããå³ã«è©äŸ¡ãããããªãã¯ã¹ã®åœ¢æãåé¿ã§ããããã«ãªããŸãããT
ãšC
äž¡æ¹ãå®éã«å¶éãŸãã¯ãã£ããã£ããããšæãããšã¯ãã£ãã«ãããŸããAbstractArray{T}
ãšäžèŽããŸãã*
ã®ã¡ãœããããŒãã«ãèªã¿åãããšã¯ã ::Union{DenseArray{T<:Union{Complex{Float32},Complex{Float64},Float32,Float64},2},MatrixTranspose{C,T<:Union{Complex{Float32},Complex{Float64},Float32,Float64},A<:Union{DenseArray{T,1},DenseArray{T,2},SubArray{T,1,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD},SubArray{T,2,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD}}},SubArray{T<:Union{Complex{Float32},Complex{Float64},Float32,Float64},2,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD}}
ãããªã¿ã€ãã§ã¯éåžžã«å°é£ã§ãã 確ãã«ãç§ã¯ãããã¿ã€ããšã€ãªã¢ã¹ãšããŠäœæããŸãããããããã®ç°ãªãã¿ã€ããšã€ãªã¢ã¹åããã¹ãŠç®¡çããã ãã§ãé¢åã§ãïŒ StridedMatOrTrans
ã QRCompactWYQorTranspose
ãªã©ïŒãr[:]
ãŸãã¯r[1:end]
ã®çµæã¯äœã§ããïŒ ããã¯ãã¯ãã«ã§ããããããšãå
±ãã¯ãã«ã§ããïŒ ã§ããã°ããããå®çŸ©ããã«éããããšæããŸãã èå³æ·±ãããšã«ãMatlabã«ã¯ãè¡ãã¯ãã«ãä»ã®ãã¯ãã«ã§ã€ã³ããã¯ã¹ä»ãããããã®éåžžã«ç¹å¥ãªã«ãŒã«ããããŸããå¥åŠãªã³ãŒããŒã±ãŒã¹ãç ç²ã«ããŠãè¡æ§ãç¶æããããšéåžžã«åªåããŠããŸãïŒ r((1:end)')
ã¯r(1:end)
ã¯r(:)'
ïŒã ä»ã®ãšããããã©ã³ãã§ã¹ã«ã©ãŒã€ã³ããã¯ã¹ãå®çŸ©ããŠããŸããããããããããåé€ããå¿
èŠããããŸãã ããã«ãããCovectorã¯ããããèªèããŠããç·åœ¢ä»£æ°æŒç®ã§ã®ã¿äœ¿çšãããããšãæ確ã«ãªããŸããæåŸã«ãããã§èŠãå©ç¹ã®ã»ãšãã©ã¯ã MatrixTranspose
ã¿ã€ãèªäœã«ãåãããã«é©çšã§ããããšãææããããšæããŸãã ããã¯ãCovectorãæœè±¡ä»£æ°ãæ·±ãæãäžããŠããã¯ãã«/è¡åã®æ··åæŒç®ãæå¹ã«ããããšãªããéåžžã«ããŸãæ©èœããããšã瀺ããŠãããšæããŸãã ããã¯ç¢ºãã«çŽ æŽãããæ©èœïŒç·åœ¢ä»£æ°ãšäžè²«ããŠãã¯ãã«ã䜿çšããæ©èœïŒãè¿œå ããŸããããããè¿œå ã®è€éãã®äŸ¡å€ããããã©ããã¯ããããŸããã
奜å¥å¿ããã @ mbaumanããŸã èŠããŠããå ŽåãããŒã«ãã©ã¡ãŒã¿C
ãå°å
¥ããåæ©ã¯äœã§ããïŒ ããªãã¯ïŒç䌌ç¹æ§ã§ïŒãã æã€ããšã¯ã§ããŸãã
transpose(::Matrix) -> MatrixTranspose
transpose(::MatrixTranspose) -> Matrix
ïŒ ç§ã¯ããã§ããªãã®ïŒäŸå€çãªïŒå€æãçãããšã¯ãããŸããããã ãã©ã®ãããªèªèãããªãã«ããã匷å¶ããã®ããç解ãããã ãã§ãã
ããããããããPermutedDimensionArray
ã¿ã€ãã«äžè¬åããŠãé åããšã³ã³ãŒãããã¿ãã«ãã©ã¡ãŒã¿ãŒã䜿çšããããšãã§ããŸãã Covector
ã¿ã€ãã¯æããã«ç°ãªãç®çãæã£ãŠãããå¥ã®ãã®ã§ããå¿
èŠããããŸãã
å
±åœ¹è»¢çœ®ïŒããã³(A').'
é転眮å
±åœ¹é
åïŒãåŠçããæ¹æ³ãå¿
èŠã§ãã ãããè¡ãããã®3ã€ã®æçœãªæ¹æ³ããããŸãã
MatrixTranspose
åå
ã«ããŒã«ãã£ãŒã«ããšããŠå
±åœ¹ãæ ŒçŽããŸãã æ¯ãè¿ã£ãŠã¿ããšãããã¯ééããªãå€éšBLASãšã®ã€ã³ã¿ãŒãã§ãŒã¹ã«æé©ãªãªãã·ã§ã³ã ãšæããŸãã ãã ãããã€ãã£ãã®JuliaBLASã«é¢ããŠã¯ãJulia / LLVMãT.isconjugate ? conj(T[i,j]) : T[i,j]
ãã«ãŒãããåŒãäžããããšãã§ããããšã確èªããããšæããŸããAc_mul_Bt
ãå人ãä»ããŠå
±åœ¹æ§ã®ç䌌ãã£ã¹ããããè¡ã£ãŠãããšããäºå®ã«åœ±é¿ãåãããšæããŸãã ãŸããJuliaãå®è¡ã§ãããã©ã³ãåé€ã®æé©åã«ã€ããŠãã匷åãªä¿èšŒããããŸãã ããããç§ã¯ããã«ã€ããŠäžçæžåœèããŠããŸããã§ããâŠã¹ã±ããã®å®è£
ãå§ãããã£ãã ãã§ãCovectorã«ã€ããŠãã£ãšå¿é
ããŠããŸãããMatrixTranspose
ãšMatrixCTranspose
2ã€ã®ç°ãªãã¿ã€ãã åãã©ã¡ãŒã¿ãŒãšååã§ããã2ã€ã®å¥ã
ã®ã©ãããŒåãç
©ããããšæããŸãã æœè±¡ã¹ãŒããŒã¿ã€ããšãŠããªã³ãšã€ãªã¢ã¹ã圹ç«ã¡ãŸãããããã§ããã®ãªãã·ã§ã³ã§ã¯ãªããã©ã¡ãŒã¿ãŒãéžæããŸãã転眮åå ã«å€æé¢æ°ãæ ŒçŽããåä»ãé¢æ°ã®4çªç®ã®ãªãã·ã§ã³ããããšæããŸãããé¢æ°ãé«éåããã«ã¯åãã©ã¡ãŒã¿ãŒãå¿ èŠã§ããããããç°¡åã«ãã£ã¹ããããããªãåãã©ã¡ãŒã¿ãŒã§ãã
ConjugateView
ã©ãããŒã䜿çšã§ãããã©ããçåã«æããŸããã«ãŒã«conj
ãštranspose
䜿çšãããšã ConjugateView
ãMatrixTranspose
ã©ãããŒå
ã«é
眮ãããŸãã ã ã€ãŸãã A
a Matrix
å Žåã
A' = conj(transpose(A)) = transpose(conj(A))
ãã¹ãŠMatrixTranspose{ConjugateView{Matrix}}
çæããŸãïŒæ
å ±ã®ãªãã¿ã€ãã®ãã©ã¡ãŒã¿ãŒãåé€ããŸãïŒã
ãããããã§ãããããè³¢æã§ãã ç§ã¯å ±åœ¹è»¢çœ®ã1ã€ã®ååã®ããã®ããšèããåŸåãããã®ã§ããã®ãªãã·ã§ã³ãéããŸããã éå ±åœ¹è»¢çœ®ãã圢ç¶å€æŽã®ããã«ãç¹å¥ãªãµãé åã€ã³ããã¯ã¹ã¿ã€ãã§ã©ã®ããã«è¡šãããšãã§ããããèããŠããŸããã
çããããŸã ããã«åãçµãã§ãããŠããããã§ãïŒ ããã¯å£®å€§ãªã¹ã¬ããã§ãïŒ 3ã€ã®æ声!!!
ã¯ãã¹ãªã³ã¯https://github.com/JuliaLang/julia/pull/6837#issuecomment-213123832
ããã¯1.0ã§èšç»ãããŠããŸããïŒ
2ã€ã®åé¡ïŒïŒ18056ãïŒ18136ïŒã§ãç§ã¯ãã®å·šå€§ãªã¹ã¬ãããææãããŸããã
ã ããç§ã¯ãããè©ŠããŠã¿ãŸãã
ããã§ããžã¥ãªã¢ã¯çã®1次å
ãã¯ãã«ãæã¡ã_e.g._ mx[row,:]
ã¯ãã1xnè¡åã§ã¯ãããŸããã
ããã¯æè¿ãã¹ãå€æŽã§ãïŒ
ããããå¯äœçšãšããŠãããã€ãã®æ¢åã®åé¡ãããæçœã«ãªããŸããã
v*mx
ã1次å
ãã¯ãã«ã§ã¯æ©èœããªããšããäºå®ã«åãŸããŸããã
æ°åŠçã«ã¯ãèªç¶ã«æ©èœãã1次å
ãã¯ãã«ãè¿ãã¯ãã§ãã
äžè¬çãªa*b
補åãå¥çŽã«ãã£ãŠå®çŸ©ãããŠããå Žå
第1é
ã®æåŸã®ã€ã³ããã¯ã¹ãšç¬¬2é
ã®æåã®ã€ã³ããã¯ã¹ã
çŸåšãVector-Matrix補åã®ã¡ãœããã·ã°ããã£ã¯æ¬¡ã®ãšããã§ãã
(*)(A::AbstractVector, B::AbstractMatrix) = reshape(A,length(A),1)*B
ãããŠããã®æ¹æ³ãçšã«äœ¿çšãããŠããv*v'
å Žåãšãªãããã«v*mx
ã
ïŒãããææããŠããã@andreasnoackã«æè¬ããŸããïŒ
æããã«ãåäžã®æ¹æ³ãäž¡æ¹ã«äœ¿çšããããšã¯ã§ããŸããã
Juliaã¯Matlabã®ãããªããã€ãã®æ
£ç¿ã«èŠããã§ããããã§ãã
ããããMatlabã«ã¯ã1-dãã¯ãã«ã¯ãªãã1xnããã³nx1è¡åã®ã¿ããããŸãã
èªç¶ãªããšãããããããã®ã§ãããã§åé¡ãçºçããå¯èœæ§ããããŸãã
ãžã¥ãªã¢ã«ã¯çã®1-dãã¯ãã«ããããããã¯å€§ããªå©ç¹ã«ãªãã¯ãã§ãã
ããèªäœã®æ¬åœã«äžè²«ããç¶æ
ã«å°éããã®ã¯çŽ æŽãããããšã§ãã
ãã®å ŽåãFortranã¯ãåŸãã¹ãã¯ããã«åªãããããäžè²«æ§ã®ããäŸã§ãã
transpose
æŒç®ã¯ãFortranã®è¡åã«å¯ŸããŠã®ã¿å®çŸ©ãããŠããŸãã
çã®1-dãã¯ãã«ãã1xnè¡åãäœæããããšã¯ãåã«è»¢çœ®ã§ã¯ãããŸããã
matmul
ã«ã€ããŠã¯ãïŒ18056ã§åŒçšãããŠããã¡ããã«ã«ãã®æ¬ã®æç²ãåç
§ããŠãã ããã
@alanedelmanã®å ã ã®ãã€ã³ãã®ã»ãšãã©ã¯
ã ããããã«ããã€ãã®æ¢åã®åé¡ãåã«æ²»ãã§ãããææ¡ããããŸãã
çŸåšã®ç¶æ
ãå¯èœãªéãå°éããªããïŒ
v'
ããã®ãŸãŸä¿æããŸãv
rowmx
ããã³colmx
é¢æ°ã®æ¹ãåªããŠããŸããã v'
ã¯åºãããŠå€æŽã§ããŸããvec
é¢æ°ããã§ã«ãããŸãv'
ã®éæ°ã¯v''
ãªãvec(v')
ãç§ãã¡ã¯ãããšäžç·ã«æ®ããããšãã§ããŸãa*b
ã®è£œåã¯ãåžžã«æåŸã®ã€ã³ããã¯ã¹å¥çŽããå¿
èŠãããa
ãšã®æåã®ã€ã³ããã¯ã¹b
*
æŒç®åã¯ãå
ç©ã«ãå€ç©ã«ã䜿çšããªãã§ãã ããdot
é¢æ°ããããŸã*
ã®äœ¿çšãæé€ããå¿
èŠããããŸãïŒã€ãŸãã v*v'
æ§æïŒ[ã®ç°¡æœãªæ°åŠçæ§æ]ã®å€ç©ã倱ãããšã¯æ®å¿µãªããšã§ãã å人çã«vec * matãããããããã§ãã
æ¢åã®PernutedDimsArrayã¯ã芪ãšãã¥ãŒã®æ¬¡å æ°ãç°ãªãå Žåããã§ã«åŠçã§ããŸããïŒ ãããããªããå€åããã¯ãã¯ãã«ã®èŠªã®ããã«ããéå ±åœ¹è»¢çœ®ã©ãããŒã¿ã€ããšããŠãã§ã«äœ¿çšå¯èœã§ãã
ããã¥ã¡ã³ãã«PermutedDimsArrayãèŠã€ãããŸããã§ããã
ããããç§ã¯ãããã«å€ãã®ããŒã¿åãçºæãã代ããã«ã
3çš®é¡ã®ã¢ã¬ã€è£œåã®ã¿ãæ確ã«åé¢ããå¿
èŠããããŸãã
å
ç©ã¯ãã§ã«åé¢ãããŠããŸãã
éåžžã®è£œåãšå€ç©ãåé¢ããã ãã§æžã¿ãŸãã
å€ç©ã¯å€±ããããæ§æã®ã¿ãå€æŽãããŸãã
v*mx
å Žåã¯ãããæ·±å»ãªåé¡ã®å
åãšããŠã®ã¿èæ
®ããŠãã ããã
ãã¡ãœããã®æ¬ èœã®åé¡ããé€ãã°ãå¿é
ããå¿
èŠã®ããã¿ã€ãã§ã¯ãªãã .'
ãé
延ã©ãããŒã¿ã€ãïŒããã³'
è¿ãå®è£
ã®è©³çŽ°ã«ãªããŸãããã®å
±åœ¹ããŒãžã§ã³ïŒã ããã§ãªããã°ã vec*mat
ãšvec*vec'
äž¡æ¹ãåã*
æŒç®åã䜿çšããããšã¯ã§ããªããšæããŸãã è«æã§vec*mat
ãèŠãå Žåãããã¯ç§ã«ã¯ééã£ãŠããããã«èŠããŸããã vec*vec'
ããªãé »ç¹ã«èŠãããŸãã
ãããããã£ãšèããŠã¿ããšãPermutedDimsArrayã¯ãã®èŠçŽ ãé åã®é åã«ååž°çã«è»¢çœ®ããªãã®ã§ãããã§äœ¿çšããã©ãããŒåãšããŠã¯ããŸãé©ããŠããŸããã
ãã1ã€ã®æ¹æ³ã¯ããã¯ãã«è»¢çœ®ãå®å šã«çŠæ¢ããããšã§ãã ããã§ã®è°è«ã¯ãã§ã«åŸ¹åºããããŠãããšæããŸãã圱é¿ãã©ã®ããã«ãªãããè©äŸ¡ããããã«ãäžæ¹ãŸãã¯äž¡æ¹ã®ãªãã·ã§ã³ã®å æ¬çãªå®è£ ãåŸ ã£ãŠããŸãã
ãã®ã¹ã¬ãããçµããã«è¿ã¥ããŠããéãããªããè°è«ã®æºåãã§ããŠããããšã«æè¬ããŸãã
v*mx
ã¯å¥åŠã«èŠãããããããŸããããçµæ¶åŠçã³ãŒãã§é »ç¹ã«äœ¿çšãããŸãã
ãŸããFortranã®matmul
ã«ãã£ãŠé©åã«åŠçãããŸãã ïŒïŒ18056ãåç
§ïŒ
u*v'
補åã«æ»ããŸãã
u
ãšv
ãäž¡æ¹ãšãnx1è¡åã®å Žåãããã¯æ£èŠè¡åã®ç©ã§ãã
ããã¯ãå€ç©ãšåãçµæãæäŸããããšãããããŸãã
ããããããã¯å€ç©ããšãã¥ã¬ãŒãããããã«è¡åç©ã䜿çšããŠããã ãã§ãã
ããã¯ããã¹ãŠããããªãã¯ã¹ã§ããMatlabã®äžçã§ã¯ã·ãŒã ã¬ã¹ã§ãã
Juliaã«ã¯ãFortranã®äžçã«è¿ãçã®1次å
ãã¯ãã«ããããŸãã
ãžã¥ãªã¢ã§ã¯ã転眮ãã¯ãã«v'
ã¯ãã§ã«åé¡ã«ãªã£ãŠããŸãã
ä»ã®äººããžã¥ãªã¢ã«ãã§ã«ææ¡ããããã«ãFortranã®éžæã¯ãããçŠæ¢ããããšã§ãã
Fortranã«ã¯ãå€ç©ã®çµã¿èŸŒã¿é¢æ°ã¯ãããŸããã
ãžã¥ãªã¢ã¯v'
ã1xnè¡åã«ç°¡åã«å€æããŸãã
ãããŠã1-dãã¯ãã«ãš1xnè¡åã«å¯ŸããŠ*
æŒç®ãå®è¡ããŸãã
è€æ°ã®ãã£ã¹ããããããããããããè¡ãããšãã§ããŸãã
ããããããã§ã¯*
ã¯ç¢ºãã«ãã¯ãè¡åç©ã§ã¯ãããŸããã
FortranãšJuliaãåãããã«åäœãããã€ã³ã
ã©ã¡ããå
ç©ã«å¯ŸããŠåå¥ã®dot
é¢æ°ã䜿çšãããšããããšã§ãã
dot
ã*
æŒç®åã«ãã³ãã«ãããšããè°è«ããããŸããã
ããã幞ããªããšã«ããã¯èµ·ãããŸããã§ããã
ãããã£ãŠãç·åœ¢ä»£æ°ã®3ã€ã®ç©ãåŠçããå¿
èŠããããŸãã
éåžžã®è¡åç©ãå
ç©ãããã³å€ç©ã
çŸåšã *
æŒç®åã¯ãéåžžã®è£œåãšå€ç©ãçµã¿åãããæ§æã§ãã
ç§ãææ¡ããã®ã¯ãããããåé¢ããŠãããäžè²«ããç¶æ
ã«å°éããããšã ãã§ãã
ïŒãããå€ç©ãçç¥ããŸãããããã§ã«ååã«åé¢ãããŠããŸãïŒ
å ç©ãå€ç©ãããã³è¡åä¹ç®ã¯ãç©ãåå²/åé¡ããæ°åŠçã«é©åãªæ¹æ³ã§ã¯ãªããšæããŸãã 以äžã¯ç¢ºãã«æ§ã ãªäººãäžã§è¿°ã¹ãããšã®ç¹°ãè¿ãã§ããããã®ãããã¯ã®é·ããèãããšãæã èŠçŽãå«ããŠã倧äžå€«ã ãšæããŸãã ããã¯ç§ã®å人çãªèŠçŽã§ãããç§ã¯ç¢ºãã«å°é家ã§ã¯ãªãã®ã§ãééã£ãŠããå Žåã¯èšæ£ããŠãã ããã
æœè±¡ç·åœ¢ä»£æ°èšå®ã§ã¯ãäž»ãªãã¬ãŒã€ãŒã¯ãã¯ãã«v
ïŒãã¯ãã«ç©ºéV
äœãã§ããïŒãç·åœ¢ãããïŒ1ã€ã®ãã¯ãã«ç©ºéV
äœçšããããããç°ãªã空éW
ïŒãšãããã®ãããã®æ§æãç·åœ¢åœ¢åŒãŸãã¯å
±ãã¯ãã«ïŒãã¥ã¢ã«ç©ºéV*
äœã¿ã V
ããã¹ã«ã©ãŒãžã®ãããã³ã°ïŒãå
éšç©ïŒ V à V
ããkron
ïŒã å€ç©ç§ã¯ãã¯ãã«ãšå
±ãã¯ãã«ã®éã®ãã³ãœã«ç©ãšããŠèããããšã奜ã¿ãŸãã
ãã®åé¡ã§ç¹ã«èå³æ·±ãã®ã¯ãå
ç©ãå®çŸ©ãããŠããå Žåã®ãã¯ãã«ãšç·åœ¢åœ¢åŒã®éã®ååã§ããã€ãŸãããã¯ãã«v
ãã¹ã«ã©ãŒã«ãããã³ã°ãããã¹ãŠã®f
ã«å¯ŸããŠã w
ãååšããŸãããã®çµæã f(v) = dot(w,v)
ã®ä»»æã®ããã®v
ã ãã ããå
±ãã¯ãã«ã¯å
ç©ïŒå€æ¬¡å
é¢æ°ã®åŸé
ãªã©ïŒãåç
§ããã«ååšã§ããŸãã
ã³ã³ãã¥ãŒã¿ãŒäžã§ããããã¹ãŠã®ãªããžã§ã¯ããè¡šãã«ã¯ãéåžžãåºåºãéžæããè¡å代æ°ã䜿çšããŠãããã®ã»ãšãã©ãè¡šãããšãã§ããŸãã ã€ãŸããåŸç¶ã®ã·ã³ã°ã«ãã³æ¬¡å ïŒnx1è¡åãšããŠã®ãã¯ãã«ã1x1è¡åãšããŠã®ã¹ã«ã©ãŒãªã©ïŒã«æè»ã«å¯Ÿå¿ã§ããå Žåã«ã®ã¿ãè¡åã®ä¹ç®ãšè»¢çœ®ãå¿ èŠã«ãªããŸãã ããã¯Matlabã®èŠè§£ã§ãããç¹ã«æ°å€ç·åœ¢ä»£æ°ã§å€ãã®æ¬ãè«æãæžãããŠããæ¹æ³ã§ããããŸãã
ãã®å Žåããã¯ãã«ããå ±ãã¯ãã«ãžã®åè¿°ã®ååååïŒæé»çã«ãŠãŒã¯ãªããå ç©ãä»®å®ïŒã¯ããã¯ãã«ã®è¡åè¡šçŸã®è»¢çœ®ïŒè€çŽ æ°ã®å Žåã¯ãšã«ããŒãå ±åœ¹ïŒãåãããšã«å¯Ÿå¿ããŸãã ãã ããæœè±¡çãªæå³ã§ã¯ããã¯ãã«ã®è»¢çœ®ã®æŠå¿µã¯ãããŸããããããã @ GaborOszlanyiã§è¿°ã¹ãããŠããããã«ãFortranã§å®çŸ©ãããŠããªãçç±
Juliaã³ãŒãã§ã¯åã®å®å®æ§ãéèŠã§ãããããMatlabã®ãå¯äžã®è¡åãïŒæè»ãªæ«å°Ÿã®ã·ã³ã°ã«ãã³æ¬¡å
ã䜿çšïŒã¢ãããŒãã¯ããŸãæ©èœããŸããã ããããå®å
šã«æœè±¡çãªèšå®ã«ç§»è¡ããŠãéåžžã®èšå®ïŒãŠãŒã¯ãªããå
ç©ããã¯ãã«ããã³ãã¯ãã«ãžã®ç°¡åãªãããã³ã°ãªã©ïŒã§äœæ¥ãç¶ãããããããŸããã æçµçã«ã³ãŒããèšè¿°ããASCIIæåã䜿çšãããã®ã§ãèšå·*
ã '
ãããã³.'
ããå¯èœãªéãçµãåºãå¿
èŠããããŸãã 幞ããªããšã«ãããã¯è€æ°ã®ãã£ã¹ãããã圹ç«ã€å Žæã§ãããäžèšã®ããŸããŸãªææ¡ã«ã€ãªãããŸãã ããã«ã€ããŠãã€ãŸããæœè±¡çãªç·åœ¢ä»£æ°æŒç®ãç¹å®ã®ãžã¥ãªã¢ã¡ãœããïŒé¢æ°ã§ã¯ãªãïŒã«ã©ã®ããã«å€æããããã«ã€ããŠè¡šãäœæããŸããã
@GaborOszlanyiãžã®æåŸã®ã¡ã¢ãšããŠãç§ã¯ãŸã ããããã¹ãŠã«v*A
ã®å ŽæãèŠã€ããããŸããã ããã¯ããã¯ãã«ãããã©ã«ãã§è¡è¡åãšããŠç€ºããããã£ãŒã«ãã§ã¯æšæºçãªå ŽåããããŸãããå人çã«ã¯ããã¯å¥åŠãªéžæã ãšæããŸãã ç·åœ¢ååf
ãšg
ãf(v) = v*A
ãšg(v) = v*B
ãšããŠæ©èœããå Žåãããã¯g(f(v)) = (g ⊠f)(v) = v*A*B
ãæå³ããŸãã亀æãããŸãã ãªã³ã¯ãããããŒãã«ã®æåŸãã2çªç®ã®è¡ã®ããã«ããããäžå®å
šãªå
ç©ãšããŠè§£éã§ããŸãã
ããªãã®èŠçŽã¯æ·±ããŠèª¬åŸåããããŸãã
ãã説æããŠããã ãããããšãããããŸãã
æ®ãã®è³ªåã¯2ã€ã ãã§ãã
v*mx
ã«matmul
v*mx
ãå®è£
ããã®ã§ããïŒãã®åé¡ã«ãã£ãŠæããã«ãªã2ã€ã®åé¡ããããŸãã
A.å¿çšæ°åŠè ã¯ã2ã€ã®èªç¶ãªååååãæé»çã«å©çšããããŠã¹ãã«ããŒè¡šèšæ³ã«çžãããŠããŸãã
åé¡ã¯ããããã®ååååã®ã©ã¡ããJuliaã®åã§è¡šçŸããã®ãèªç¶ã§ã¯ãªããã©ã¡ããé å圢ç¶ã®å®è¡æãã§ãã¯ã䌎ãããšã§ãã MATLABã®åŸç¶ã®ã·ã³ã°ã«ãã³æ¬¡å ã«ãŒã«ã¯ããããã®ååã®äž¡æ¹ã®å®è£ ãšèããããšãã§ããŸãã
B. 2次å é åã¯ãé åã®é åãšããŠååž°çã«å®çŸ©ã§ããŸãã ãã ããè¡åã¯åã®è¡ãŸãã¯è¡ã®åã§ãããè¡ã®è¡ãŸãã¯åã®åã§ã¯ãããŸããã è¡åãååž°çã«å®çŸ©ã§ããªããšããäºå®ã¯ãè¡åãšn次å é åã®ç°ãªããã³ãœã«æ§é ã匷調ããŠããŸãã æ£ããèšãã°ãå€æ¬¡å é åã¯éåžžã«éãããçš®é¡ã®ãã³ãœã«ã§ãããåŸè ãå®è£ ããããã«å¿ èŠãªå®å šãªæ©æ§ãæ¬ ããŠããŸãã å³å¯ã«èšãã°ãçž®çŽã¯ãã¯ãã«ç©ºéãšãã®å察ã®ãã¢ã«å¯Ÿããæäœã§ãããããå察ãã¯ãã«ç©ºéã®æŠå¿µãåŒã³åºãããšã®ãªãå€æ¬¡å é åã®ã€ã³ããã¯ã¹ã®çž®çŽã«ã€ããŠè©±ãã®ã¯èª€ã£ãåŒã³æ¹ã§ãã ã»ãšãã©ã®äººã¯å®å šãªæ©æ¢°ãæãã§ããŸãããããã«ã¯ãè¡/åã®æ§è³ªãæã€å ±å€æ§/åå€ãŸãã¯äž/äžã®ã€ã³ããã¯ã¹ã«ã€ããŠå¿é ããå¿ èŠããããŸãã 代ããã«ãã»ãšãã©ã®äººã¯ãé åããã¹ãŠã®æ¬¡å ã§å®å šã«éå€ã§ããã_2次å ãé€ããŠ_ã2次å é åãè¡åã®ä»£æ°ïŒããŠã³ã¢ãããã³ãœã«ïŒãæã€ãã®ãšèããããšèããŠããŸããããŠã³ããŠã³ãã¢ããã¢ããããŸãã¯ã¢ããããŠã³ãã³ãœã«ã èšãæããã°ã2次å é åã¯ç¹æ®ãªã±ãŒã¹ã«ãªãããã®ã§ãã
ããã§ãªããã°ç§ã¯ãŸã 説åŸãããå¯èœæ§ããããŸããããããç§ã®çŸåšã®3éšæ§æã®ææ¡ã§ãïŒ
aïŒãã¯ãã«ã®è»¢çœ®ãå®å
šã«çŠæ¢ãã u'v
ã u*v'
ã u'*A*v
ã u'*A*v/u'v
ãªã©ã®ããŠã¹ãã«ããŒã¹ã¿ã€ã«ã®åŒãäœæããããã«ããŠãŒã¶ãŒããã¯ãã«ãåè¡åã«æ瀺çã«å€æããå¿
èŠãããu
ãšv
ãçã®ãã¯ãã«ã§ããå Žåãç¹å¥ãªTransposedVector
ãå°å
¥ããã«u'
ãu'*A
ãããªéšååŒãäžããããšã¯ã§ããŸããã TransposedVector
ã¿ã€ããè«ççåž°çµãšããŠãå€æ¬¡å
é
åããã³ãœã«æ§é ã®ã¢ãã/ããŠã³ã€ã³ããã¯ã¹ã«ã€ããŠå¿é
ããå¿
èŠããããŸããããã¯ãæ¯æãã«ã¯é«ãããããã§ãã
ïŒaïŒã®å¶éã¯ããã¹ãŠã®Householderã¹ã¿ã€ã«ã®åŒãçã®ã¹ã«ã©ãŒã®ä»£ããã«1x1è¡åãçæããããšã§ãïŒããã¯ã1ãã¯ãã«ãè¿ãu'v
ããã倧å¹
ã«æ¹åãããŠããŸãïŒããããã£ãŠã (u'*v)*w
ãããªåŒã¯
bïŒæ¬¡ã®ãããªãã¯ãã«ã«å¯Ÿããé¡äŒŒã®æŒç®ã®ä»£æ¿è¡šèšæ³ãå°å ¥ããŸãã
u â
v = scalarize(columnify(u)'*columnify(v))
u â v = columnify(u)*columnify(v)'
A(u, v) = scalarize(columnify(u)'*A*columnify(v))
ãåç·åœ¢åœ¢åŒã®å€ãè¡šèšA(u) = A(u, u)
ïŒbïŒã®åŒã¯ãå ç©ããã³åç·åœ¢/äºæ¬¡åœ¢åŒã®åŒãèªåçã«ã¹ã«ã©ãŒåããããšã«ãããïŒaïŒã®åŒãšã¯ç°ãªãã1x1è¡åã®åœ¢æãåé¿ããŸãã
cïŒ1x1è¡åãçã®ã¹ã«ã©ãŒã«å€æã§ããããã«ããŠã次ã®ãããªã³ãŒããäœæããŸãã
M = Array(Int, 1, 1, 1)
a::Int = M
åäœããå¯èœæ§ããããŸãã å¿ èŠãªã®ã¯ã次ã®ãããªé åãµã€ãºã®å®è¡æãã§ãã¯ãè¡ãããšã ãã§ãã
function convert{T}(::Type{T}, A::Array{T,N})
if length(A) == 1
return A[1]
else
error()
end
end
ãã®ææ¡ã¯ãçŽ2幎åã«FolkmarBornemannã«ãã£ãŠææ¡ããããã®ãå°ãå€æŽãããã®ã§ãã ç§ãã¡ãè©Šãããšãããå®è¡æãã§ãã¯ã®ã³ã¹ãã¯ããã»ã©å€§ãããªããäžè¬çãªå²ãåœãŠã§ã¯ãªããå匷å¶å²ãåœãŠïŒå®éã«ã¯convert
åœè£
åŒã³åºãïŒã§ã®ã¿åŒã³åºãããŸããã
@jiahao ããã®æçš¿ã®èªã¿ãããã¯ãã¬ã³ããªã³ã°ãé£ããæåã«ãã£ãŠå¶éãããŠããŸãã éåžžããã©ã³ãã«ã»ãŒå®å šã«Unicodeãå«ãŸããŠããOSXã§ã¯æ£ãã衚瀺ãããŸããã
@jiahao ãç§ã¯ç¢ºãã«ãã®ã»ãšãã©/ãã¹ãŠã«åæããããšãã§ã
ç¹å¥ãª
TransposedVector
ã¿ã€ããå°å ¥ããã«ãè«ççåž°çµãšããŠãå€æ¬¡å é åããã³ãœã«æ§é ã®ã¢ãã/ããŠã³ã€ã³ããã¯ã¹ã«ã€ããŠå¿é ããå¿ èŠããããŸããããã¯é«ããããšæãããŸãã
ããªãããããå Žåã«ã®ã¿ãç§ã«ã¯è«ççåž°çµã TransposedVector
ã®ãµãã¿ã€ãAbstractArray
ç§ã¯èšç»ã§ã¯ãªãã£ããšä»®å®éå±€ãïŒããã€ãã®ãšã¯ç°ãªãã LazyTranspose
çã®ã¿ã€ãã©ã®ã¯å¥ã®çš®é¡ã®AbstractMatrix
ïŒã
ã¢ãŠã¿ãŒïŒã¯ãããã«ãŒïŒç©ã®
u â v
æé»ã®ååååã«äŸåãããè¡åæŒç®ããã¯ãã«æŒç®ãããæœè±¡çãªç©ãããããã«åé¢ããããšãç®æšã§ããå Žåãããã¯æ¬¡ã®çç±ã§å€±æãããšæããŸãïŒæ¬¡ã®æ°åŠçå®çŸ©ã«é¢ããæ®éçãªåæã«ã€ããŠã¯ããããŸããïŒã
A â B
ã¯ããã¯ãã«ã§ã¯ãªãè¡åã§å®çŸ©ãããæŒç®ã§ããu â v
ã2ã€ã®ãã¯ãã«ã®ãã³ãœã«ç©ãšããŠèªã¿åã代ããã«ãããã«ãããããŠã³ããŠã³ã¿ã€ãã®2次å
ãã³ãœã«ãçæãããŸãã é©åãªãè¡åããååŸããå¯äžã®æ¹æ³ã¯ããã¯ãã«ãšã³ãã¯ãã«ã®ãã³ãœã«ç©ãåãããšã§ãã ãããããããã®ãªããžã§ã¯ãã®å°å
¥ãé¿ãããã®ã§ãé¢ä¿ãã2ã€ã®ãã¯ãã«ãååããåã«ãã®æäœã®çµæãååŸããããšã¯äžå¯èœã®ããã§ããu â v
ã®3çªç®ã®ååã¯ãéåžžã¯ã ãããªãå®çŸ©ãããŠããå€ç©ã§ãããäžäžã«é¢ããŠåãå
¥ããããŠããå³å¯ãªå®çŸ©ããããã©ããã¯ããããŸããã äžéšã®æ
å ±æºã¯ã2ã€ã®ãã¯ãã«ã®ãã³ãœã«ç©ãã€ãŸãåã®ãã€ã³ããšåçã§ãããšè¿°ã¹ãŠããŸãã 代ããã«ããå€ç©ãã2çªç®ã®ãã¯ãã«ãã³ãã¯ãã«ã«æé»çã«ãããã³ã°ããŠããŠã³ã¢ãããã³ãœã«ãååŸããããšãæå³ããå®çŸ©ãåãå
¥ããå Žåãåé¡ã¯ãããŸããã代ããã«ãã»ãšãã©ã®äººã¯ãé åãåçŽãªå€ãã³ã³ãããŒã«ãã2次å ãé€ããã¹ãŠã®æ¬¡å ã§å®å šã«åå€ã«ããããšãæãã§ããŸãã
æ žã®éžæè¢ãæ€èšããŸãããïŒ ç·åœ¢ä»£æ°ãæåããããçŽãã AbstractVector
ãšAbstractMatrix
ã®åãšã€ãªã¢ã¹ãå®å
šã«åé€ããŠã次ã®ããã«çœ®ãæããŸãã
abstract AbstractVector{T} <: AbstractArray{T,1}
abstract AbstractMatrix{T} <: AbstractArray{T,2}
# and we could introduce:
abstract AbstractCoVector{T} <: AbstractArray{T,1}
ãã©ãŒã«ã¢ãŠããããããããããšã¯ç解ããŠããŸãããå€æ¬¡å
ã¹ãã¬ãŒãžé
åãšç·åœ¢ä»£æ°ãæ確ã«åé¢ãããå¯èœæ§ããããŸãã å®å
šãªå€æ¬¡å
ãã³ãœã«ä»£æ°ãå察ãã¯ãã«ç©ºéãªã©ãå®è£
ããå¿
èŠã¯ãããŸããããã¯ãã«ãå
±ãã¯ãã«ãè¡åãªã©ãå€ãã®äººãå¿
èŠãšããããããå®è£
ããå¿
èŠããããŸãã å
ç©ãå€ç©ãcovector-matrix補åãmatrix-vector補åãmatrix-matrix補åãååŸããŸãã 転眮ã¯ãäžèšã®ãã¹ãŠã§å®çŸ©ãããŠããŸãã 1Dé
åã®1Dé
åãå®éã«äœ¿çšããAbstractMatrix
å®è£
ãäœæã§ããŸãïŒãã¡ãããããã©ã«ãã®å®è£
ã§ã¯ãããŸããïŒã Householderè¡šèšïŒIMHOã¯MATLABã®åŒ±ç¹ã®1ã€ã§ãïŒïŒã䜿çšããå¿
èŠã¯ãããŸããããç·åœ¢ä»£æ°ã®ãã¹ãŠã®äŸ¿å©ããåŸãããšãã§ããŸãã
ãããææ¡ããã®ã¯å°ãç·åŒµããŸããããžã¥ãªã¢ã¯ãããŠã¹ãã«ããŒã®æ
£ç¿ã«ãã©ãŒã«ããã¯ããå¿
èŠãªãã«ãã»ãšãã©ã®äººã倧åŠã¬ãã«ã®ç·åœ¢ä»£æ°ãªã©ã§åŠã¶ããšã®ãæ£ãããã¢ãã«ãæš¡å£ã§ãããšæããŸãã æ確ã«åºå¥ããããšã§ã Base.LinAlg
ããæšæºã©ã€ãã©ãªãããã±ãŒãžã«ç§»åããã®ãç°¡åã«ãªããããããŸãããããã¯Juliaã®é·æçãªç®æšã ãšæããŸããïŒ ãŸããæ°ãã1Dãµã€ãºå€æŽå¯èœãªãªã¹ãã®ãããªãã®ãæ°ããBuffer
å€æŽãšArray
ãã€ãã£ãå®è£
ã«ä»å±ãããšããèããšãããäžèŽããããããã®äžè¬çãªããªã¹ããã¿ã€ãJuliaã®ã³ã¢éšåã®å€ãã§Vector
ã眮ãæããããšãã§ãã Array
ãšããªã¹ãããããªãæ©ãå®çŸ©ããªããã LinAlg
ããã±ãŒãžãããªãé
ãããŒãã§ããŸãã
ãã§ã«ãããã³ã°ããŠã³ããããŠãããé©åãªç·åœ¢ä»£æ°ã§ã¯ãªããFortrané åã§è¡šçŸãããŠããã¢ã«ãŽãªãºã ãå€æ°ååšããŸãã Juliaã¯ãå€æ¬¡å é åã®äžã«ç·åœ¢ä»£æ°æ§é ãåçºèŠïŒãŸãã¯åŒ·å¶ïŒããå¿ èŠãªãã«ããããã®ã¢ã«ãŽãªãºã ãå®è£ ã§ããå¿ èŠããããŸãã
ç§ã®ä»äºã§ã¯ããã³ãœã«ãå
±å€æ§ãšåå€ã®ã€ã³ããã¯ã¹ãªã©ãFortrané
åã«ãããã³ã°ããé©åãªç·åœ¢ä»£æ°ãããããæé©ã§ãã ãã®äœæ¥ãè¡ãããã«ããããŠäººã
ãæ··ä¹±ãããªãããã«ãç§ã¯ããã¯ãã«ããããããªãã¯ã¹ãããé
åããšããçšèªããã®ãŸãŸã«ããŠãããããäœã¬ãã«ã«ä¿ã¡ãä»ã®ïŒãã掟æãªïŒïŒçšèªããã¹ãŠã®é«ã¬ãã«ã«äœ¿çšããŸãã äžèšã®äžäœã¬ãã«ã¯ãæœè±¡åãŸãã¯ãã©ã¡ãŒã¿ãŒåã®ãããããä»ããŠãã¹ãã¬ãŒãžãªãã·ã§ã³ãæœè±¡åããå¿
èŠããããŸãã ãã¶ããæ¥é èŸLA
ã¯ããããè¡šçŸããæ¹æ³ã§ãã
LA.Vector
LA.CoVector
LA.Tensor{... describing co/contravariance of indices ...}
次ã«ããã¯ãã«ãšè¡åã¯çŽç²ã«ã¹ãã¬ãŒãžã«äœ¿çšãããŸãã äœã¬ãã«ã§ã¯ã転眮ã¯æåã§ç®¡çãããŸãïŒBLASãšåãïŒã é«ã¬ãã«ã§ã¯ãèªåçã«åŠçãããŸãã
ããã¯ãäžäœäºææ§ãå£ãããMatlab / Fortran / numpy convertã®æåŸ ãå£ããªãããšãé€ããŠã @ andyferrisã®ææ¡ã«è¿ããã®
@eschnettãã®ã¹ã¬ããã®ååã§ãããŒã¹ã®Juliaã§ã¯ãªããå€éç·åœ¢ä»£æ°ãããã±ãŒãžã«æ®ãããšã決å®ããããšæããŸãã ããªããææ¡ãããããªãããã®ã¢ã€ãã¢ã®å€ãã¯ãåã·ã¹ãã å ã®ãã³ãœã«ããã¯ãã«ç©ºéãå ±/éåæ£ãªã©ãæ±ãæ°ããããã±ãŒãžã§å ·äœåã§ãããšæããŸããããã¯ã䟿å©ãªé¢æ°ãæäŸãã_TensorOperations.jl_ããã±ãŒãžãšã¯å€å°ç°ãªããŸãããã³ãœã«ã§ãããã®ããã«é åãä¹ç®ããŸãã éçºããã®ã¯é£ãããšæããŸãããæœåšçã«äŸ¡å€ã®ããæœè±¡åã§ãïŒ
Matrix
ãšVector
ããã®ãŸãŸã«ããŠããããšã«é¢ããŠã¯ãããããçŸåšã®å®çŸ©ã¯å®ç§ã§ããããæšæºçãªæ°åŠã䜿çšããŠè¡åãä¹ç®ãããã¯ãã«ã転眮ããã人ã
ã®ããã«ç§ãã¡ãã§ããããè¯ãäœãããããããããŸããè¡šèšã ã·ã¹ãã ãæçœã§éåŒã§ãããä»ã®èšèªã§ã®_æ¹å_ã§ããã°ãç°¡åã«ç¿åŸã§ããã¯ãã§ãããæ°ãããŠãŒã¶ãŒã«å°ããªåŠç¿æ²ç·ãè¿œå ããå¯èœæ§ããããšæããŸãã
äžè¬çãªéãŠãŒã¯ãªããè€çŽ ãã¯ãã«ç©ºéV
ã¯ã V
ã conj(V)
ã dual(V)
ã conj(dual(V))
4ã€ã®é¢é£ç©ºéãããããšã«æ³šæããŠãã ããã ãããã£ãŠãäžè¬çãªãã³ãœã«ã«ã¯4çš®é¡ã®ã€ã³ããã¯ã¹ããããŸãïŒéåžžãäžãŸãã¯äžãçŠæ¢ãŸãã¯çŠæ¢ãªããšããŠç€ºãããŸãïŒã è€éãªãŠãŒã¯ãªãã空éïŒéåååŠãªã©ïŒã§ã¯ã dual(V) â¡ conj(V)
ãšconj(dual(V)) = V
ã å®éã®ïŒéãŠãŒã¯ãªããïŒç©ºéïŒäžè¬çžå¯Ÿæ§çè«ãªã©ïŒã§ã¯ã V â¡ conj(V)
ã åŸè
ã®å Žåã®äž¡æ¹ã§ãã¢ããã€ã³ããã¯ã¹ãšããŠã³ã€ã³ããã¯ã¹ã®ã¿ãå¿
èŠã§ãã
å®éã®ãŠãŒã¯ãªãã空éïŒã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ïŒïŒã§ã¯ããããã¯ãã¹ãŠåçã§ããããã³ãœã«ãè¡šãã«ã¯ãžã¥ãªã¢ã®åçŽãªé åã§ååã§ãã ãããã£ãŠãå°ãªããšãå®æ°ã®å Žåã次ã®2ã€ã®æäœã«ãããå®å šã§äžè²«æ§ã®ãããã³ãœã«ä»£æ°ãæ§ç¯ã§ããŸãã
â
ãããã¯ã次ã®ã«ãŒã«ã䜿çšããŠã©ã³ã¯N
ä»»æã®é
åã«äžè¬åã§ããŸããæåã®é
åã®æåŸã®ã€ã³ããã¯ã¹ã2çªç®ã®é
åã®æåã®ã€ã³ããã¯ã¹ïŒãŸãã¯numpyã®dot
èŠåã§ãããçŽæçã§ã¯ãããŸããïŒã A
ãšB
ã©ã³ã¯ãM
å Žåã A â B
ã¯ã©ã³ã¯M+N-2
é
åãè¿ããŸãã M
ããã³ã©ã³ã¯N
ãâ
ïŒ A â B
ã¯ã©ã³ã¯N+M
é
åãè¿ããŸããã¯ãã«v
ã w
ããã³è¡åA
ã B
ã«ç¹åããŠããããã次ã®ãã¹ãŠãèšè¿°ã§ããŸãã
v â w
->äŸå€çã«ãã©ã³ã¯0ã®é
åã§ã¯ãªãã¹ã«ã©ãŒãè¿ããŸãA â v
A â B
v â w
v â A
â
ã«*
ã䜿çšãããå ŽåããããŸãããèœãšãç©Žã¯ãäžèšã®â
å®çŸ©ãçµåçã§ã¯ãªãããšã§ãã (A â v) â w â A â (v â w)
ã¯ãåŸè
ã§ããªãããã§ããå®çŸ©ãããŸãã
ããããç¹°ãè¿ãã«ãªããŸãããããã¯ãè€éãªé åãç¡èŠããŠãæ§ããªããšæã£ãŠããå Žåã«éããŸãã
ãã³ãœã«ã®å®å šã«äžè¬çãªå®è£ ã«é¢ããŠã¯ãã¹ã¿ãã¯ã«å²ãåœãŠãããã¿ãã«ãçæãããé¢æ°ãããã³ããããä»æ¥ãããããå®çŸå¯èœã«ããä»ã®ãã¹ãŠã®æ©èœãååšããåã«ãç§ã¯ããããã£ãšåã«éå§ïŒããã³æŸæ£ïŒããŸããã
èå³æ·±ãã¢ãããŒãã@ Juthoã ååçŽæçã«æããŸãã *
ãš'
ã§äœããããã«é¢ä¿ãªãããããã®å®çŸ©ãè¿œå ã§ãããšç§ã¯_æšæž¬_ããŠãããããããµããŒãããŸãã
ããããç¹°ãè¿ãã«ãªããŸãããããã¯ãè€éãªé åãç¡èŠããŠãæ§ããªããšæã£ãŠããå Žåã«éããŸãã
æåã§æ¿å
¥ãããconj()
ä¿®æ£ããŸãã ãããŠããžã¥ãªã¢ã¯è€éãªè¡åãç¡èŠããããšã¯æããªãã§ãããïŒ
AbstractMatrix
ãã¿ã€ããšã€ãªã¢ã¹ã§ã¯ãªãç¹å¥ãªãµãã¿ã€ããšããŠäœ¿çšããããšã«ã€ããŠãããã«ããã€ãæ°ã¥ããŸããã
matrix[:,i]
-> AbstractVector{T}
matrix[i,:]
-> AbstractCoVector{T}
array_2d[:,i]
-> AbstractArray{T,1}
array_2d[i,:]
-> AbstractArray{T,1}
ããã¯ããªãã¯ãŒã«ã§ã-è¡åã®ã€ã³ããã¯ã¹ããåãšè¡ã®ãã¯ãã«ãååŸã§ããŸãã 2Dã¹ãã¬ãŒãžã³ã³ããã®å Žåã¯ã1Dã¹ãã¬ãŒãžã¢ã¬ã€ãååŸããŸãã ãã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ãã«ããŒããå¿
èŠããããŸãïŒ ãŸãã AbstractVector{T} <: AbstractArray{T,1}
ãšAbstractCoVector{T} <: AbstractArray{T,1}
äž¡æ¹ããããããAPLã¹ã©ã€ã·ã³ã°ã«ãŒã«ã䜿çšããAbstractArray
ã€ã³ã¿ãŒãã§ã€ã¹ã«åŸããŸãã
1ã€ã®ãèå³æ·±ããäºå®ã¯
array_3d[:,:,i]
-> AbstractArray{T,2}
matrix(array_3d[:,:,i])
-> `AbstractMatrix {T}
ãã®ãããçµæãè¡åä¹ç®ããå Žåã¯ãæåã§è¡åãšããŠã©ããããå¿ èŠããããŸãã ããã¯ãã©ã¹ããã€ãã¹ããããããŸããã ããããããã¯æœåšçãªåé¡ã®1ã€ã§ããããã«æãããã¹ãã¬ãŒãžãšç·åœ¢ä»£æ°ãæ··åããä»ã®èšèªã®ãŠãŒã¶ãŒãç°¡åã«äœ¿çšã§ããããã«ããããšã«ã€ããŠ
ããã¯ã°ããã質åãããããŸãããã @ juthoã¯ãã³ãŒãã®èšè¿°ã¯ASCIIã«ãã£ãŠå¶éãããŠãããšåè¿°ããŸããã ãªãäžçã§ã1963幎ã«éçºããã1986幎ïŒ30幎åïŒã«æåŸã«æŽæ°ããã7ãããã®æåã»ããã«å¶éãããŠããã®ã§ããããã ããã¯ãæåãª640KBã1981幎ã«PCã§å©çšå¯èœãªæ倧RAMã§ãã£ãæ代ã§ãããä»æ¥ã®ã³ã³ãã¥ãŒã¿ãŒåžå Žã§ã¯ãçŸåšã32GBã®RAMïŒä»¥åã®æ倧å€ã®50,000åïŒãåãã64ãããããã»ããµãäžè¬çã«è²©å£²ãããŠããŸãã 64ãããããã»ããµã®çè«äžã®å¶éã ã§ã¯ããªã40幎åã«éçºãããæåã»ããã«éå®ããŠããã®ã§ããããã
ãŠãã³ãŒãã䜿çšã§ããŸãããæ®å¿µãªãããããŒããŒãã®ãµã€ãºã¯éå»40幎éãéåžžã®äººãæã£ãŠããæã®æ°ïŒéå»10000幎以äžïŒãåæ§ã®èŠå ã§æ¡å€§ããªãã£ãããšãèŠããŠãããŠãã ããã
ç§èŠãASCIIã¯äŒãŸããå¿ èŠããããŸãã é«éãªæ°åŠã·ã³ãã«ããã°ã©ãã³ã°ã®ããã®ç¹å¥ãªæ°åŠããŒããŒãã¯ãå®éã«ã¯è¯ãèãã§ãïŒ UTFã«ä»å±ããã·ã³ãã«ããã以äžäœ¿çšããªãæ£åœãªçç±ã¯ãããŸããïŒ ASCIIããå¯èœãªéããã¹ãŠãæŸãåºãããšããèŠçãæ£åœåã§ããŸããïŒ
@ esd100 ïŒãã®ãããªéåžžã«ææ©çãªè°è«ã«ã¯ããã®GitHubã®åé¡ã䜿çšããªãã§ãã ããã
@Johnmyleswhiteã ãææ©çããšã¯ã©ãããæå³ãããããŸããã ãããããªãã䜿ãã€ããã ã£ãèšèã ãšç¢ºä¿¡ããŠããŸããïŒ èšèªãæŒç®åãæ©èœã¯äœ¿çšãããŠããèšå·ã«é¢é£ããŠããããã«èŠããã®ã§ãASCIIãšä»ã®äœãã®äœ¿çšãè°è«ã«é¢é£ããŠãããšæããŸããã ç§ã¯æ±ºããŠå°é家ã§ã¯ãããŸãããã察åŠãããŠããæ©èœã«é¢é£ããŠè°è«ããããå°ãªããšãæ確ã«ããããšã«é¢ããåé¡ã®ããã§ãã
ã€ãŸããèšèªãåžæã©ããã«å®çŸ©ã§ããªãçç±ã¯ãããŸããïŒåºæ¬çãªç®æšã§ãã䜿ãããããé床ã念é ã«çœ®ããŠïŒïŒ ç¹å¥ãªèšå·/åèªã䜿çšãããšãèšèªãããè±ãã§çŸãããªããŸãããïŒ
ïŒ2ã€ã®Unicodeã®èšå·ã䜿çšããŠïŒäŸãã°@Juthoããã®ææ°ã®ã³ã¡ã³ãã奜è©ãš@yuyichaoã¯ãæã ã¯Unicodeã䜿çšã§ããããšã«åæããããš@ ESD100ããŠãã ããããŒãã ããå€ãã®Unicodeã®ã¿ã®æŒç®åãå°å ¥ããããšã«ã€ããŠã®ä»ã®ææ¡ããããŸãïŒäŸãã°ãé¢æ°ãæ§æããããã®æ§æèšå·ãïŒ17184ïŒã 人ã ãããªãã«å察ããŠãããšã¯æããŸãããïŒç§ãã¡ã¯å¿ã«çããŠããã¹ãå®éçãªèæ ®äºé ããããŸããïŒãããªãã_ç¹å®ã®_ããããã¯ã«é¢ããææ¡ãããå Žåã¯ç§ãã¡ã«ç¥ãããŠãã ããã
v0.5
ã§ã®ãã®æ°ããåäœã«å°ãæ··ä¹±ããŠããŸããããã¯ããã®è°è«ããçãããšæããŸãã
julia> [ x for x in 1:4 ]' # this is fine
1Ã4 Array{Int64,2}:
1 2 3 4
julia> [ Symbol(x) for x in 1:4 ]' # bit this isn't? What is special about symbols?
WARNING: the no-op `transpose` fallback is deprecated, and no more specific
`transpose` method for Symbol exists. Consider `permutedims(x, [2, 1])` or writing
a specific `transpose(x::Symbol)` method if appropriate.
ãªã¹ãå å è¡šèšããïŒæ°å€ä»¥å€ã®ïŒè¡ãã¯ãã«ãäœæããã«ã¯ã©ãããã°ããã§ããïŒ è¡ãã¯ãã«ã§ããå¿ èŠããããŸãã ïŒããã¯å¥ã®åé¡ãšããŠããŸãã¯ä»ã®å Žæã§è°è«ããæ¹ãè¯ãã§ããããïŒã©ãã«æçš¿ããã°ãããããããŸããã§ãã...ïŒ
reshapeã䜿çšã§ããŸãïŒ reshape(v, 1, length(v))
ã ãã¶ããããã¯éæšå¥šã®èŠåã§ãèšåãããã¹ãã§ããïŒ è»¢çœ®ã¯æ°åŠæŒç®ã§ãããããæ°åŠçãªãã¯ãã«/è¡åã«å¯ŸããŠã®ã¿å®çŸ©ããå¿
èŠããããšããèãã ãšæããŸãã
ããã¯depwarnã§èšåãããŠããŸãïŒ permutedims(x, [2, 1])
ã
permutedims
ã¯ãã¯ãã«ã«å¯ŸããŠã¯æ©èœããŸããã ãã®çæ°ããåé¡ãåç
§ããŠãã ããïŒïŒ18320
転眮ã¯æ°åŠæŒç®ã§ãããããæ°åŠçãªãã¯ãã«/è¡åã«å¯ŸããŠã®ã¿å®çŸ©ããå¿ èŠããããšããèãã ãšæããŸãã
ããã¯ç§ã«ã¯æå³ããããŸããã ããã¯è°è«ã®äœå°ããããŸããïŒ æ¬åœã«æ£åœãªçç±ããªãéããç§ã¯æ¬åœã«è»¢çœ®ããŠéæ°å€é åã§äœæ¥ããããšã奜ã¿ãŸãã
転眮ã¯æ°åŠæŒç®ã§ãããããæ°åŠçãªãã¯ãã«/è¡åã«å¯ŸããŠã®ã¿å®çŸ©ããå¿ èŠããããšããèãã ãšæããŸãã
ããã¯ç§ã«ã¯æå³ããããŸããã ããã¯è°è«ã®äœå°ããããŸããïŒ æ¬åœã«æ£åœãªçç±ããªãéããç§ã¯æ¬åœã«è»¢çœ®ããŠéæ°å€é åã§äœæ¥ããããšã奜ã¿ãŸãã
ç§ã¯ãããªããæããã®ãæºè¶³ãããããšã¯æ¯èŒçè€éã§ãããæ°åŠã«ãšã£ãŠæå³ããããšæããŸãã æ°åŠçãªæå³ã§ã¯ã転眮ã¯ããã¯ãã«ç©ºéãšãã¯ãã«ãŸãã¯è¡åã®ãããã®å察空éã亀æããããšã«ãã£ãŠå®çŸ©ãããããšããããããŸãïŒãŸãã転眮ãšå
±åœ¹è»¢çœ®ã«ãããã€ãã®è€éãããããŸãïŒã ããã³ã°æ°ã®è¡åM
ã®å Žåã転眮ã¯permutedims(M, (2,1))
ã«ãªããŸãããäžè¬ã«ã次ã®ãããªãµãè¡åã®èŠ³ç¹ããããããã¯ãè¡åãå®çŸ©ã§ããŸãã
M = [A B;
C D]
ããã§ã A
ãªã©ã¯è¡åãã®ãã®ã§ãã ç§ã®ç解ã§ã¯ããžã¥ãªã¢ã¯
M' = [A' C';
B' D']
ããã¯ããã³ãšçŽã®æ°åŠã䜿çšããŠè¡ãããšã§ããããããã£ãŠãæãŸããæ§æãã§ãã
ããã¯ãè¡åã®èŠçŽ ã'
ãš.'
ãåãå
¥ããå¿
èŠãããããšãæå³ããŸãã æ°å€ã®å Žåããããã¯ããããè€çŽ å
±åœ¹ãšç¡æŒç®ãšããŠå®çŸ©ãããŸãã IMHOããã¯äŸ¿å©ãªé§æŽèœã ãšæããŸãããæ©èœããæãéèŠãªã®ã¯ã_simple_ã«ãŒã«ïŒã転眮ã¯ååž°çã- BlockMatrix
ã¯ã©ã¹ãªã©ãå¿
èŠãšããã®ã§ã¯ãªãïŒã§å®è£
ãããããšã§ãã ãããããã®è»¢çœ®ã®é§æŽèœã¯ãããŸãæå³ããªãããã0.5ã§ã¯éæ°å€ã¿ã€ãããåé€ãããŸããã Symbol
ã®è»¢çœ®ã¯äœã§ããïŒ
æ°å€ã§ã¯ãªã_data_ãããå Žåã permutedims
ã¯ããã®æå³ãšåäœãå®å
šã«æ確ã«å®çŸ©ãããŠããŸããã€ãŸããååž°çã§ã¯ãããŸããã .'
ãããªæ°åŠã®é§æŽèœã䜿çšãããšãæ°æåã®å
¥åãç¯çŽã§ããŸãããä»ã®èª°ãïŒæ°åŠãMATLABã«ããŸã詳ãããªã人ïŒãã³ãŒãã䜿çšããŠããå Žåã¯ãã³ãŒããèªãæ¹ãçã«ããªã£ãŠããŸããå¿
èŠã«å¿ããŠreshape
ãšpermutedims
ã _ç§ã«ãšã£ãŠãããã¯_æã_éèŠãªãã€ã³ã_ã§ãã
ç§èŠã§ã¯ããã®éåžžã«é·ãåé¡ã¯ãç·åœ¢ä»£æ°ã®æ°åŠçã«äžè²«ããã€ã³ã¿ãŒãã§ãŒã¹ãäœæããããšã«é¢ãããã®ã§ãããçµæãšããŠããŒã¿ã®é åã®æ°åŠçãªããããå°ãªããªãã®ã¯èªç¶ãªããšã®ããã§ãã
æãããã®ãã察å¿ãããããšãã ç§ã¯ãŸã ããªã匷ãå察ããŸã
ãããããã®è»¢çœ®ã®é§æŽèœã¯ãããŸãæå³ããªãããã0.5ã§ã¯éæ°å€ã¿ã€ãããåé€ãããŸããã ã·ã³ãã«ã®è»¢çœ®ãšã¯äœã§ããïŒ
Symbol
ã®è»¢çœ®ãno-opãšããŠå®çŸ©ããããšã¯ãå®æ°ã§è»¢çœ®ãå®çŸ©ããããšãããæå³ããªããã©ããããããŸããã ãããããã¯äŸ¿å©ã ãšæããŸããããé©åãªãããšã¯ããã¯ãã«ãšè¡åã«å¯ŸããŠã®ã¿è»¢çœ®ãå®çŸ©ãã transpose(A::Matrix{Complex})
conj
ãã®äžéšãšããŠ
.'
ãããªæ°åŠã®é§æŽèœã䜿çšãããšãæ°æåã®å ¥åãç¯çŽã§ããŸãããä»ã®èª°ãïŒæ°åŠãMATLABã«ããŸã詳ãããªã人ïŒãã³ãŒããèªãã§ããæ¹ãã¯ããã«çã«ããªã£ãŠããŸããå¿ èŠã«å¿ããŠåœ¢ç¶ãå€æŽãã䞊ã¹æ¿ããŸãã ç§ã«ãšã£ãŠããããæãéèŠãªãã€ã³ãã§ãã
.'
ã¯æ
éã«äœ¿çšããå¿
èŠãããã transpose
ãããæ瀺çã«åŒã³åºãæ¹ãããå Žåãå€ãããšã«åæããŸãã reshape
ãšpermutedims
ã¯ãããããèªã¿åããšã³ãŒãã£ã³ã°ãè¡ãããã«ãåãã«è¶³ããªãéã®èªç¥ãªãŒããŒããããå¿
èŠãšããå¯èœæ§ããããšæããŸãã æ£çŽã«èšããšã解æãéããªããŸãã
transpose([ f(x) for x = 1:length(A) ])
reshape([ f(x) for x = 1:length(A) ], 1, length(A))
ãã®ãããªåçŽãªå Žåã§ããäœãèµ·ãã£ãŠããã®ããç解ããããã«ãè¡ã®æåïŒ reshape
ãèªã¿åãïŒããæåŸïŒ length(A)
ãèªã¿åãïŒãŸã§ããŠã³ã¹ããå¿
èŠããããŸãã ïŒæ¬¡ã«ã length(A)
ãæåã«ååšããçç±ãç解ããããã«ãéäžã«æ»ã£ãŠäœæ¥ããå¯èœæ§ããããŸããïŒ
ç§ã«ãšã£ãŠããã倧ããªåé¡ã¯ãç§ãæ°ããJuliaã§ããå ŽåïŒã€ãŸãã以åã«numpyãšMATLABã䜿çšããããšãããïŒããããæ©èœããããšã§ãã
[ x for x = 1:10 ]'
æååãèšå·ãªã©ã®é
åã§ãåãããšãæ©èœãããšåœç¶æ³å®ããŸãã .'
ã®ã»ãã³ãã£ã¯ã¹ãç解ããããã«é·ããªã³ã©ã€ã³ãã£ã¹ã«ãã·ã§ã³ãèªãã€ããã¯ãããŸãã-ç§ã¯ããã€ãã®ããšãè©ŠããŠãéå»ã®çµéšããäžè¬å/æšæž¬ããŸãã ãããããããè¯ããšã©ãŒã¡ãã»ãŒãžããããšããã§åœ¹ç«ã€ã§ãããã
å
šäœãšããŠã Symbol
ããã®ä»ã®éæ°å€å
¥åã§no-op転眮ãç¶æããããšããããã§ææ¡ãããŠããåªããæ°åŠçãã¬ãŒã ã¯ãŒã¯ã«ã©ã®ããã«å¹²æžãããã¯ããããŸããïŒäŸ¡å€ã®ããç®æšã§ãïŒïŒã ããããããŒãªãã¬ãŒã·ã§ã³ãç¶æããããšã¯ç¡å®³ã®ããã§ãã
ããããããŒãªãã¬ãŒã·ã§ã³ãç¶æããããšã¯ç¡å®³ã®ããã§ãã
ãã¹ãŠãAny
ãµãã¿ã€ãã§ããããã Any
ã«å¯ŸããŠæå³ã®ãããã®ãå®çŸ©ããããšã¯ã§ããŸããã å®çŸ©transpose(x)=x
ã¯ãã©ã®çš®é¡ã®è¡åã«å¯ŸããŠãæããã«ééã£ãŠããããµã€ã¬ã³ããšã©ãŒã®äžéšãåé¿ããããã«ããããã®å®çŸ©ãè¿œå '
ãå®å
šã«éæ°åŠçãªæŒç®ã§èš±å¯ããããšãšããµã€ã¬ã³ããšã©ãŒãåé¿ããããšã®ãã¬ãŒããªãã§ãã
ã·ã³ãã«ã®è»¢çœ®ãno-opãšããŠå®çŸ©ããããšããå®æ°ã§è»¢çœ®ãå®çŸ©ãããããæå³ããªããã©ããã¯ããããŸããã ãããããã¯äŸ¿å©ã ãšæããŸããããé©åãªãããšã¯ããã¯ãã«ãšè¡åã«å¯ŸããŠã®ã¿è»¢çœ®ãå®çŸ©ãã
transpose(A::Matrix{Complex})
conj
ãã®äžéšãšããŠ
ç§ã¯å®å
šã«åæããŸããããããçš®ã®BlockMatrix
ãå®è£
ãããã Matrix{M<:Matrix}
ã«å¯ŸããŠç¹å¥ãªã¡ãœãããå®çŸ©ããå¿
èŠããããŸãã ã©ã¡ãã人æ°ã®ããã¢ã€ãã¢ãããããŸãããïŒ ïŒããã¯ããããã®é¢é£ããåé¡ã®ããã€ããåçŽåããå¯èœæ§ãããããããã©ããŒããŠãã人ã«ãšã£ãŠã¯æ·±å»ãªè³ªåã§ãïŒã
æ£çŽã«èšããšã解æãéããªããŸãã
transpose([ f(x) for x = 1:length(A) ]) reshape([ f(x) for x = 1:length(A) ], 1, length(A))
2ã€ç®ã¯ããžã¥ãªã¢ã®çŸåšã®ãã¯ãã«ã®è»¢çœ®ãšã¯é¢ä¿ããªãããã§ãïŒæããã«ã_ç§ã¯ãã¯ãã«ã®è»¢çœ®ãåããŸã_rowvec = reshape(colvec, (1, n))
ãšèšè¿°ããŸãã [f(x) for _ = 1:1, x = 1:n]
ã¯ãæåããæ£ãã圢ãäœãããã«ç解ã匷å¶ããŸãããŸãã¯ã .'
ãæ¬åœã«å¥œããªå Žåã¯ã map(f, (1:n).')
ãšf.((1:n).')
çŸåšæ©èœããŸãã
ããã¯ãå®å šã«éæ°åŠçãªæäœã®ããã«æ¯èŒçå¥åŠãªæ§æãèš±å¯ãããšãã䟿å©ããšããµã€ã¬ã³ããšã©ãŒãåé¿ããããšã®éã®ãã¬ãŒããªãã§ãã
ããããµã€ã¬ã³ããšã©ãŒããã®ä»ã®åé¡ãåŒãèµ·ãããŠããå Žåãç§ã¯ãããããã®è°è«ã倱ãããšã«ãªããšæããŸãã ïŒãªããšã©ãŒãçºçããã®ãããããŸããããç§ã¯ããªããä¿¡ããŠããŸããïŒäžæ¹ã...
ããçš®ã®BlockMatrixãå®è£ ããããMatrix {M <ïŒMatrix}ã«å¯ŸããŠç¹å¥ãªã¡ãœãããå®çŸ©ããå¿ èŠããããŸãã
ç§ã¯ééã£ãŠãããããããŸããããããªãã¯2çªç®ãè¡ãå¿ èŠããããšæããŸããããã¯ç§ã«ãšã£ãŠåççãªéžæè¢ã®ããã§ãã ããããããã¯ç§ã®çµŠäžæ°Žæºãäžåãå§ããŠããŸãã
[_ = 1ïŒ1ãx = 1ïŒnã®å Žåã®fïŒxïŒ]
ãããå¿ããïŒ ããã¯ããããç§ãããããšã«ãªãããšã§ãã å
šäœçã«ãç§ã¯ãŸã èªã¿ãããã³ãŒãã«å¯Ÿããããªãã®å¥œã¿ã«åæããŸãããããããã圌/圌女èªèº«ã«ïŒ ¯\_(ã)_/¯
æããã«ãç§ã¯ãã¯ãã«è»¢çœ®ãçå£ã«åãæ¢ããŠããŸã
ã¯ãã ç§ã¯ããæãã ð
ããïŒhttps://github.com/JuliaLang/julia/issues/16790ïŒã§ãã transpose
代ããã«reshape
ãå°ãå³ãè¯ããªããŸãã
ç§ã¯ééã£ãŠãããããããŸãããã2çªç®ãå®è¡ããå¿ èŠããããšæããŸãïŒç·šéïŒ
Matrix{M<:Matrix}
ã«å¯ŸããŠç¹å¥ãªè»¢çœ®ã¡ãœãããå®çŸ©ããŸãïŒãããã¯ç§ã«ã¯åççãªãªãã·ã§ã³ã®ããã§ãã
æ®å¿µãªãããããŒã¿ãšç·åœ¢ä»£æ°ã®éãã«åã³æ»ããŸãã ç·åœ¢ä»£æ°ãããã¯è¡åã«ååž°ç転眮ãæãããããã2DããŒã¿é
åã®äžè¬çãª2DããŒã¿é
åã«ã¯ååž°ç転眮ãæãããããªã...ãããMatrix{T}
ãšArray{T,2}
ã¯åããã®ã§ãããç§ãã¡ã¯ã§ããŸãããããè¡ãã
ããïŒïŒ16790ïŒã¯ã転眮ã®ä»£ããã«reshapeã䜿çšããããšã§ãç§ã«ãšã£ãŠå°ãå£åœãããè¯ããªããŸãã
æ¬åœ!!
ç·åœ¢ä»£æ°ãããã¯è¡åã«ååž°ç転眮ãæãããããã2DããŒã¿é åã®äžè¬çãª2DããŒã¿é åã«ã¯ååž°ç転眮ãæãããªã
ããã¯ç§ãæããã«æãã§ããããšã§ã¯ãªãããã§ã...ãããã®ç°ãªãçš®é¡ã®è»¢çœ®ãåŠçããããã®2ã€ã®ç°ãªãé¢æ°ãæã£ãŠããªãã®ã¯ãªãã§ããïŒ ç·åœ¢ä»£æ°ãªããžã§ã¯ããšããŒã¿ãªããžã§ã¯ãã®éã«éåžžã«å³å¯ãªåºå¥ããããšããã¡ã¢ãèŠéãããšæããŸãã
ãã®ã¹ã¬ããå šäœãèªãã®ã¯å€§å€ãªäœæ¥ã®ããã«æããŸãããããã«ã³ã¡ã³ãããåã«ããããå¿ èŠããããããããŸããã ç¥ããªããã¡ã«ãã€ãºãå ããããªãã
ç·åœ¢ä»£æ°ãªããžã§ã¯ããšããŒã¿ãªããžã§ã¯ãã®éã«éåžžã«å³å¯ãªåºå¥ããããšããã¡ã¢ãèŠéãããšæããŸãã
ç·åœ¢ä»£æ°ãªããžã§ã¯ããšããŒã¿ãªããžã§ã¯ãã®éã«å³å¯ãªåºå¥ã¯ãããŸããã
çŸåšã®å®è£
ã§ããçæ³çãªäœ¿çšã§ããããŸããã
ååšããå Žåããµã€ãºã®å€æŽïŒ push!
ïŒãŸãã¯ç·åœ¢ä»£æ°ãªããžã§ã¯ãã®å€ã®å€æŽã¯ãµããŒããããŸããïŒãã®ãããªãŠãŒã¶ãŒã¯StaticArrays.jlãªã©ã䜿çšããŸãïŒã broadcast
ã®ã¿ããµããŒããããŸããç·åœ¢ä»£æ°ãªããžã§ã¯ãã§ãµããŒããããŸãã
ããŒã¿ãªããžã§ã¯ãã¯ãæ¡åŒµãå€æŽå¯èœãšãªãããã€æ¯æããã ããmap
ãïŒããã³reduce
ãããã³filter
ïŒã§ã¯ãªãbroadcast
ã
ããããç§ãã¡ã¯äººã
ãããŒã¿ãªããžã§ã¯ãã®ãã€ããªãšç·åœ¢ä»£æ°ãªããžã§ã¯ãã®ã©ã¡ãããèããŠããäžçã«ããŸããã
ãããã£ãŠããã®2ã5幎ã340ã³ã¡ã³ãã¹ã¬ããã
no-op
転眮ã«ã€ããŠã
åéå±€ã®éåžžã«é«ãäœçœ®ã«ã Scalar
ãšNonscalar
æœè±¡åãè¿œå ã§ããŸãã
Scalars
ãã¹ãŠãæäœãªãã®è»¢çœ®ãžã®ãã©ãŒã«ããã¯ã§ãã
Nonscalars
ã¯ãã©ãŒã«ããã¯ã¯ãããŸããïŒãã ããçŸæç¹ã§ã¯éæšå¥šã®èŠåã«ãã©ãŒã«ããã¯ããŸãïŒ
æ°åãæåãæååããããŠããããã¿ãã«ã§ããScalar
ãªããæäœãªãã®è»¢çœ®ãå®çŸ©ãããŸãã äžéšã®ã¹ã«ã©ãŒãããšãã°è€çŽ æ°ã¯ããã®è»¢çœ®ã®å®çŸ©ãäžæžãããŸãã
é
åïŒè¡åããã¯ãã«ãªã©ïŒã¯ã Nonscalar
ãµãã¿ã€ãã§ãããååž°çãªè»¢çœ®ãæã¡ãŸãã
ããã奜ããã©ããã¯ããããŸããã
æè¿ã®äžé£ã®æçš¿ã¯ãïŒ18320ïŒ13171ïŒ13157ïŒ8974ã®_matrixtranspose_ããã³ "scalar"ã¿ã€ãã«é¢ããè°è«ãåæ§ç¯ããŠããŸãã
transpose(x)=x
no-opãã©ãŒã«ããã¯ã¯ç¡å®³ã§ãããšããèããæ¬åœã«ææããããšæããŸãã ç§ã®èãã§ã¯ããã©ãŒã«ããã¯ã¯ãæé©åãããã¢ã«ãŽãªãºã ããããã£ãããšãæ£ããçµæãçæããã¯ãã§ãã ãã©ãŒã«ããã¯ã¡ãœããã誀ã£ãçãããµã€ã¬ã³ãã«èšç®ããå Žåããã©ãŒã«ããã¯ã«æ£ããã»ãã³ãã£ã¯ã¹ããªãããšãæå³ãããããå±éºã§ãã transpose(x)
ã¯ã x
ã¿ã€ãã«å¿ããŠç°ãªãæå³ãæã¡ãŸãã
no-op転眮ãã©ãŒã«ããã¯ã¯ãè¡åã®è¡åã«å¯ŸããŠééã£ãŠããã ãã§ãªãã AbstractMatrix
ãµãã¿ã€ãã§ã¯ãªããã¹ãŠã®è¡åã®ãããªãªããžã§ã¯ãã«å¯ŸããŠãééã£ãŠããŸãïŒããã¯ãïŒ987ã«ãã£ãŠããšã³ããªãæ瀺çã«æ ŒçŽãããŠããããšãæå³ããŸããããããè¡åã®ä»£æ°ãæã£ãŠããããšïŒã ããã1ã€ã®ãã¹ã¿ãŒã®åã®äŸã§ãïŒããªãã®æ°ããããŸãïŒïŒ
julia> A = rand(5,5); F = qrfact(A); R = F[:R]; Q = F[:Q] #Q is an example of a matrix-like object
5x5 Base.LinAlg.QRCompactWYQ{Float64,Array{Float64,2}}:
-0.518817 0.0315127 0.749223 0.410014 -0.0197446
-0.613422 -0.16763 -0.609716 0.33472 -0.3344
-0.0675866 0.686142 0.0724006 -0.302066 -0.654336
-0.582362 -0.0570904 0.010695 -0.735632 0.341065
-0.104062 0.704881 -0.248103 0.295724 0.585923
julia> norm(A - Q*R) #Check an identity of the QR factorization
8.576118402884728e-16
julia> norm(Q'A - R) #Q'A is actually an Ac_mul_B in disguise
8.516860792899701e-16
julia> Base.ctranspose(Q::Base.LinAlg.QRCompactWYQ)=Q; #Reintroduce no-op fallback
julia> norm(ctranspose(Q)*A - R) #silently wrong
4.554067975428161
ãã®äŸã¯ãäœããAny
ãµãã¿ã€ãã§ãããããšãã£ãŠããããã¹ã«ã©ãŒã§ãããæäœãªãã®è»¢çœ®ããããšæ³å®ã§ããããšãæå³ããããã§ã¯ãªãããšã瀺ããŠããŸãã ãŸããOPã®èŠªã®åé¡ã解決ããã®ãéåžžã«é£ããçç±ã瀺ããŠããŸãã è¡åã®ãããªéé
åãªããžã§ã¯ãQã®å Žåã Q'
ã¯é
åæäœãšããŠã®å®éã®æå³ã¯ãããŸããããæ確ãªä»£æ°çæå³ããããŸãã Q'A
ãããªåŒã¯å®å
šã«æ確ã«å®çŸ©ãããŠããŸãã ç·åœ¢ä»£æ°ã§ã¯ãªãé
åãæ±ãä»ã®äººã
ã¯ãåã«éååž°çãªäžŠã¹æ¿ããå¿
èŠãšããè¡åã®ãããªéé
åãæ°ã«ããŸããã ããã«ããããããããã¹ãŠã®ã¿ã€ãã®ä»£æ°çã»ãã³ãã£ã¯ã¹ãšè»žäº€æã»ãã³ãã£ã¯ã¹ã®äž¡æ¹ã®äžè²«ããã¹ãã«ãæã€ããšã¯ã§ããªããšããäºå®ãæ®ã£ãŠããŸãã
ãã¶ãç§ã¯å¯éããŠããŸãããæ¯èŒã¯æ¬¡ã®ããã«ãªããšæããŸããã
julia> A = rand(5,5); F = qrfact(A); R = F[:R]; Q = F[:Q]
julia> Base.ctranspose(Q::Any) = Q;
WARNING: Method definition ctranspose(Any) in module Base at operators.jl:300 overwritten in module Main at REPL[6]:1.
julia> norm(ctranspose(Q)*A - R) # still works fine
4.369698239720409e-16
ãã®æ¹æ³ã§transpose
ãäžæžããããšã transpose([ :x _=1:4 ])
ãèš±å¯ãããããã§ããã€ãŸããç§ãæçš¿ããå
容ã§ãã transpose
/ ctranspose
ãå¿
èŠãšãããã¹ãŠã®ãã®ïŒããšãã°QRCompactWYQ
ïŒã«æ£ããå®è£
ããŠããéãããã©ãŒã«ããã¯ãåŒã³åºãããããšã¯ãªããšæããŸããïŒããå
·äœçãªåŒã³åºãã®ããïŒäœãããšãã§ããŸãïŒã
ããªãã®ã³ãŒãã¯ããªããæžããctranspose
ã¡ãœãããåŒã³åºããŠããŸããïŒããã¯@which
確èªã§ããŸãïŒã Julia v0.5ïŒv0.4ã«ã¯ååšããŸããïŒã§å¥ã®ãã©ãŒã«ããã¯ã¡ãœãããåŒã³åºããŠããŸããããã¯åºæ¬çã«ctranspose(full(Q))
ãŸãã ãã®ä»ã®ãã©ãŒã«ããã¯ã¯æ£ããã§ãããç§ãã¡ããã®æŽŸæãªQã¿ã€ããæã£ãŠããçç±ãã®ãã®ãæã¡è² ãããŸãïŒããã§ä¹ç®ãæ£ç¢ºã«è¡ãããšãã§ããŸãïŒã ãã©ãŒã«ããã¯ã¯æ£ããã¯ãã ãšããç§ã®ã³ã¡ã³ãã¯ãŸã æ®ã£ãŠããŸãã
ã¯ãããã¹ãŠã®ç§»èª¿ãæ£ããå®è£
ããŠããéãã
ãã¡ããããã©ãŒã«ããã¯ã¯å®³ãåãŒããŸããã 害ã¯ããªããããªãããšã§ã
ãããå¿ãããšã¡ãœãããšã©ãŒã¯çºçããŸããããé»ã£ãŠééã£ãŠããŸã
çµæã
ã¯ãªãã¯ããŠããã@toivohã«æè¬ããŸãã 説æããããšãããããŸãã
ãããããã©ãŒã«ããã¯transpose(X::AbstractMatrix)
é¢æ°ãštranspose(X::AbstractVector)
é¢æ°ãå®çŸ©ãããšãããããåžžã«æ£ããçµæãåŸãããŸãïŒããšããããé
ããŠã...ããšãã°full
ãåŒã³åºãïŒãããïŒ ãããŠãããªãã¯ãã€ã§ããããããè¯ã/ããéãããããã«ãã£ãšå°éçãªé¢æ°ãæžãããšãã§ããŸãã ããããã°ã transpose(::Any)
ã¯ãåè¿°ã®ãé§æŽèœã以å€ã®ãµã€ã¬ã³ããšã©ãŒãåŒãèµ·ãããŠã¯ãªããŸããïŒã€ãŸãã Complex
æ°å€ãåŠçãããšã...å€åç§ãç¥ããªãä»ã®ã¹ã«ã©ãŒãŠãŒã¹ã±ãŒã¹ïŒïŒ
æŽå²çãªçç±ããQRCompactWYQ <: AbstractMatrix
ã§ãããïŒ987ïŒ10064ã«ãããšããã®ãµãã¿ã€ãã®é¢ä¿ã¯æ£ãããªããããåé€ããå¿
èŠããããŸãã
è¡åã®ãããªéé
åã®å¥ã®äŸã¯IterativeSolvers.AbstractMatrixFcn
ãããã¯AbstractMatrix
ãµãã¿ã€ãã§ã¯ãããŸããã ãã®ã¿ã€ãã®å Žåãåç
§ãããã©ãŒã«ããã¯ããã£ã¹ããããããããšã¯ãããŸããããããç§ã®äž»ãªãã€ã³ãã§ãã
ãã®ãã£ã¹ã«ãã·ã§ã³ã¯https://github.com/JuliaLang/julia/issues/13171ã§ç¶ç¶ããå¿ èŠããã
ãããŒã ç·åœ¢ä»£æ°ãã®èª°ããã¹ãããã¢ããããŠã0.6ã§ããã«ã€ããŠäœããããããšã«ã³ãããããå¿ èŠããããŸããããããªããšãåã³ã¶ã€ãããŸãã
ã§ã¯ãåèµ·åããã«ã¯ãå®éã®èšç»ã¯äœã§ããïŒ
ç§ã®èãæ¹ã¯æ¬¡ã®ããã«ãªããŸãïŒ transpose(v::AbstractVector) = TransposedVector(v)
ããã§TransposedVector <: AbstractVector
ã TransposedVector
ãšAbstractVector
ãåºå¥ããå¯äžã®ã»ãã³ãã£ãã¯ãªç¹ã¯ã *
ïŒããã³ãã¹ãŠã®A_mul_B
ã \
ã /
ã...ïŒã ã€ãŸãã *
ïŒãªã©ïŒã®äžã§å¥çŽããã€ã³ããã¯ã¹ã決å®ããã®ã¯ãã³ã¬ãŒã¿ã§ãã 転眮ã¯ç·åœ¢ä»£æ°ã®æŠå¿µã§ããããããŒã¿ãã®é
åãåé
眮ããå Žåã¯ã reshape
ãšpermutedims
ãæšå¥šããå¿
èŠããããŸãã
TransposedVector
ãšAbstractVector
ãåºå¥ããå¯äžã®ã»ãã³ãã£ãã¯ãªããšã¯ã*
äžã§ã®åäœã§ãã
ã ããv'==v
ãããv'*v != v*v'
ïŒ ããã¯çã«ããªã£ãŠãããããããŸããããæ··ä¹±ãæãå¯èœæ§ããããŸãã
ã ãã
v'==v
ãããv'*v != v*v'
ïŒ ããã¯çã«ããªã£ãŠãããããããŸããããæ··ä¹±ãæãå¯èœæ§ããããŸãã
IMOããã¯é¿ããããŸããïŒããããäžå¹žã§ããïŒã
ãã¯ãã«ã®å察ããã¯ãã«ã§ãã 転眮ã¯ãååŸãå€æŽããããã³ã°ãåæžãªã©ãå¯èœãªãæ確ã«å®çŸ©ãããèŠçŽ ãåãã1次å ã®ããŒã¿æ§é ã§ããããŸãã
ç·åœ¢ä»£æ°ãé
åããåé¢ããªãéãïŒããšãã°ã Matrix{T}
ãArray{T,2}
ãµãã¿ã€ããšäžå€ã©ãããŒã®äž¡æ¹ã«ããããå€ãã®ïŒç·åœ¢ä»£æ°åºæã®ïŒã¡ãœãããå®çŸ©ããïŒãããã«ãããã©ããã¯ããããŸããé
åãšç·åœ¢ä»£æ°ã®äž¡æ¹ã®ããããã£ãšäžèŽããå€ãã®éžæè¢ã§ãã
ïŒç§ã«ãšã£ãŠïŒ1ã€ã®çŽãããã質åã¯ãããããã¯ãã«ã®ããã«ãããŒããã£ã¹ãããã®ãããããšã2çªç®ã®æ¬¡å
ã§ãããŒããã£ã¹ãããã®ããšããããšã§ãã ãµã€ãºã(1, n)
å Žåããã®å€æŽå
šäœã¯ãæåã®æ¬¡å
ãé·ã1
ããšãããã£ãŠããè¡åã®ããã«äž»åŒµããããšãé€ããŠãå®éã«ã¯ããŸãå¹æããããŸããã 転眮Vector{T}
ãŸãŸã«ããå¿
èŠããããŸãArray{T,2}
ïŒã€ãŸãã Matrix
...ïŒããããããã®è»¢çœ®ã¯å¯èœæ§ãVector
ïŒããäžåºŠãããšãã°ã v'' === v
ã䜿çšã§ããŸãïŒã
ããã¯ããè¯ãèãã§ããïŒ ããã¯å£ãã«ãããç·åœ¢ä»£æ°ã®ã»ãã³ãã£ã¯ã¹ãæ¹åããŸãã ç·šéïŒ @martinholtersã衚瀺ããããã«==
ãšã¯ç°ãªãåäœãããŸãïŒã
ç§ã«ã¯ã TransposedVector{T <: AbstractVector{Tv}} <: AbstractMatrix{Tv}
*ïŒãšsize(::TransposedVector, 1)==1
ããããŸããã transpose(::TransposedVector{T})::T
ã¯æ£çŽãªã¢ãããŒãã®ããã«èãããŸãããéåžžã«å€ãã®è°è«ããããããããããã«å察ããè¯ãè°è«ããããŸããïŒ
*ïŒãããæ§æçã«ç¡å¹ã§ããããšã¯ç¥ã£ãŠããŸãããæå³ãããã»ãã³ãã£ã¯ã¹ãæ確ã§ããããšãé¡ã£ãŠããŸãã
ã¯ããã³ãŒãã§ã¢ã€ãã¢ãè©ŠããŠã¿ããšã@ martinholtersã«åæããŸãã
https://github.com/andyferris/TransposedVectors.jlããå§ããŸãã
1ã€ã®å€§ããªåé¡ã¯ãè€çŽ å
±åœ¹ã«å¯ŸããŠCTransposedVector
ã¿ã€ããªãã§çããããšãã§ãããã©ããããŸãã¯ãããåŠçããããã©ããã§ãã
åå¥ã®CTransposedVector
ã¯äœ¿çšããŸãããããã¯ã2ã€ã®æŠå¿µïŒå
±åœ¹ãšå圢æïŒã1ã€ã®ãªããžã§ã¯ãã«çµåããããã§ãã ãããã®2ã€ã®æŠå¿µãå¥ã
ã®ãšã³ãã£ãã£ãšããŠå®è£
ããŠããæ¹ãã¯ããã«æ§æå¯èœã§ãã ããšãã°ãMappedArrays.jlã䜿çšãããšã次ã®ããã«ç°¡åã«ãªããŸãã
conjview(A) = mappedarray((conj,conj), A)
ãããŠãããªããçŽ æŽãããããã©ãŒãã³ã¹ãåŸãããšãã§ããŸãã
ããã§ãããã£ã ã«æè¬ããŸãã ç§ã¯ãã®ãããªããšãèããŠããŸãã/æåŸ ããŠããŸãã-ç§ã®å¯äžã®æžå¿µã¯ã2ã€ã®ã©ãããŒãåžžã«ãæ£ãããé åºã§è¡šç€ºãããããã«ããæ¹æ³ã§ãããããããŸã§ã«å®è£ ãããã®ã§ãããåŠçã§ãããšæããŸãã ãŸããããããã¹ãŠã®çµã¿åããã«å¯ŸããŠBLASããµããŒãããå¿ èŠããããŸããããããŸã§è§Šããªãããã«ã§ããŸããã
1ã€ã®çŸããç¹ã¯ãããã©ã«ãã§conj
ããconjview
ã«èšå®ãããåå¥ã®å€æŽã¯ããã®å€æŽãšã¯ç¡é¢ä¿ã§ãããšããããšã§ãïŒäž¡æ¹ãšãç¬ç«ããããã±ãŒãžã§ããããåãããšãã§ããæ£ããäžç·ã«æ§æããããšæããŸãïŒã conj
ããã¥ãŒã«ããæ欲ã¯ãããŸããïŒ ã€ã³ã©ã€ã³ã®éisbitsäžå€ããã®ãããªãã¥ãŒãç¡æã«ããã®ãåŸ
ã£ãŠããŸããïŒ ãŸãã¯åŸ
ã€å¿
èŠã¯ãããŸãããïŒ
@andyferris ïŒããªãã®ã¢ãããŒãã¯è¯ããã®ã ãšæããŸãâãããåé²ãããŠãããŠããããšãã å®è£ ãããŸãæ©èœããã°ãBaseã§ãã®ã³ãŒãã䜿çšã§ããŸãã èŠããŠããã¹ãããšã®1ã€ã¯ã httpsïŒ//github.com/JuliaLang/julia/issues/5332ã«ãTransposedMatrixãå¿ èŠãªå Žåããããšããããšã§ã
å€æãç¶ããã®ã§ã転眮ããããã¯ãã«åãé¿ããããã«åªããã¹ãã§ããããšãããäžåºŠè¿°ã¹ãŠãããŸãã äžèšã§æ°åèšåãããŠããŸããããã®åé¡ã®ãã¹ãŠã®ã³ã¡ã³ãã誰ããåã³èªãããšãã§ãããšã¯æããŸããã ãã¯ãã«ã«è»¢çœ®åãå°å
¥ãããšãå®éã«ã¯è€éã«ãªããã»ãšãã©ã¡ãªããããããŸããã ãã¯ãã«ã«æ¹åæ§ããããšæ¬åœã«æã£ãŠããå Žåã¯ããããè¡åã«ãããšãããŸããããŸãã è¡åãšã¯ç°ãªãç·åœ¢ä»£æ°ãã¯ãã«ã䜿çšããŠãããæ°ããã©ãããŒã¿ã€ããå°å
¥ããŠããã¯ãã«ã1xn
è¡åã®ããã«åäœãããããšã¯ããŸãæå³ããããŸããã
çŸåšã®é察称æ§ã¯ã x'
ãx
ãè¡åã«ææ Œãããã®ã«å¯Ÿãã A*x
ã¯x
ãè¡åã«ææ Œãããªãããšã§ãã ç·åœ¢ä»£æ°æŒç®ã2Då°çšã®å Žåã A*x
ã¯ããã¢ãŒãããå¿
èŠãããã x'x
ã¯1x1
è¡åã«ãªããŸãã ãããã¯ããã¯ãã«ããã¯ãã«ã«ããŠã A*x
ãã¯ãã«ã«ããããšãã§ããŸããã x'
ã¯noopãŸãã¯ãšã©ãŒã«ãªããŸãã 転眮ãã¯ãã«ãå°å
¥ããã«ã¯ãå€ãã®æ°ããã¡ãœããå®çŸ©ãå¿
èŠã«ãªããŸããå¯äžã®å©ç¹ã¯ã x'x
ãã¹ã«ã©ãŒã«ãªãããšã§ãã
è¡åã®è»¢çœ®ã¯éåžžã«ç°ãªã£ãŠãããšæããŸãã ããã«ããããã¹ãŠã®Ax_mul_Bx
ã¡ãœãããåãé€ãããšãã§ãããã¯ãã«è»¢çœ®ã®åäœãšåãããã«åäœã«ã€ããŠè°è«ããããšã¯ã§ããŸããã
TransposedVectorã¿ã€ããå°å ¥ãããšãTransposedMatrixã¿ã€ããå°å ¥ãããããå€ãã®åé¡ãçºçããããšã¯ããããããŸããã
ã¯ãããã®ãªãŒãã¹ã®çãäžã®ã©ããã§ã®åŒ·ãã³ã³ã»ã³ãµã¹ã¯ããã¯ãã«è»¢çœ®ãå¥åŠã§ããããããå®è£
ãããå Žåãããã¯ééããªãAbstractArray
ãµãã¿ã€ãã§ãã£ãŠã¯ãªããªããšããããšsize
èš±å¯ããŸããå®å
šã«äžèšã®ç§ã®conj
ããããã³ã°ããTimã®ã¢ãããŒããåãããšããå§ãããŸãïŒãã©ã¡ãŒã¿ïŒã
ãããããã¯ãã«è»¢çœ®ãåã«ãšã©ãŒã§ãããšããããã«åŒ·ãèŠæ±ããããŸããã ããã ãšããã°ãå®éã«ã¯ããã±ãŒãžã«åããããšãã§ãããšæããŸãã
ãã¯ãã«è»¢çœ®ããšã©ãŒã«ããããšã¯ãã颚åã®æ°Žã§èµ€ã¡ãããæšãŠããããªãã®ã§ãã ãã¯ãã«ã転眮ããããã«v'
ãèšè¿°ã§ããªãããšã¯ãæ¬åœã«ãæ¬åœã«é¢åã§ãã ãã¯ãã«ãè¡åãšã®ä¹ç®æ¹æ³ãé€ãã°ãè¡è¡åã®ããã«åäœããTransposedVectorã¿ã€ãã䜿çšããããšã®äœãæªãã®ãã¯ããããŸããã
ããã¯ããã¯ãã«è»¢çœ®ã§å¯ŸåŠãããåäœã®æ°ã«ãã£ãŠç°ãªããŸãã åã«v'' == v
å¿
èŠãªå Žåã¯ã typeof(v') <: AbstractMatrix
ãŸããã ãããã typeof(v'v) <: Scalar
ãtypeof(v'A) <: AbstractVector
ããã«ããã®ã¹ã¬ããã§èª¬æããä»ã®ããšããããå Žåã¯ãå¥ã®ãããè€éãªç£ã§ããå¿
èŠããããŸãã
TransposedVectorãäžçš®ã®Vectorã«ãããšããèãã¯ãå€ãã®åé¡ã®æ ¹æºã«ããããã§ãã äžçš®ã®ãããªãã¯ã¹ã«ããŠãä»ãšåãããã«size(v.') == (1,length(v))
ã䜿çšããæ¹ããæ··ä¹±ãã¯ããã«å°ãªãããã§ãã å¯äžã®éãã¯ãäºé転眮ããã¯ãã«ãè¿ãã v'v
ãã¹ã«ã©ãŒãçæããããšã§ãã 転眮ããã¯ãã«ãšããŠæ±ãããå Žåã¯ã length(v')
ãæ£ããçããåºããç·åœ¢ã€ã³ããã¯ã¹ãæåŸ
ã©ããã«æ©èœãããããå¯èœã§ãã
@StefanKarpinskiã«110ïŒ åæããŸãã ç§ã¯ãããäžçš®ã®ãã¯ãã«ã«ããããšããããããŸãããŸãããããã®ã¹ã¬ããã§åè¿°ãããããªçç±ãããããŸãæå³ããªãããããå£ããŠããŸãã
ãµã€ãºã(1, n)
ããã¢ãããŒãã¯ã Array
åäœã«é¢ããŠãçŸåšãšãŸã£ããåãããã«åäœããããšãæå³ããŸãã 1è¡Nåã®Matrix
ãšåºå¥ãã_only_æäœã¯ã '
ã .'
ã *
ã \
ã ããã³/
ã
ãããã¯ã©ãããé
åã®ãããªãæŒç®åã§ã¯ãããŸããã ãããã¯çŽç²ã«è¡åãšãã¯ãã«ã®éã«ç·åœ¢ä»£æ°ãå®è£
ããããã«ãããMATLABïŒãè¡åã©ããïŒããçŽæ¥ååŸãããŸãã ãã®æçµçãªæ¹è¯ã¯ã size(tvec, 1) = 1
ãã³ã³ãã€ã©ã«å¯ŸããŠéçã«v''
ãv
ã«ãããããšã瀺ããŠããŸãã ïŒç§ã¯ãäžæ¹ã®æ¬¡å
ãåºå®ãããããäžæ¹ã®æ¬¡å
ãåçã«ãµã€ãºèšå®ãããStaticArray
ãããªãã®ã ãšæããŸãïŒã
åã«v '' == vãå¿ èŠãªå Žåã¯ãtypeofïŒv 'ïŒ<ïŒAbstractMatrixã§åé¡ãããŸããã
æ£ããã
ããããtypeofïŒv'vïŒ<ïŒScalarãŸãã¯typeofïŒv'AïŒ<ïŒAbstractVectorã®ããã«ããã®ã¹ã¬ããã§èª¬æããä»ã®ããšãæãå Žåã¯ãå¥ã®ãããè€éãªç£ã§ããå¿ èŠããããŸãã
ã©ãããŠïŒ é
åã®ãããªããããã£ãå£ããŠããªãã®ã§ãããã§ãé
åã§ããå¯èœæ§ããããŸãã ãããã³ãŒã«ã¯ä»¥åãšåãããã«æ©èœããä»ã®ãã¯ãã«åãããæäœã¯åé€ãããŸãã *
ã¯ã Vector
ãšMatrix
ã®ããŸããŸãªåœ¢ç¶ã®ç¥èã«ãç¹åãããŠãããšæããŸããããã¯ãèšè¿°ãããç·åœ¢ä»£æ°ã®åäœããšãã¥ã¬ãŒãããããšããŠããããã§ãã v' * v
ã¹ã«ã©ãŒã«ããããšã¯_éåžžã«_æšæºçãªæ°åŠã§ãããæåããããã§ã¯ãªãã£ãå¯äžã®çç±ã¯ãäžè²«ããæ¹æ³ã§å®è£
ããã®ãç°¡åã§ã¯ãªãããã§ãïŒãããŠãžã¥ãªã¢ãåŸãã€ã³ã¹ãã¬ãŒã·ã§ã³ã¯MATLABïŒããããã¹ããã¡ã³ã¯ãããæ確ã«ããããšãã§ããŸããã å
ç©ãã¹ã«ã©ãŒã«ããããšã¯ãããã§è©±ãå¯äžã®é倧ãªå€æŽã§ãïŒä»ã«ãéåžžã«ãã€ããŒãªããšããããŸãïŒ-ããã ãã§Array
ã«ãªãã®ãäžé©åã«ãªãçç±ã¯ããããŸããïŒå€ãã®ã¿ã€ãããããŸãïŒã®Array
æå¹ã§ã¯ãããŸããã®ã§'
ã .'
ã *
ã \
ãš/
ALL_ _atå®çŸ©ãããŠãç¹ã«ã©ã³ã¯3+ïŒ
æšå¹Žç§ãééããåé¡ã®1ã€ã¯ããããŸããã§ããã IIRCã¯ããã¯ãã«è»¢çœ®ãé åã§ãªãå Žåã解決ãã¯ããã«ç°¡åã§ããã
ã¯ããç§ã¯ãããçµããåã«ã©ãã»ã©æ·±ããªããå°ãå¿é ããŠããŸã... :)
äžè¬çãªæ³šæãšããŠã Base
ã¢ããªã·ãã¯ãæžããããããæšæºã©ã€ãã©ãªã«å解ãããšããã°ãããã§ãããã AbstractArray
ãšArray
ãå®çŸ©ããã ãã®èªå·±å®çµåã®ããã±ãŒãžãŸãã¯ã¢ãžã¥ãŒã«ããããšããã®çš®ã®éçºãç°¡åã«ãªããŸãã
@Juthoã®ææ¡ã®æ£ç¢ºãªåé¡ã¯äœã§ãããïŒ *
ã¯ãå·ŠåŽã®ãã¯ãã«ãèªåçã«ïŒå
±åœ¹ïŒè»¢çœ®ã§ããŸãã
*
ã®è¡åä¹ç®ã '
è¡åïŒå
±åœ¹ïŒè»¢çœ®ïŒãã¯ãã«ãå€æŽããªãïŒãããã³æ«å°Ÿã®ã·ã³ã°ã«ãã³ãšdemote
ãè¿œå ãã2ã€ã®æŒç®åpromote
ããå Žåæ«å°Ÿã®ã·ã³ã°ã«ãã³ãåé€ããdemote
ãå³ã®ã¢ããªã±ãŒã·ã§ã³*: (n,m) -> (m,) -> (n,)
ãå·Šã®ã¢ããªã±ãŒã·ã§ã³*: (n,) -> (n,m) -> (m,)
ãå
ç©*: (n,) -> (m,) -> (,)
ãå€ç©Ã: (n,) -> (m,) -> (n,m)
ãã®ãããªïŒ
(*)(A::AbstractMatrix, v::AbstractVector) = demote(A*promote(v))
(*)(u::AbstractVector, A::AbstractMatrix) = demote((promote(u)'*A)')
(*)(u::AbstractVector, v::AbstractVector) = demote(demote(promote(u)'*promote(v)))
(Ã)(u::AbstractVector, v::AbstractVector) = promote(u)*promote(v)'
ãããã®æŒç®åã䜿çšããŠãã¯ãã«ã転眮ããå¿ èŠããããã©ããã¯ããããŸããã ç§ã¯äœãã足ããªãã®ã§ããïŒ
ç·šéïŒæ£ç¢ºã«ã¯@Juthoã®ææ¡ã§ã¯ãããŸããã
@Armavica ããã®æå³ã*
ã«å²ãåœãŠãã®ãç§ã®ææ¡ã§ãããã©ããã¯ããããããŸããããæ°ããïŒãŠãã³ãŒãïŒæŒç®åâ
ã«å²ãåœãŠãŸããããã¯ãçŸåšdot
çžåœããŸãã promote
ãšdemote
ã¢ãããŒããåãå®å®ããæ¹æ³ã§å®è£
ã§ãããšã¯æããŸããã
ç§ã®çŽç²äž»çŸ©è
ã¯ããã¯ãã«èªäœã®è»¢çœ®ã¯é¿ããã¹ãã§ãããšãã@andreasnoackã«åæããŸãïŒç§v'*w
ãã€ã§ãv'w
ãŸãã¯v'*w
ãããdot(v,w)
ãæžãããšãå人çã«å¥œã¿ãŸãïŒããç§ãæè¬ããããšãã§ããŸã@andyferrisã«ãã£ãŠææ¡ãããæ¹æ³ã§æ©èœããã
ããã@ Juthoã èå³æ·±ãããšã«ããã®2ã€ã¯çžäºã«æä»çã§ã¯ãããŸãããããã©ã«ãã§å®çŸ©ããããã¯ãã«ã«è»¢çœ®ããªããšããããšã¯ããã®æ©èœãå¥ã®ããã±ãŒãžãã¢ãžã¥ãŒã«ããŸãã¯ãæšæºã©ã€ãã©ãªãã«åæ³çã«ååšã§ããããšãæå³ããŸãïŒã€ãŸãããã¿ã€ãã®èäœæš©äŸµå®³ãã¯ãããŸããïŒã
ïŒç§ã¯ãã€ã§ãv'wãŸãã¯v '* wãããdotïŒvãwïŒãæžãããšãå人çã«å¥œã¿ãŸãïŒ
Jutho -äžæ¹ã§ãç§ã¯ããªããæžã蟌ã¿ãããŸããè³ãã|Ï>â |Ï>çŽãŸãã¯ãªã³ããããã§ã¯ãªãã<Ïãã¯ã€ãããŒã|åãã¢ãããžãŒãæãç«ã€Ï>ïŒãšç§ãã¡ã¯å ç©ãæç»ããæ¹æ³ãã³ãœã«ãããã¯ãŒã¯å³ä»ãïŒã
ãã¡ãããç§ã¯ãã£ã©ãã¯ã®ãã©ã±ããèšæ³ãããã¹ãŠã®æ°åŠãããã«ã¯ç§åŠãã²ããŠã¯ãžã¥ãªã¢ã«ãããç·åœ¢ä»£æ°ã®æšæºçãªå®åŒåãšããŠèŠãããšæã£ãŠããŸãããããããããã¯èµ·ãããªãã§ãããã
ä»ãããªãã¯ç§ã«äœè«ã匷èŠããŸããããã¯ç§ãããããã€ããã¯ãããŸããã§ããã ç§ã¯ç¢ºãã«å
ç©ã«<Ï|Ï>ã奜ãããšã«åæããŸãããããã¯ç§ã<Ï|ãèããŠããªããšããäºå®ãšã¯ç¡é¢ä¿ã§ãã |Ï>ã®ãšã«ããŒãå
±åœ¹ãšããŠã ãšã«ããŒãå
±åœ¹ã¯ãæŒç®åã«å¯ŸããŠå®çŸ©ãããŠããŸãã ãã¯ãã«ãšããã«é¢é£ããå察ãã¯ãã«ïŒå
±ãã¯ãã«ãç·åœ¢æ±é¢æ°ãªã©ïŒã®éã®èªç¶å圢æ§ã¯ããªãŒã¹è¡šçŸå®çãšããŠç¥ãããŠããŸãããåè
ã¯ãã¡ãããé·ãn
ãã¯ãã«ãç·åœ¢ããããšããŠè§£éãããšãã®ãšã«ããŒãå
±åœ¹ãšåçã§ãã CããC ^ nãŸã§ãã€ãŸããµã€ãº(n,1)
è¡åãšããŠã
ãã¡ãããç§ã¯ãã£ã©ãã¯ã®ãã©ã±ããèšæ³ãããã¹ãŠã®æ°åŠãããã«ã¯ç§åŠãã²ããŠã¯ãžã¥ãªã¢ã«ãããç·åœ¢ä»£æ°ã®æšæºçãªå®åŒåãšããŠèŠãããšæã£ãŠããŸãããããããããã¯èµ·ãããªãã§ãããã
ç¬
ä»ãããªãã¯ç§ã«äœè«ã匷èŠããŸããããã¯ç§ãããããã€ããã¯ãããŸããã§ããã
ãã¿ãŸãã...ç§ã¯æ¬åœã«ããã«ã€ããŠèšåããã¹ãã§ã¯ãããŸããã§ãã... :)
<Ï|ã¯æããŸãã |Ï>ã®ãšã«ããŒãå ±åœ¹ãšããŠã ãšã«ããŒãå ±åœ¹ã¯ãæŒç®åã«å¯ŸããŠå®çŸ©ãããŠããŸãã
確ãã«ãç§ã¯ãããèæ ®ããŠããŸããã§ããã
ãã¯ãã«ãšããã«é¢é£ããå察ãã¯ãã«ïŒå ±ãã¯ãã«ãç·åœ¢æ±é¢æ°ãªã©ïŒã®éã®èªç¶å圢æ§ã¯ããªãŒã¹è¡šçŸå®çãšããŠç¥ãããŠããŸãããåè ã¯ãã¡ãããé·ãnã®ãã¯ãã«ãCããC ^ãžã®ç·åœ¢ååãšããŠè§£éããå Žåã®ãšã«ããŒãå ±åœ¹ãšåçã§ãã nãã€ãŸããµã€ãºïŒnã1ïŒã®è¡åãšããŠã
ç§ã¯äœè«ãããªãããã«ããŠããŸããïŒç§ã¯ãããèŠæã§ãïŒã AbstractVector
ã1D Array
é¢é£ä»ããŠããã®ã§ããã®æåŸã®ããããå°ãååŸãããšæããŸãã èšãæããã°ã AbstractVector
ã¯ãæ°åŠçãªæå³ã§ã®ãæœè±¡çãªãã¯ãã«ããæå³ããã®ã§ã¯ãªãããäºåå®çŸ©ãããåºæºãæã€ãã¯ãã«ã®æ°å€èŠçŽ ããæå³ããŸãã ãã¯ãã«ã®ãµã€ãºã(n,1)
ãããMATLABã¯ããããç°¡åã«æãåºããŸããã
æèã®ç³§ãšããŠã |a>|b><c|
圢åŒã®ãã¹ãŠã®ãã³ãœã«ãåãããããã|c><a|<b|
ãããããïŒåç·åœ¢ïŒæŒç®åãäœãšåŒã³ãŸããïŒ ç§ã¯åžžã«ãããããšã«ããŒãå
±åœ¹ããšããŠãã¯ãã«å察ããã³æšæºæŒç®åå
±åœ¹ãšäžç·ã«ãã³ãã«ããŸããããããããããã¯ããŸãã«ãæ¥ãã¹ãããšã§ãã
@alanedelmanãšäŒè©±ããïŒ4774ã§ã®ç§ã®ç«å Žã«ã€ããŠããã€ãã®ããšã
Covector
ãŸãã¯RowVector
ã¿ã€ããå°å
¥ããŸãã*
ã '
ã .'
ã /
ã \
ãå€ånorm
ïŒãã®ä»ïŒ ïŒãã®ã¿ã€ãã¯ãç·åœ¢ä»£æ°ã®å
±ãã¯ãã«ãšããŠæ©èœããŸããsize(v')
ã¯(1, length(v))
ã§ãããã®ã¢ãããŒãã§ã¯ãBaseã®ãã¹ãŠã®ãžã§ããªãã¯é¢æ°ãç·åœ¢ä»£æ°ãšããŠåé¡ããå¿
èŠããããŸãã ç¹ã«ã size
ã¯é
åé¢æ°ã§ãããç·åœ¢ä»£æ°ã®å®çŸ©åã§ã¯æå³ããããŸãããç·åœ¢ä»£æ°ã¯ãåºæ¬çã«ãã¯ãã«ïŒã圢ç¶ãããªãã次å
ã®ã«ãŒãã£ããªãã£ã®ã¿ïŒãç·åœ¢å€æïŒããŸããŸ2次å
é
åã§è¡šãããå ŽåããããŸãïŒãããã³ã¹ã«ã©ãŒã æãã€ãã1ã€ã®ç¹å®ã®äŸã¯ã cumsum
ãããã¯ãçŸåšã1ã®æ¬¡å
åŒæ°ãæå®ãããŠãããã®ããã«2次å
é
åã§åäœããŸãã ããã¯sum
ãšççŸããŸããããã¯ãããã©ã«ãã§1ã®æ¬¡å
åŒæ°ã«èšå®ãããã®ã§ã¯ãªããé
åå
šäœã®åèšãè¿ããŸãã ãŸãã cumsum
ãããã¯ãã«ã§ã®åäœã«å¯Ÿå¿ããæ¹æ³ã§ã³ãã¯ãã«ã§åäœããã®ãé²ããŸãã cumsum
ã¯ãN次å
ã®åã®äž»èŠãªé åºã§çŽ¯ç©çã«åèšããããšã«ãããäžè¬çãªé
åã§åäœããå¿
èŠããããšæããŸãã ããäžè¬çã«ã¯ããã£ã¡ã³ã·ã§ã³åŒæ°ã¯ããã©ã«ãã§1ã«èšå®ãããã¹ãã§ã¯ãããŸããã
ã³ãã¯ãã«ãèå¥ããããã®ã€ã³ã¿ãŒãã§ãŒã¹ããªãå Žåã¯å°ãå¿é ã§ãã ãµã€ãºãndimãªã©ã®ã»ãšãã©ã®æäœã§ã¯ãä»ã®2次å ãŸãã¯1次å é åãšãŸã£ããåãã§ãããšèšããŸãã ããšãã°ãããç©ãè©Šãããšã«ãã£ãŠã®ã¿ãéããããããŸãã AFAICTãªããžã§ã¯ããRowVectorã§ãããã©ããã確èªããå¿ èŠããããŸãããç¹å®ã®äžè¬çãªããããã£ãæã€ããã«ãªããžã§ã¯ãã«ç¹å®ã®ã¿ã€ããå¿ èŠã«ãªãããšã¯éåžžã«ãŸãã§ãã
@StefanKarpinskiç§ã¯ãã®ãã¹ãŠã«åæããŸãã ç¹ã«ããã®é¢æ°ã¯ãé åãæŒç®ãŸãã¯ãç·åœ¢ä»£æ°ãæŒç®ã®ããããã§ãã
ç§ã¯ããã§ãµã€ãº=ïŒ1ãnïŒ TransposedVector
ããå§ããŸãããããã¯ããªããèšããšããã§ãã ãã¹ããšãã¹ãŠã®çµã¿åãã*
ã \
ã /
ããå¯èœãªc
ãšt
ããšã«é©åã«ã«ããŒããã®ã«æéãããããŸãããããŒã¹å
ã®ä»ã®ã¡ãœãããšã®ãããŸãããåé¿ããªãããã¡ãœãããšå€æŽã¡ãœããã ããã¯é
ãã§ããäœç³»çãªäœæ¥ã§ãããããããç§ã¯æºåãã§ãããšãã«ãããããŒã¹ã«åŒã£åŒµãããšãã§ããŸããïŒããããååãå€æŽããïŒã
ãããã¯Covector
ãšã®éãã§ãããå®éã«ã¯å
±åœ¹è»¢çœ®ïŒãŸãã¯äžè¬çãªå Žåã¯ããã«äžè¬çãªå€æïŒïŒã§ããå¿
èŠããããŸããã RowVector
ãŸãã¯TransposedVector
æŠå¿µçã«åçŽã§ãã
@JeffBezanson ãã·ã³ã°ã«ãã³ã次å
ãæã€ããã«indices()
ã§ããããšã¯ãããŸããïŒ
ãã ããç¹å®ã®äžè¬çãªããããã£ãæã€ããã«ããªããžã§ã¯ãã«ç¹å®ã®ã¿ã€ããå¿ èŠã«ãªãããšã¯éåžžã«ãŸãã§ãã
ããã§ãããããç¹æ§ãäœãã ã£ããã¯ãŒã«ã§ãããã ããäžè¬çã«ç·åœ¢ä»£æ°ãé
åãã解ãã»ããããšãã§ããããšãæãã§ããŸããããããã¯å€§ããªå€åã§ãã ãããããJuliaã«å®è£
ãããåªããç¹æ§æ§æããªããã°ããã¡ããšãããã®ã«ã¯ãªããŸããã ããã§ã®åé¡ã¯ã3ã€ã®ãã®ïŒãã¯ãã«ãã³ãã¯ãã«ãè¡åïŒã2ã€ã®ã¿ã€ãïŒ AbstractArray{1}
ãšAbstractArray{2}
ïŒã«ãããã³ã°ããŠããããããã®ãã¡ã®1ã€ïŒã³ãã¯ãã«ïŒãç¹å¥ãªãµãã¿ã€ãã«ãªãããšã ãšæããŸããä»ã®ã
åºæ¬çãªãã©ãããŒãã®å®è£
以å€ã®ãã®ãå¿
èŠã«ãªãå Žæãèãããããã AbstractTransposedVector
ãããã±ãŒãžã«å
¥ããŠããã ããã
@JeffBezanson ïŒç§ã¯ããªãã®å¿é ãããŸããã ç·åœ¢ä»£æ°æŒç®ãé€ããŠã1Ãn 2dæœè±¡é åãšåãããã«åäœãããšããèãæ¹ã§ããç·åœ¢ä»£æ°æŒç®ã§ã¯ãåãã¯ãã«ã®å察空éïŒ1Ãn 2dæœè±¡é åãšååïŒã®ããã«åäœããŸãã ã³ãã¯ã¿ãŒããã§ãã¯ãããå Žåã¯ãäŸãã°ãã£ã¹ãããããããšã§ã¿ã€ãããã§ãã¯ã§ããŸãã
ããã«åãçµãç§ã®è©Šã¿ã«é¢ããææ°æ å ±ïŒ
TransposedVectors.jlã¯ããæ©èœãå®äºããããšç§ã¯ä¿¡ããŠããŸãã ããã«ã¯ã @ StefanKarpinskiãããã§è¿°ã¹ãããšãå®è¡ããããã«å¿
èŠãªãã¹ãŠã®æ©æ§ãå«ãŸããŠããŸã-ãã¯ãã«ã®è»¢çœ®ã¯ã2次å
ã®1xnãµã€ãºã®æœè±¡é
åãšããŠåäœãããã¯ãã«ã®ã©ãããŒã§ã-ãã ããç·åœ¢ä»£æ°æŒç®ïŒ *
ã /
ã \
ã '
ã .'
ã norm
ïŒãè¡ãã¯ãã«ïŒãŸãã¯ãã¥ã¢ã«ãã¯ãã«ïŒãšããŠåäœããŸãã
ããªãã¯ãã®ããã«ããããã§ãã¯ããããšãã§ããŸãïŒ
julia> Pkg.clone("https://github.com/andyferris/TransposedVectors.jl")
...
julia> using TransposedVectors
WARNING: Method definition transpose(AbstractArray{T<:Any, 1}) in module Base at arraymath.jl:416 overwritten in module TransposedVectors at /home/ferris/.julia/v0.5/TransposedVectors/src/TransposedVector.jl:28.
WARNING: Method definition ctranspose(AbstractArray{#T<:Any, 1}) in module Base at arraymath.jl:417 overwritten in module TransposedVectors at /home/ferris/.julia/v0.5/TransposedVectors/src/TransposedVector.jl:29.
WARNING: Method definition *(AbstractArray{T<:Any, 1}, AbstractArray{T<:Any, 2}) in module LinAlg at linalg/matmul.jl:86 overwritten in module TransposedVectors at /home/ferris/.julia/v0.5/TransposedVectors/src/mul.jl:9.
WARNING: Method definition At_mul_B(AbstractArray{#T<:Real, 1}, AbstractArray{#T<:Real, 1}) in module LinAlg at linalg/matmul.jl:74 overwritten in module TransposedVectors at /home/ferris/.julia/v0.5/TransposedVectors/src/mul.jl:37.
WARNING: Method definition Ac_mul_B(AbstractArray{T<:Any, 1}, AbstractArray{T<:Any, 1}) in module LinAlg at linalg/matmul.jl:73 overwritten in module TransposedVectors at /home/ferris/.julia/v0.5/TransposedVectors/src/mul.jl:64.
julia> v = [1,2,3]
3-element Array{Int64,1}:
1
2
3
julia> vt = v'
1Ã3 TransposedVectors.TransposedVector{Int64,Array{Int64,1}}:
1 2 3
julia> vt*v
14
julia> vt*eye(3)
1Ã3 TransposedVectors.TransposedVector{Float64,Array{Float64,1}}:
1.0 2.0 3.0
ããã©ãŒãã³ã¹ãäœäžããå¯èœæ§ããããŸãããã³ãããŒã¯ã圹ç«ã€ã§ãããã ã³ããŒãå°ãªããªãå ŽåïŒè»¢çœ®ãæ æ°ãªå ŽåïŒãããã°ãã³ããŒãå€ããªãå ŽåããããŸãïŒããšãã°ããã¯ãã«ã®å
±åœ¹ã³ããŒïŒè¡åã§ã¯ãªãïŒãAc_mul_Bc
ã§äœæãããå ŽåããããŸãïŒã ãããŠãã©ãããŒèªäœã¯ãäžå€ã®å¯å€ãã£ãŒã«ããã€ã³ã©ã€ã³åãããŸã§ããããªã³ã¹ããããããŸãïŒå¹žããªããšã«ãããã¯StaticArrays.jl ïŒsmileïŒã§ãã§ã«ããŸãæ©èœããŠããŸãïŒã å¿
èŠã«å¿ããŠãããçš®ã®StridedArray
ã§ããããšã確èªãããšããåé¡ããããŸãã
ãã®ã¢ãããŒãã奜ããªäººã¯ãããã«PRãäœæããŠã³ãŒããBase
ã«ç§»è¡ããããšã確èªã§ããŸãïŒããã±ãŒãžã«ã¯ãã§ã«åäœãã¹ããããããã¹ãŠã®ãããŸããã解決ãããŠããŸãïŒã ïŒãŸãã @ jiahaoã¯ããã¥ã¢ã«ãã¯ãã«ã®1次å
æœè±¡é
åããŒãžã§ã³ãå®éšããããšè¿°ã¹ãŠããŸããããé²å±ããã£ããã©ããã¯
転眮è¡åã®ã©ãããŒåããªããã°ããã®ãããªPRã¯v0.6ã§æå³ããããšäººã
ã¯æããŸããïŒ è»¢çœ®ããããã¯ãã«ã¯æå³ã®å€åã§ããã転眮ãããè¡åã¯ããæé©åãããŠããã®ã§ãå¥ã
ã«å
¥ããããšãã§ãããšæããŸãã ãã¡ãããããã€ãã®è»¢çœ®ããã¥ãŒã§ãããããã€ããã³ããŒã§ããå Žåãããã¯ãå¥åŠãã«èŠãããããããŸãã-æèŠïŒ èæ
®ãã¹ããã1ã€ã®ãã€ã³ãã¯ã転眮ãããè¡åãšãã¯ãã«ã®äž¡æ¹ãå«ãŸãããšããã¹ãŠã®At_mul_Bt
é¢æ°ãåé€ãã *
ã¡ãœããã«çœ®ãæããŠããå®äºããããã«å€ãã®äœæ¥ãè¡ãå¿
èŠããããšããããšã§ãã移è¡ïŒåçŽåã¯ããããããããŸããïŒïŒ-ä»ææ«ãŸã§ã«èª°ãããã®ãã¹ãŠãå®è¡ã§ããããŸãã¯å®è¡ããææããããšã¯æããŸãã...
çŽ æŽãããä»äºã@ andyferrisïŒ äžè¬çãªæ æ°ãªConjugate
ã©ãããŒãè©ŠããŠã¿ãŸãããïŒ
@andyferrisç§ã¯ã¿ã€ã€ã蹎ã£ãããããŠãããããªã奜ãã ã å³å¯ã«ã¯æ¹åã®ããã§ãããããã©ãŒãã³ã¹ã®åé¡ãèŠã€ãã£ããšãã«åŠçã§ããããšãæãã§ããŸãã ä»ã®äººãäœãèšããªããã°ãªããªããèŠãŠã¿ãŸãããã
ã¿ããªããããšã ïŒïŒ
äžè¬çãªæ æ°ãª
Conjugate
ã©ãããŒãè©ŠããŠã¿ãŸãããïŒ
ãŸã ãæéããããªããŠãã§ãããããããŸããããæ£çŽã12ææ«ãŸã§ã«ãããªã«çµãããªãã®ã§ã¯ãªãããšå¿é ã§ããã å°æ¥ãèŠæ®ããŠãç§ã¯æçµçã«ãç·åœ¢ä»£æ°ã®ããã«ãã£ã¹ããããã次ã®ãunionallãã¿ã€ãããããããããªããšèããŠããŸããã
AbstractVector
Conjugate{V where V <: AbstractVector}
ïŒãŸãã¯Conj{V}
ãããããConjArray
ïŒãã¡ãããä»»æã®æ¬¡å
ã®é
åãåãå
¥ããŸãïŒTransposedVector
ïŒãŸãã¯RowVector
ïŒïŒTransposedVector{Conjugate{V where V <: AbstractVector}}
AbstractMatrix
Conjugate{M where M <: AbstractMatrix}
TransposedMatrix
ïŒãŸãã¯åã«Transpose{M}
ïŒïŒTransposedMatrix{Conjugate{M where M<:AbstractMatrix}}
ïŒããã«ãçŸåšDenseArray
ãStridedArray
ãšåŒãã§ãããã®ãªã©ãåºç€ãšãªãã¹ãã¬ãŒãžã®ãã¹ãŠã®ç¹å®ã®ç¹æ§-ïŒ18457ã«ãã£ãŠããããå°ãç°¡åã«è¡šçŸã§ããããã«ãªãããšãé¡ã£ãŠããŸãïŒã
ååãä»ããããšã¯å¥ãšããŠãããã¯åççãªèšç»ã®ããã«èãããŸããïŒ
å³æã®ãã€ã¯ã·ã§ãã£ã³ã°ã«é¢ããŠã¯ãçŸåšããã±ãŒãžã«å«ãŸããŠãããã®ã®ããŒã¹ãžã®PRãšããŠããã¯ãã«ãšè¡åã®äž¡æ¹ã«æ±çšã®Transpose
ã©ãããŒã§ããTransposedVector
ã RowVector
ãåªå
ããŸããïŒ ã ãŸãã¯ãä»ã®äœãïŒ
@andyferrisã®å®è£ ã«ãã£ãŠæäŸãããåäœã¯ããªãè¯ããæ¹åãããŠãããšæããŸãã ããããç§ã®æžå¿µãããå°ãããè¡šçŸããããšæããŸãã
åé¡ã¯ãæ°ããé
åã¿ã€ãã®å®çŸ©ã«ãããŸãã ããšãã°ã DArray
ã¯AbstractArray
ãµãã¿ã€ãã§ããããã DArray
ã¯AbstractVector
ãŸãã¯AbstractMatrix
ããããšãã§ããŸãã çæ³çã«ã¯ããã¯ãã«/ãããªãã¯ã¹ã®åºå¥ãè¡/å/ãããªãã¯ã¹ã«æ¡åŒµããã ããªã®ã§ã DArray
ã¯AbstractRow
ã AbstractCol
ããŸãã¯AbstractMatrix
ã ã¿ã€ãéå±€ã¯æ¬¡ã®ããã«ãªããŸã
AbstractArray
AbstractVector
AbstractRowVector
AbstractColumnVector
AbstractMatrix
...
æšæ¥ããã«ã€ããŠ@jiahaoãšè©±ããŠã
ããã§ã¯ããã¹ãŠã®AbstractVector
ãåãšããŠäœ¿çšã§ããããã§ã¯ãªããšããç¹ã§ãããã€ãã®åªå
é äœãããå ŽåããããŸããäŸïŒ
julia> isa(1.0:10.0, AbstractVector)
true
julia> randn(10,10) * 1.0:10.0
ERROR: MethodError: no method matching colon(::Array{Float64,2}, ::Float64)
https://github.com/JuliaLang/julia/issues/4774#issuecomment-59428215ã§ç§ãæ±ããŠããåé¡ã«å¯ŸåŠã§ããŸã
ããã¯ç¯å²ã®åšãã«æ¬åŒ§ããªãã ãã§ããïŒ
ããã¯åãªãåªå é äœã®åé¡ã§ãã
julia> randn(10,10) * (1.0:10.0)
10-element Array{Float64,1}:
-22.4311
â®
ããã§ã®æé©ãªè§£æ±ºçã«ã¯ç¹æ§ãå¿ èŠã§ããããã«æãããããšã«åæããŸãããããã@andyferrisã®äœæ¥ã
ãããè¯ãç¹ã Fortressãšåæ§ã«ã空çœã®åªå é äœãæ£ãããªãå Žåã¯æ§æãšã©ãŒã«ãªããŸãã
MITã°ã«ãŒãã¯ãäžèšã§èª¬æããåéå±€ãå®è£ ãã1ã€ã®æ¹æ³ã¯ãé åéå±€ã«åãã©ã¡ãŒã¿ãŒãè¿œå ããããšã§ãããšææããŸããã
abstract AbstractArray{T,N,row}
type Array{T,N,row} <: AbstractArray{T,N,row}
end
typealias AbstractVector{T} AbstractArray{T,1}
typealias AbstractRowVector{T} AbstractArray{T,1,true}
typealias AbstractColVector{T} AbstractArray{T,1,false}
typealias AbstractMatrix{T} AbstractMatrix{T,2}
typealias Vector{T} Array{T,1,false}
typealias Matrix{T} Array{T,2,false}
ç§ã¯ããã®ãã¹ãŠã®æå³ãç解ããŠããŸãã---ããããææªã®ããšã¯Array{Int,1}
ãæœè±¡åã«ãªãããšã§ã---ãããããã¯åéå±€ãšå¿
èŠãªæœè±¡åãã»ãŒæ£ç¢ºã«ååŸããŠããããã§ãã
䟡å€ãããã®ã¯ãããã¯å®å šã«ãã©ã¡ãŒã¿ãŒåãããŠããªãã¹ãŒããŒã¿ã€ãã®ãŠãŒã¹ã±ãŒã¹ã§ãã ãããã¯æé»ã®ããã©ã«ããã©ã¡ãŒã¿ã«ãªãå¯èœæ§ããããŸãã
abstract AbstractArray{T,N,row}
type Array{T,N} <: AbstractArray{T,N}
end
isrow{T,N,row}(::AbstractArray{T,N,row}) = row
isrow{T,N}(::AbstractArray{T,N}) = false
julia> isrow(Array{Int,2}())
false
ãã¡ãããããã¯ãã£ã¹ããããå°ãåä»ã«ããŸãâŠãããŠããã¯ãµããŒããã䟡å€ããªããããããŸããã ããã¯ãã ã®åŸçã§ãã
ç§ã«ã¯ããã¯å®çŸ©ããããšãšåçã®ããã§ã
type Array{T,N} <: AbstractArray{T,N,false}
end
ããã§å¿
èŠã«ãªãã®ã¯ãããçš®ã®ãããã©ã«ãã®åãã©ã¡ãŒã¿ãã§ããããšãã°ãXãšYã«èªç±å€æ°ããªãåArray{X,Y}
ãäœæãããšãå®éã«ã¯Array{X,Y,false}
ãŸãã
å¥ã®ã¢ã€ãã¢ïŒå
ç©v'v
ããŠã¹ãã«ããŒè¡šèšãä¿æããå·Šã®å
±ãã¯ãã«ã¯ãããããv'*v
ããã³v'*A
ãšããŠè§£æãã代ããã«ãäžçœ®'
ãç¬èªã®æŒç®åã«ããããšã«ããã v'A
ä¹ç®ããŸãv'*A
ã v'
IDã v*v
ããšã©ãŒã v*A
ããšã©ãŒã«ããããšãšçžãŸã£ãŠãããã¯æãŸãããã®ã®å€ããäžããå¯èœæ§ããããŸãã å€ç©ãouter(v,v)
ãšæžãå¿
èŠããããŸãã
ãã®ãããªã¹ããŒã ã§ã¯ã v'
ã¯noopãŸãã¯ãšã©ãŒã«ãããªããŸãããã®ãããªã¹ããŒã ã§ã¯ãã¯ãã«ã転眮ããçç±ããªããããè¡åã«å¯ŸããŠã®ã¿æå³ããããŸãã
@JeffBezanson AbstractRowVector
ãæé©ã§ããããšã«åæããŸãïŒãã ããæ£çŽãªãšããããŠãŒã¹ã±ãŒã¹ãèããããšãã§ããªããããããã±ãŒãžã«å®è£
ããŸããã§ããïŒã ããã¯AbstractMatrix
ãµãã¿ã€ããšããŠçããããšãã§ããããšãææããããšæããŸãã ç§ããã®æ¹åã«é²ãã çç±ã¯ã broadcast
ãç·åœ¢ä»£æ°ããããžã¥ãªã¢ã®ã³ã¢ã³ã³ã»ããã§ããããã«æããã人ã
ã¯è¡ãã¯ãã«ãè¡ã§ãããšæåŸ
ããããã§ãã
ãã¡ããã RowVector <: AbstractMatrix
䜿çšããããšã¯ãæ®å¿µãªããçšèªã®äœ¿çšã§ãã ããã¯ã2Dé
åãšæœè±¡è¡åã«åãååãä»ããããŠããããã ãšæããŸãã
ããã¯åã«ãèšããŸãããããã®åé¡ã¯éåžžã«é·ãã®ã§ãèšãæããŸããJuliaã®ãããªãžã§ããªãã¯èšèªã§ã¯ããããŒã¿ã®é
åãããããã£ãAbstractArray
äž»ãªèæ
®äºé
ã«ããå¿
èŠããããŸãã broadcast
ãã©ã®ããã«åäœãããããçãããšãããã1Dã2DããããããŸãã è¡ãšåã®èŠ³ç¹ããèãããå Žåã¯ã 1 x n
è¡ãã¯ãã«ãæãçã«ããªã£ãŠããŸãã å察ãã¯ãã«ãæ€èšãããå Žåã¯ã1Dãæãçã«ããªã£ãŠããŸã-ãããŠç§ãããã«æºè¶³ããŠããŸãïŒ ãã ãããã¯ãã«ã®å察ãåãããšã¯ãããŒã¿ãå圢æãããããè€éã§ãïŒããšãã°ãå°ãªããšã掻çšããµããŒãããå¿
èŠããããŸãïŒã
ãè¡ãã®å³ã¯ãå žåçãªãããã°ã©ããŒã®æåŸ ã«äžèŽãããšæããŸãããé«åºŠãªæ°åŠã®ãã¬ãŒãã³ã°ãåãã人ã¯ãããåªããæœè±¡åã§ãããããå察ãã¯ãã«ãããæå¹ã«æŽ»çšã§ããå¯èœæ§ããããŸãïŒãã ããåºæ¬çãªç·åœ¢ä»£æ°ã®ç¥èãããªã人ã«åæ ããïŒã ã§ã¯ããžã¥ãªã¢ã¯ã©ã®ãªãŒãã£ãšã³ã¹ãã¿ãŒã²ããã«ããŠããŸããïŒå€ãã®å žåçãªMATLABãŠãŒã¶ãŒãããæ°åŠçãªç²Ÿå·§ããæã£ãŠãã人ããŸãã¯å°ãªã人ã§ããïŒ
ïŒç§ã®èãã§ã¯ããžã¥ãªã¢ã¯ããžã§ããªãã¯ãããã°ã©ãã³ã°èšèªãç®æããŠããã®ã§ãåŸè ã®èŽè¡ãã¿ãŒã²ããã§ããïŒã
å¯èœãªã¿ã€ãããªãŒã«ã€ããŠè°è«ããŠããã®ã§ãå°æ¥çã«ã¯Buffer
ãšãµã€ãºå€æŽå¯èœãªããªã¹ããã䜿çšããŠã次ã®ãããªãã®ã«æ²¿ã£ãã€ã³ã¿ãŒãã§ã€ã¹ã®æœè±¡çãªããªãŒãæ³åããŠããŸãã
AbstractArray{T,N} # interface includes broadcast, Cartesian, getindex, setindex!, etc.
AbstractArray{T,1}
AbstractList{T} # resizeable, overloaded with `push!` and so-on
AbstractVector{T} # non-resizeable, overloaded for *, /, \, ', .', etc
AbstractArray{T,2}
AbstractRowVector{T} # non-resizeable, overloaded for *, /, \, ', .', etc
AbstractMatrix{T} # non-resizeable, overloaded for *, /, \, ', .', etc
ãã¡ããã AbstractDualVector{T} <: AbstractArray{T,1}
代ããã«AbstractRowVector
AbstractDualVector{T} <: AbstractArray{T,1}
ã䜿çšããããšãã§ããŸãã
ããããã¹ãŠã«é©åããæè»ã§å
·äœçãªArray
ã¿ã€ãã䜿çšããããšã¯å°é£ã§ãïŒããããäžèŠã§ãïŒã ç¹æ§ã«ããããµããŒããããŠããã€ã³ã¿ãŒãã§ã€ã¹ã§ãããã®éããããç°¡åã«è¡šçŸã§ããããã«ãªããŸãã
AbstractVector
ãC ++ std::vector
ãšç·åœ¢ä»£æ°ãã¯ãã«ã®äž¡æ¹ã§ãããšããããšã¯ãç§ã«ã¯å°ãçææ°ãªããã«æããŸããïŒïŒïŒç¹ã«ãé
åã€ã³ã¿ãŒãã§ã€ã¹ã¯ããããæ¬åœã«ãæœè±¡çãªãã¯ãã«ãã«ãªãããšã¯æ±ºããŠãªãããšãæå³ããŸããç·åœ¢ä»£æ°ã»ã³ã¹ïŒäŸïŒåºåºãªãïŒïŒ
ã¯ãããµã€ãºå€æŽã®åäœãåé¢ãããšããã§ãããã ç§ã¯ãã®ããã«ä¹ã蟌ãã§ããŸãã
ãã®åéå±€ã¯ãBaseã«å¥ã
ã®ãè¡åããšã2次å
é
åãã®å
·è±¡åãããããšãæå³ããŠããããã§ãã ããšãã°ã Array{T,2}
ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãå®éã«ä»ã®è¡åã¿ã€ããè¿ãããã«ããããšã§ããããåé¿ããããšããããšãã§ããŸãããããªãéãããã§ãã å€åç§ã¯èª€è§£ããŠããŸãã
ãã®åéå±€ã¯ãBaseã«å¥ã ã®ãè¡åããšã2次å é åãã®å ·è±¡åãããããšãæå³ããŠããããã§ãã
ããã§ã...ãããããŸãããã«ã¯ãç¹æ§ãå¿
èŠã ãšæããŸãã ç§ã¯ããããã€ã³ã¿ãŒãã§ãŒã¹ã®æœè±¡çãªããªãŒããšåŒãã ããšãèŠããŠãããŠãã ããã çŸæç¹ã§ãããè©Šã¿ããšãããªããèšã£ãããã«éãäœããå¿
èŠã«ãªããŸãã ãããã Buffer
ãå®äºãããšããã«ãããããAbstractList <: AbstractVector
æ¿å
¥ïŒããã³é¢é£ããã¡ãœããã移åïŒããããšãã§ããŸãã
çŸæç¹ã§ã¯ããµããŒããããŠããã€ã³ã¿ãŒãã§ã€ã¹ãšã¿ã€ãããªãŒéã®æ¥ç¶ã¯ããªãç·©ãã§ãã ïŒæœè±¡ïŒé
åãå¯å€ã§ãããïŒã€ãŸãã setindex!
ãµããŒããããïŒããµã€ãºå€æŽå¯èœã§ããããstridedãBase
ã§å®çŸ©ãããåã§ã®ã¿æ©èœããããªã©ããã£ã¹ãããæã«å€æããã®ã¯å°é£ã§ãããŠãŒã¶ãŒãæ©èœããå¹
åºãå
¥åã§å¹ççãªã¡ãœãããæäŸããã®ã¯é£ããã§ãïŒããã¯StaticArrays
ããã®ç§ã®çµéšã§ãïŒã
ã¿ã€ãéå±€ã®ãã·ãŒé åãšãã©ã¡ãŒã¿ãŒåãããæœè±¡åã®åççãªåœ¹å²ã«ã€ããŠã®äŒè©±ã«ã€ããŠã®èãã éæå¯èœãªå ŽåãJuliaã¯ãå°é家ãæå³ããããšãšå°é家ãè¡šçŸããæå³ãå®è¡ããããã®ã³ãŒãã®èšè¿°æ¹æ³ã®åé¢ãç°¡çŽ åããã³è»œæžããããšããå§ãããŸãã
ç§ãã¡ã䜿çšããããšãéžæããå¯èœæ§ã®ãã1ã€ã®èŠåã¯ãAny以å€ã®æœè±¡åã䜿çšããŠãä»éããå ·è±¡åãå ±æãããäŒæ¯ã容æã«ããäžã§ããªã³ããããžãŒé åã圢æããäžè¬çãªæ¹æ³ã§ãã ããã«ãããéåžžã«å°ãªãã³ã¹ãã§ããã«ãã³ã³ããã¹ãã®æèŠãåäžããŸããåéå±€ã®ããéšåãç解ãããšãä»ã®éšåã«ã¢ãããŒãããã®ã«åœ¹ç«ã¡ãŸãã
ç§ããããèŠããšãããã¯äžè¬åãããä¿¡é Œé¢ä¿ããããããã®ã§ãã 解æçãªæœè±¡åã¯ãæ§æããçæçãªé¡äŒŒæ§ã§ãããå ·äœçãªäžèŽã瀺ãè¿é£ãšããŠå ããŸãã çŽæã®åçŽãªæå¿«ããéã¶ãã©ã¡ãŒã¿ãŒåã«ããããžã¥ãªã¢ã¯ããå°ãªããã³ã»ã³ã¹ãªæéã§å€ãã®ããšãéæããŸãã
OKã TransposedVectorsã«é¢ããã³ã¡ã³ããããã ããã°å¹žãã§ãã ããªããã£ããããŠããŠãPRã«å€ããæºåãã§ããŠãããšæããŸãããããã«ãªã¹ãããããã€ãã®é¢é£ããåé¡ããã
ïŒäŸïŒ RowVector
ã¯TransposedVector
ãããè¯ãååã§ããïŒ [1 2 3]
ã¯RowVector
ãŸãã¯Matrix
ã§ããïŒ indices(row, 1)
ãšã¯äœã§ãã
RowVectorã®+1
2016幎12æ20æ¥åå7:01ããAndyFerrisã [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
OKã TransposedVectorsã«é¢ããã³ã¡ã³ããããã ããã°å¹žãã§ãã æããŸã
ããã¯ããªãå å®ã«ãªããPRã«å€ããæºåãã§ããŠããŸããã
ç§ãããã«ãªã¹ãããããã€ãã®é¢é£ããåé¡
https://github.com/andyferris/TransposedVectors.jl/issues ãïŒäŸïŒRowVectorã¯TransposedVectorãããåªããååã§ããïŒ[1 2
3] RowVectorãŸãã¯MatrixïŒ ã€ã³ããã¯ã¹ïŒè¡ã1ïŒãšã¯äœã§ããïŒïŒâ
ããªããã³ã¡ã³ãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/JuliaLang/julia/issues/4774#issuecomment-268170323 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AAm20YYqsXmprI23GgI5PYyWStpTOq5qks5rJ309gaJpZM4BMOXs
ã
è¡/åã®èŠåãé¿ãããã®ã§ããã Vector
ãšRowVector
ïŒãŸãã¯ColVector
ãšRowVector
ãããã®ã¯å¥åŠã«èããããšæããŸãã TransposedVector
ãŸãã¯DualVector
å Žå
@felixrehren DualVector
ã¯ãç§ãå®è£
ãããã®ãšã¯ç°ãªãã»ãã³ãã£ã¯ã¹ãæã€å¿
èŠããããšæããŠããŸããäž»ã«1次å
ã§ããïŒæ°åŠçã«ã¯ããã¯ãã«ã®å察ã¯ãã¯ãã«ã§ãïŒãä»ã®å察ç¹æ§ïŒè€çŽ å
±åœ¹ãªã©ïŒããããŸãã ã ããã¯åé¡ãããŸããããå®è£
ãå°ãé£ãããäžäœäºææ§ãå°ãäœãããšãããããŸããã
TransposedVector
ãšããååã¯å€§äžå€«ã§ãã ããããããã¯å°ãé·ãã§ãã ãŸãããã®ã¿ã€ãã®ãªããžã§ã¯ãã¯ã Vector
転眮ããããšã«ãã£ãŠã®ã¿ååŸã§ããããšã瀺åããŠããŸãã ããããä»ã®æ¹æ³ã§ããããšãã°è¡åã®1è¡ãæœåºããããšã§ã TransposedVector
äœæã§ãããšæããŸããïŒ
RowVector
ã¯è¯ãååã ãšæããŸããç°¡æœã§ãæ£ç¢ºã§ãçŽæçã§ãã @felixrehren ãè¡/åã®ç»åã圹ç«ã€ãšæããŸãã é£çµããã®ä»ã®äžè¬çãªé
åæäœïŒä¹ç®ä»¥å€ïŒãè¡ããšãã¯åžžã«ããã¯ãã«ãã©ã¡ãã®æ¹åãåããŠããããèããå¿
èŠããããããããããé¿ããããªãããšã§ãã
DualVector
ãæªãã¯ãããŸãããã CoVector
ã¯åœ¢åŒçã§ã¯ãªãããã«èãããŸãã
ç§ã以åã«è
ããPRã¯çŸåšïŒ19670ã§æåºãããŠããŸãã ä»ã®ãšããRowVector
è¡ããŸããã
ããããä»ã®æ¹æ³ã§ããããšãã°è¡åã®1è¡ãæœåºããããšã§ãTransposedVectorãäœæã§ãããšæããŸããïŒ
ããã¯å®éã«ã¯1ã€ã®ãã ããã®ãã€ã³ãã§ã-ç§ã¯ãŸã ãã®ããã®åªããæ§æãèããŠããŸããã äœãæ¡ã¯ïŒ
ããããä»ã®æ¹æ³ã§ããããšãã°è¡åã®1è¡ãæœåºããããšã§ãTransposedVectorãäœæã§ãããšæããŸããïŒ
ããã¯å®éã«ã¯1ã€ã®ãã ããã®ãã€ã³ãã§ã-ç§ã¯ãŸã ãã®ããã®åªããæ§æãèããŠããŸããã äœãæ¡ã¯ïŒ
æåã¯ã matrix[scalar,range]
ïŒããã³ä»ã®åæ§ã®æ§é ïŒãè¡ãã¯ãã«ãçæããããšã¯é
åçã§ããããã«èŠããŸããããããã¯å€æ¬¡å
é
åã®çŸåšã®ã€ã³ããã¯ã¹äœæã»ãã³ãã£ã¯ã¹ããã®å€§å¹
ãªéžè±ã§ãããç¹å¥ãªå Žåã¯ç§ãäžå®ã«ãããŸãã
代ããã«ã RowVector
ïŒããã«èšãã°Vector
ïŒãå埩å¯èœãªåãé©åãªçš®é¡ã®ãã¯ãã«ã«å€æããããšãæãã§ããŸãã 次ã«ã RowVector(matrix[scalar,range])
ãããªããšãè¡ãããšãã§ããŸããããã¯éåžžã«æ確ã§ãé
åã®ã€ã³ããã¯ã¹äœæã®çŸåšã®åäœã劚ããããšã¯ãããŸããã
ããã§ãã i
çªç®ã®è¡ã¯A[i,:].'
ã«ãã£ãŠè¡ã®åœ¢ã§æœåºã§ããŸãããçŸåšã¯v0.5ã§ãããä»åŸããããç¶ããŸãïŒ RowVector
ãäœæããããïŒ Transpose{V<:AbstractVector}
ãŸãã¯æçµçã«æ±ºå®ãããã®ïŒé²è¡äžã®è°è«ã«ã€ããŠã¯ãããåç
§ïŒïŒã å€åãããçãã§ãã
Baseã«2ã€ã®æ°ããé¢æ°ãè¿œå ããã®ã¯ã©ãã§ããïŒ
row(A,i)
ããã³col(A,i)
åŸè
ã¯å¿
èŠãããŸãããã察称æ§ã®ããã ãã§ãã ç°¡æœã§æ確ããããŠA[i,:].'
ãšåãæ°ã®æåã§ã
çã«ããªã£ãŠããVector
ãšRowVector
äžç·ã«äœ¿çšããã®ã¯å¥œãã§ã¯ãããŸããã
ãã®æç¹ã§ã @ andyferrisã®å®è£
ã«åºã¥ãããã®ã䜿çšãããããã¯ãã«è»¢çœ®ãçå£ã«åãæ¢ããªãããšã決å®ããå¿
èŠããããšæããŸãã å¥ã®æ¹æ³ã®äŸãšããŠãææªã®çç¶ãåŠçããã¢ãããŒãã次ã«ç€ºããŸãã v'
ãçŸåšã®ãŸãŸã«ããŸãïŒã€ãŸããè¡è¡åãçæããŸãïŒãã a'b
ãäžçœ®æŒç®åãšããŠè§£æããŸããä¹ç®ã ã€ãŸãã次ã®ãããªåäœã«ãªããŸãã
v'
ã¯è¡è¡åïŒctransposeïŒã§ãv'v
ã¯ã¹ã«ã©ãŒïŒå
ç©ïŒã§ãv'*v
ã¯1èŠçŽ ã®ãã¯ãã«ïŒè¡è¡å*ãã¯ãã«ïŒã§ãv*v'
ã¯å€ç©è¡åïŒãã¯ãã«*è¡è¡åïŒã§ãv'A
ã¯è¡è¡åïŒ "vecmat"ïŒã§ãv'*A
ã¯è¡è¡åïŒmatmatïŒã§ãv'A*v
ã¯ã¹ã«ã©ãŒã§ãïŒmatvec A * vã次ã«ãããç©ïŒ(v'A)*v
ã¯1èŠçŽ ã®ãã¯ãã«ã§ãïŒvecmatã次ã«matvecïŒv'*A*v
ã¯1èŠçŽ ã®ãã¯ãã«ã§ãïŒmatmatã次ã«matvecïŒv''
ã¯åè¡åã§ãïŒãã¯ãã«ctransposeã次ã«è¡åctransposeïŒçŸåšã®ã»ããã¢ããã§ã¯ã2ãš3ã¯åçã§ããã7ã8ã9ã¯åçã§ããããã®å€æŽã¯æ©èœããŸããã ãããã決å®çã«éèŠãªã®ã¯ã倧èãªã¢ã€ãã ã¯ãé¡äŒŒãããã©ãŒã ã®äžã§æãçããæã䟿å©ã§ããããã人ã
ãäžè¬çã«å°éããã¢ã€ãã ã§ãã æ°ããã¿ã€ãã¯ãªãã1ã€ã®æ°ããäžçœ®æŒç®åã ãã§ãã äž»ãªæ¬ ç¹ã¯10ã§ãâ v''
ã¯ãŸã åè¡åã§ãã ãããããæ¥å°ŸèŸ''
ã¯ãã¯ãã«ãåè¡åã«å€æããããã®æŒç®åã§ãããããããã¯å©ç¹ãšèŠãªãããšãã§ããŸãã
äžæ©åŸéããŠãç§ãã¡ãåŠãã ããšã¯ãè¿œå ã®äžäžãŸãã¯æ¬¡å ã®ã©ãã«ä»ãæ©èœããªããã°ããŸãã¯Matlabã®ããã«2次å 以äžã代æ¿å¯èœãšããŠæ±ãããšãªãã«ãå€æ¬¡å é åãç·åœ¢ä»£æ°ãšã¹ã ãŒãºã«ã¢ãªæºã«ããããšã¯ã§ããªããšããããšã§ãã ã§ããããç§ãã¡ã«æ®ãããŠããã®ã¯å©äŸ¿æ§ã®åé¡ã§ããé åãé床ã«è€éã«ããããšãªãããã¯ãã«ãè¡åã«å¯Ÿããäžè¬çãªç·åœ¢ä»£æ°æŒç®ã䟿å©ã«è¡šçŸã§ããã§ããããã ç§ã¯ãã®ã¢ãããŒãã«å®å šã«åºå·ããŠããããã§ã¯ãããŸããããé ååã®éå±€ãããŸãä¹±ããã«æ§æäžã®å©äŸ¿æ§ã«å¯ŸåŠãããã®ã¢ãããŒããä»ã®ã¢ãããŒããçå£ã«æ€èšããå¿ èŠããããšæããŸãã
å¥ã®ã¢ãããŒãã¯ãäžçœ®èŸa'b
ç¹å¥ã«ïŒ *
ããäžã§ïŒè§£æãã v'
å
±åœ¹ãã¯ãã«ãè¿ãããšã§ãã ããäžè¬çã«ã¯ãæ¥å°ŸèŸA'
ã¯é
åã掻çšããŠãã®æ¬¡å
ãæ æ°ã«é転ãããããšãã§ããŸããã A.'
ã¯é
åã®æ¬¡å
ãæ æ°ã«é転ããããã¯ãã«ã®ã¢ã€ãã³ãã£ãã£ãšããŠæ©èœããŸãã ãã®ã¹ããŒã ã§ã¯ãããããã£ã®ãªã¹ãã¯æ¬¡ã®ããã«ãªããŸãã
v'
ã¯ãã¯ãã«ïŒå
±åœ¹ïŒã§ãv'v
ã¯ã¹ã«ã©ãŒïŒå
ç©ïŒã§ãv'*v
ã¯ãšã©ãŒã§ãïŒå
ç©ã«ã¯v'v
ãå€ç©ã«ã¯outer(v,v)
ããå§ãããŸãïŒâ v*v'
ã¯ãšã©ãŒã§ãïŒå
ç©ã«ã¯v'v
ãå€ç©ã«ã¯outer(v,v)
ããå§ãããŸãïŒâ v'A
ã¯ãã¯ãã«ïŒvecmatïŒã§ãv'*A
ã¯ãšã©ãŒã§ãïŒvecmatã«ã¯v'A
ããå§ãããŸãïŒv'A*v
ã¯ã¹ã«ã©ãŒã§ãïŒmatvec A * vã次ã«ãããç©ïŒ(v'A)*v
ã¯ãšã©ãŒã§ãïŒå
ç©ã«ã¯v'v
ãå€ç©ã«ã¯outer(v,v)
ããå§ãããŸãïŒâ v'A'v
ã¯ã¹ã«ã©ãŒã§ãïŒ v'(A'v)
âå
±åœ¹matvecã次ã«å
ç©ïŒv''
ã¯ãã¯ãã«ã§ãïŒ v'' === v
ããã³v.' === v
ïŒãããã®ããããã£ããã¹ãŠæžãåºãã®ã§ããããæãŸãããªãã·ã§ã³ãããããŸããããã¹ãŠã®ãšã©ãŒã±ãŒã¹ã¯ãå®éã«ã¯ã人ã
ãé©åãªæ§æãèŠã€ããŠäœ¿çšããã®ã«åœ¹ç«ã¡ãŸãããã¡ãããæãŸããv'' === v
ããããã£ããããŸãïŒãããŠããŸãããããŒã«ããŸãïŒã .'
ã¯äžè¬çãªæ¬¡å
å転æŒç®åã§ãïŒã ãããã«ç°ãªãã ãã®éåžžã«é¡äŒŒããæ§æãæã€ããšã¯ããããããã£ãšæ··ä¹±ããŸãã
â ãããã®æäœãæ©èœããããã«ãŠãŒã¶ãŒã³ãŒãã'
ãš*
ããªãŒããŒããŒãããå Žåã«ãšã©ãŒãçºçãããªã¹ã¯ããããŸããã解ææã«ãããããã£ããããŠããæ£ç¢ºãªãšã©ãŒãæ€åºã§ããå¯èœæ§ããããŸãã ãããã®æšå¥šäºé
ãæ£ããããã«ã¯ãæ æ°ãªæŽ»çšã©ãããŒãå¿
èŠã«ãªããšæããŸããããšã«ããïŒ5332ã§ã¯ãããå¿
èŠã§ãã
äžæ©åŸéããŠãç§ãã¡ãåŠãã ããšã¯ãè¿œå ã®äžäžãŸãã¯æ¬¡å ã®ã©ãã«ä»ãæ©èœããªããã°ããŸãã¯Matlabã®ããã«2次å 以äžã代æ¿å¯èœãšããŠæ±ãããšãªãã«ãå€æ¬¡å é åãç·åœ¢ä»£æ°ãšã¹ã ãŒãºã«ã¢ãªæºã«ããããšã¯ã§ããªããšããããšã§ãã ã§ããããç§ãã¡ã«æ®ãããŠããã®ã¯å©äŸ¿æ§ã®åé¡ã§ããé åãé床ã«è€éã«ããããšãªãããã¯ãã«ãè¡åã«å¯Ÿããäžè¬çãªç·åœ¢ä»£æ°æŒç®ã䟿å©ã«è¡šçŸã§ããã§ããããã ç§ã¯ãã®ã¢ãããŒãã«å®å šã«åºå·ããŠããããã§ã¯ãããŸããããé ååã®éå±€ãããŸãä¹±ããã«æ§æäžã®å©äŸ¿æ§ã«å¯ŸåŠãããã®ã¢ãããŒããä»ã®ã¢ãããŒããçå£ã«æ€èšããå¿ èŠããããšæããŸãã
ïŒ100ïŒ
åŸçœ®'
ããã³.'
ãžã§ããªãã¯é
åïŒç·åœ¢ä»£æ°ã§ã¯ãªãïŒæäœãæ瀺çã«è¡ãããšã§ãã¹ãã¬ãŒãžãšç·åœ¢ä»£æ°ã®ã¿ã€ãã®æ··åã2åã«ããããšãããŸãåé¿ãã劥åã®å°ãªããã¬ãŒã ã¯ãŒã¯ãžã®æãéãããŸãŸã«ããŸãã æ«å®çã«ãæãäžè¬çãªã±ãŒã¹ã§ããŠã¹ãã«ããŒè¡šèšãã·ãã¥ã¬ãŒããããããã®æäœã®æ©èœã¯ãæãŸããå©äŸ¿æ§ã®ã»ãšãã©ãæäŸããã¯ãã§ãã ãŸããã³ãŒããšè€éãã軜æžãããŸãã ãã¹ãïŒ
v.'
ãããŒãªãã¬ãŒã·ã§ã³ã§ããå Žåã®1ã€ã®åé¡ã¯ã A .+ v.'
ãA
ååã«v
ã®å€ãè¿œå ããããšãããå€ãè¿œå ããããšãžãšæå³ãå€ããããšã§ãã A
ã®è¡ã«ã ããã¯äžè¬ã«ããã¯ãã«ã䜿çšããŠè¡ã®ãããªæäœãè¡ãã®ãé£ããããã³ãŒããééã£ãããšãé»ã£ãŠè¡ããªãããã«ããããã«å®å
šãªéæšå¥šãµã€ã¯ã«ã確å®ã«å¿
èŠã«ãªããŸãïŒãã®ãããªå Žåã A
ãããŸããŸæ£æ¹åœ¢ã«ãªããŸãïŒã
ãã®æç¹ã§ã @ andyferrisã®å®è£ ã«åºã¥ãããã®ã䜿çšãããããã¯ãã«è»¢çœ®ãçå£ã«åãæ¢ããªãããšã決å®ããå¿ èŠããããšæããŸãã
v0.6ã®ç· ãåããè¿«ã£ãŠããããšã¯æ¿ç¥ããŠããŸãããã颚åã®æ°Žã§èµ€ã¡ãããæšãŠãªãããã«æ³šæããŸãã ãã®æ®µéã§ã¯ãåè¿°ã®RowVector
å ããŠãè¡åã®è»¢çœ®ãšé
åã®æŽ»çšã®ãã¥ãŒã«ããã次ã®ããšãå¯èœã«ãªãããã§ãã
v'' === v
v1'v2
ãããªStefanã®ãªã¹ãã«ãããã®ã®ããã€ãã¯ãããç©ã§ãsize(v')
ã¯å€æŽãããŸãããã1次å
ãšããŠv''
ãŸã*
ãšA_mul_B!
ã®ã¿ãåªå
ããŠãã¹ãŠã®Ac_mul_Bc
é¢æ°ãåé€ããŸãïŒåæ§ã«\
ã /
ïŒãããããã¹ãŠãArray
æ£çŽã«æ©èœãããã®ã«ãããã»ã©åŽåã¯ããããŸããïŒç§ã«ãšã£ãŠåé¡ã¯ããã®ææã«æéãèŠã€ããç·åœ¢ä»£æ°ã¹ã€ãŒãã«ããä»ã®ãã¹ãŠã®ã¿ã€ãã远跡ããããšã§ãïŒã ãããŠæåŸã®ãã€ã³ãã¯å®å µã®ããæ¯ã§ãã
å察ã«ãç§èŠã§ã¯ããããã®ã«ãŒã«ã¯æ§æ解æãå°ãè€éã«ããŠããããã§ã '
ãš*
ã©ã®ããã«æ§æãããã«ã€ããŠå°ãæ··ä¹±ãããé©ããããããŸããïŒ3ã4ã6ã8ã¯RowVector
ïŒã
ãããŠãã¯ããæœåšçãªãã°ã匷調ããããã«v.'
ãäœããéæšå¥šã«ããå¿
èŠããããŸãããã®æç¹ã§ã v.'
ãæ¬ èœããã¡ãœãããšã©ãŒã«ããæ¹ãã»ãŒè¯ãããã§ãïŒåã«è¡ããµããŒãããŸããïŒ / dual vectorããã ãå¿
èŠã«å¿ããŠããã±ãŒãžã®åæ¢ã¯åæ¢ããŸããïŒ
BAM
ãããŒã
ããã¯ç§ãã¡ã®æé·ã®åé¡ã®ã¹ã¬ããã§ãããïŒ
ããããïŒ11004ã«ã¯ãã£ãšãããŸã
ããããªããã ããã§ããç§ã¯æªè§£æ±ºã®åé¡ã®ã¹ã¬ãããæå®
æãåèã«ãªãã³ã¡ã³ã
BAM