çŸåšã transpose
ã¯ååž°çã§ãã ããã¯ããªãçŽæçã§ã¯ãªãããã®äžå¹žã«ã€ãªãããŸãã
julia> A = [randstring(3) for i=1:3, j=1:4]
3Ã4 Array{String,2}:
"J00" "oaT" "JGS" "Gjs"
"Ad9" "vkM" "QAF" "UBF"
"RSa" "znD" "WxF" "0kV"
julia> A.'
ERROR: MethodError: no method matching transpose(::String)
Closest candidates are:
transpose(::BitArray{2}) at linalg/bitarray.jl:265
transpose(::Number) at number.jl:100
transpose(::RowVector{T,CV} where CV<:(ConjArray{T,1,V} where V<:(AbstractArray{T,1} where T) where T) where T) at linalg/rowvector.jl:80
...
Stacktrace:
[1] transpose_f!(::Base.#transpose, ::Array{String,2}, ::Array{String,2}) at ./linalg/transpose.jl:54
[2] transpose(::Array{String,2}) at ./linalg/transpose.jl:121
ãã°ããã®éã代ããã«permutedims(A, (2,1))
ãå®è¡ããããã«äººã
ã«æ瀺ããŠããŸããã ããããç§ãã¡ã¯çããããã²ã©ãããšãæ·±ãç¥ã£ãŠãããšæããŸãã ç§ãã¡ã¯ã©ããã£ãŠãããžæ¥ãŸãããïŒ ãŸããè¡åã®è¡åã®ctranspose
ãŸãã¯ãé䌎ããååž°çã«ããããšããããšã¯ããªãããç解ãããŠããŸãã ããæ°ãèµ·ããããäŸã¯ã 2x2è¡åã䜿çšããŠè€çŽ æ°ã
çç±ã¯æ¬¡ã®ããã§ãã
ctranspose
ã¯ååž°çã§ããå¿
èŠããããŸãctranspose == conj â transpose == conj â transpose
transpose
ãååž°çã§ããå¿
èŠããããŸãããã«ã¯ããã€ãã®åé¡ããããšæããŸãã
ctranspose == conj â transpose == conj â transpose
ãä¿æãããªããã°ãªããªãçç±ã¯ãããŸããããååããããã¯ã»ãšãã©é¿ããããªãããã«èŠããŸããconj
åäœã¯ãMatlabããã®äžå¹žãªããŒã«ããªãŒããŒã®ãããªãã®ã§ãããæ°åŠçã«æ£åœãªæäœã§ã¯ãããŸãããèŠçŽ ããšã«æäœããexp
ã¯å®éã«ã¯æ°åŠçã«é©åã§ã¯ãªãã expm
ã®æ¹ãé©åã§ããctranspose
ãååž°çã§ããããšãæå³ãããåèŠçŽ ã®å
±åœ¹ïŒã€ãŸãé䌎ïŒãåããŸãã 掻çšããªãå Žåã転眮ãååž°çã§ããæ£åœãªçç±ã¯ãããŸããããããã£ãŠãç¶æ³ãæ¹åããããã«ã次ã®å€æŽãææ¡ããŸãã
ctranspose
ïŒå¥å'
ïŒã®ååãadjoint
ããŸããããã¯å®éã«ãã®æäœãè¡ãããšã§ããã conj â transpose
ãšåçã§ãªããã°ãªããªããšããå«æãã解æŸãããŸãã conj.(A)
ãåªå
ããŠãé
åã®ãã¯ãã«åãããconj(A)
ãéæšå¥šã«ããŸããrecur::Bool=true
ããŒã¯ãŒãåŒæ°ãadjoint
ïŒnée ctranspose
ïŒã«è¿œå ããŠãååž°çã«åŒã³åºããã©ããã瀺ããŸãã ããã©ã«ãã§ã¯ãããã§ããrecur::Bool=false
ããŒã¯ãŒãåŒæ°ãtranspose
è¿œå ããŠãããèªäœãååž°çã«åŒã³åºãå¿
èŠããããã©ããã瀺ããŸãã ããã©ã«ãã§ã¯ãããã§ã¯ãããŸãããå°ãªããšããããã«ãã次ã®ããã«æžãããšãã§ããŸãã
julia> A.'
4Ã3 Array{String,2}:
"J00" "Ad9" "RSa"
"oaT" "vkM" "znD"
"JGS" "QAF" "WxF"
"Gjs" "UBF" "0kV"
ãããããã«A'
ççž®ã§ãããã©ããã¯ã conj
ãšadjoint
ã®éæ°ïŒããå
·äœçã«ã¯ãéå®æ°ãéå®æ°ïŒã§äœãããããã«ãã£ãŠç°ãªããŸãã -è€éãªå€ïŒã
[ãã®å·ã¯ãÏâããŒãã·ãªãŒãºã®ç¬¬2匟ã§ãã]
åã®åé¡ãžã®è«çåŸç¶...ð
é åäžã§èŠçŽ ããšã«åäœããconjã®åäœã¯ãMatlabããã®äžå¹žãªããŒã«ããªãŒããŒã®ãããªãã®ã§ãããæ°åŠçã«æ£åœãªæäœã§ã¯ãããŸããã
ããã¯ãŸã£ããçå®ã§ã¯ãªãã exp
ãŸã£ããé¡äŒŒããŠããŸããã è€éãªãã¯ãã«ç©ºéãšãã®æŽ»çšã¯ãå®å
šã«ç¢ºç«ãããæ°åŠçæŠå¿µã§ãã https://github.com/JuliaLang/julia/pull/19996#issuecomment-272312876ãåç
§ããŠ
è€éãªãã¯ãã«ç©ºéãšãã®å ±åœ¹ã¯ãå®å šã«ç¢ºç«ãããæ°åŠçæŠå¿µã§ãã
ç§ãééã£ãŠããªãéãããã®æèã§ã®æ£ããæ°åŠç掻çšæäœã¯ã ctranspose
ã§ã¯ãªãconj
ïŒããã¯ãŸãã«ç§ã®ãã€ã³ãã§ããïŒïŒ
julia> v = rand(3) + rand(3)*im
3-element Array{Complex{Float64},1}:
0.0647959+0.289528im
0.420534+0.338313im
0.690841+0.150667im
julia> v'v
0.879291582684847 + 0.0im
julia> conj(v)*v
ERROR: DimensionMismatch("Cannot multiply two vectors")
Stacktrace:
[1] *(::Array{Complex{Float64},1}, ::Array{Complex{Float64},1}) at ./linalg/rowvector.jl:180
recur
ããŒã¯ãŒãã䜿çšããå Žåã®åé¡ã¯ãæåŸã«ç¢ºèªãããšãããããŒã¯ãŒãã䜿çšãããšããã©ãŒãã³ã¹ã倧å¹
ã«äœäžããããšã§ããããã¯ããããã®é¢æ°ãããŒã¹ã±ãŒã¹ã§ååž°çã«åŒã³åºãå Žåã«åé¡ã«ãªããŸããã¹ã«ã©ãŒã
ãšã«ããã1.0ã§ããŒã¯ãŒãã®ããã©ãŒãã³ã¹ã®åé¡ãä¿®æ£ããå¿ èŠããããŸãã
@StefanKarpinski ãããªãã¯ééã£ãŠããŸãã é䌎ãæããã«ãã¯ãã«ç©ºéã§è€çŽ å ±åœ¹ãæã€ããšãã§ããŸãâé䌎ã¯ãè€éãªãã¯ãã«ç©ºéã ãã§ãªãããã«ãã«ã空éãªã©ãå¿ èŠãšããæŠå¿µã§ãã
ããã«ããã«ãã«ã空éãããå Žåã§ããè€çŽ å ±åœ¹ã¯é䌎ãšã¯ç°ãªããŸãã ããšãã°ãââ¿ã®è€çŽ åãã¯ãã«ã®å ±åœ¹ã¯å¥ã®è€çŽ ãã¯ãã«ã§ãããé䌎äœçšçŽ ã¯ç·åœ¢æŒç®åïŒãè¡ãã¯ãã«ãïŒã§ãã
ïŒè€çŽ å
±åœ¹ã¯ã conj(v)*v
ä¹ç®ã§ããããšãæå³ãããã®ã§ã¯ãããŸããïŒïŒ
ãã¯ãã«åãããconj
éæšå¥šã¯ãæ®ãã®ææ¡ãšã¯ç¡é¢ä¿ã§ãã ãã¯ãã«ç©ºéã§ã®è€çŽ å
±åœ¹ã®å®çŸ©ã«é¢ããåèè³æãããã€ãæäŸã§ããŸããïŒ
https://en.wikipedia.org/wiki/Complexification#Complex_conjugation
ïŒãã®æ±ãã¯ããªã圢åŒçã§ããããè€çŽ å ±åœ¹è¡åããŸãã¯ãè€çŽ å ±åœ¹ãã¯ãã«ããã°ãŒã°ã«ã§æ€çŽ¢ãããšãç¡æ°ã®äœ¿çšæ³ãèŠã€ãããŸããïŒ
è€çŽ ãã¯ãã«ãå
±åœ¹ãã¯ãã«ã«ãããã³ã°ããããšïŒ conj
ãçŸåšè¡ãããšïŒãå
±åœ¹ã³ãã¯ãã«ïŒ '
ãè¡ãããšïŒãšã¯ç°ãªãéèŠãªæäœã§ããå Žåã conj
確å®ã«ç¶æã§ããŸãã conj
ãšadjoint
ã¯ã¹ã«ã©ãŒã«åæããŸãããé
åã§ã¯åäœãç°ãªããããããã«ããåºå¥ãããŸãã
ãã®å Žåã conj(A)
conj
ã¯åèŠçŽ ã§adjoint
åŒã³åºãå¿
èŠããããŸããïŒ 2x2è¡åã®äŸãšããŠã®è€çŽ æ°ã®è¡šçŸã¯ã conj
åŒã³åºãã®ã§ã¯ãªãã conj(A)
ãå®éã«åèŠçŽ ã§adjoint
ãåŒã³åºãå¿
èŠãããããšã瀺åããŸãã ããã«ããã adjoint
ã conj
ãããã³conj.
ãã¹ãŠç°ãªãæäœã«ãªããŸãã
adjoint
ïŒ i
ãšj
ã€ã³ããã¯ã¹ã亀æããèŠçŽ ã«adjoint
ãååž°çã«ãããã³ã°ããŸããconj
ïŒèŠçŽ ã«adjoint
ããããããŸããconj.
ïŒèŠçŽ ã«conj
ããããããŸããconj(A)
ã¯ãåèŠçŽ ã§conj
ãåŒã³åºãå¿
èŠããããŸãã è€çŽ æ°ã2x2è¡åã§è¡šãå Žåãç°ãªãè€çŽ æ°ãã¯ãã«ç©ºéããããŸãã
ããšãã°ããã¯ãã«ã®å
±åœ¹ã®äžè¬çãªäœ¿çšæ³ã¯ãå®æ°è¡åã®åºæå€ã®åæã§ããåºæå€ãšåºæãã¯ãã«ã¯ãè€çŽ å
±åœ¹ã®ãã¢ã§æäŸãããŸãã ããã§ãå®æ°ã®2x2è¡åã®2dé
åA
ã§è¡šããããããã¯è¡åãããã2æåãã¯ãã«ã®1dé
åã§è¡šããããããã¯ãã¯ãã«v
ã«äœçšãããšããŸãã 以äžã®ããã®ä»»æã®åºæå€Î»
ã®A
åºæãã¯ãã«ã§v
ãæã
ã¯æåŸ
ããŠäºåºæå€conj(λ)
åºæãã¯ãã«ãšconj(v)
ã conj
ãadjoint
ååž°çã«åŒã³åºãå Žåãããã¯æ©èœããŸããã
ïŒæãäžè¬çãªæ¹æ³ã§å®çŸ©ãããç·åœ¢æŒç®åã®é䌎ã¯å
ç©ã®éžæã«ãäŸåãããããè¡åã®å Žåã§ãé䌎ã¯å
±åœ¹è»¢çœ®ãšã¯ç°ãªãå Žåãããããšã«æ³šæããŠãã ãããå®éã®ã¢ããªã±ãŒã·ã§ã³ã®å€ãã¯ãå éå
ç©ã®çš®é¡ãé©åã§ããããã®å Žåãè¡åã®é䌎ããšãé©åãªæ¹æ³ãå€ãããŸãïŒãããã Matrix
äžãããããšãã«ãã£ãŠäžããããæšæºã®å
ç©ã«å¯Ÿå¿ããé䌎ããšãã¹ãã§ããããšã«åæããŸãã dot(::Vector,::Vector)
ããã ããäžéšã®AbstractMatrix
ïŒãŸãã¯ä»ã®ç·åœ¢æŒç®åïŒã¿ã€ããadjoint
ããªãŒããŒã©ã€ãããŠå¥ã®ããšãå®è¡ããå¯èœæ§ã¯ååã«ãããŸããïŒ
ããã«å¯Ÿå¿ããŠã3dé
åãç·åœ¢æŒç®åãšããŠå®çŸ©ããŠããªãããïŒããšãã°ãçµã¿èŸŒã¿ã®array3d * array2d
æŒç®ããªãããïŒãããšãã°3dé
åã«å¯ŸããŠä»£æ°çã«åŠ¥åœãªadjoint(A)
ãå®çŸ©ããããšã«ãããã€ãã®å°é£ããããŸãã ã ãã¶ãadjoint
ã¯ãã¹ã«ã©ãŒã1Dãããã³2Dé
åã«å¯ŸããŠã®ã¿ããã©ã«ãã§å®çŸ©ããå¿
èŠããããŸããïŒ
æŽæ°ïŒãããããã§ããïŒ3Dé
åã«ãctranspose
å®çŸ©ããŠããŸããã ç¶ããã
ïŒOTïŒå€§æåãåãã6éšæ§æã®ããã·ãªãŒãºã®æ¬¡ã®èšäºã§ããã7ãã³ãœã«ãçå£ã«åãæ¢ãããããšããã§ã«æ¥œãã¿ã«ããŠããŸã...ïŒ
è€çŽ æ°ã2x2è¡åã§è¡šãå Žåãç°ãªãè€çŽ æ°ãã¯ãã«ç©ºéããããŸãã
ç§ã¯ããã«åŸã£ãŠããŸããâè€çŽ æ°ã®2x2è¡åè¡šçŸã¯ãèŠçŽ ãšããŠè€çŽ ã¹ã«ã©ãŒãæã€ã®ãšãŸã£ããåãããã«åäœããã¯ãã§ãã ç§ã¯ãäŸãã°ãç§ãã¡ãå®çŸ©ãããš
m(z::Complex) = [z.re -z.im; z.im z.re]
ãããŠãä»»æã®è€çŽ æ°ãã¯ãã«v
å Žåããã®IDãä¿æããå¿
èŠããããŸãã
conj(m.(v)) == m.(conj(v))
äŸããã£ãšè©³ãã説æããŠããã§ã«m
ãšéå€ããŠããã¯ãã®'
ãšæ¯èŒããŸããã ã誀ã£ãŠãã®éå€ãm.(v)' == m.(v')
ãä¿æãããŸãããç§ãããªããæ£ããç解ããŠããå Žåã¯ã @ stevengj ã conj(m.(v)) == m.(conj(v))
ã¯ãã¹ãã§ã¯ãããŸãããïŒ
conj(m(z))
ã¯== m(z)
ãŸãã
ããªãã®m(z)
ã¯ãå ç®ãšä¹ç®ã®äžã§ã®è€çŽ æ°ã®ååã§ãããç·åœ¢ä»£æ°ã®ä»ã®æ¹æ³ã§ã¯åããªããžã§ã¯ãã§ã¯ãªãã®ã§ã conj
ãµããããã¹ãã§ã¯ãããŸããã ããšãã°ã z
ãè€çŽ æ°ã¹ã«ã©ãŒã®å Žåã eigvals(z) == [z]
ã§ããã eigvals(m(z)) == [z, conj(z)]
ã§ãã m(z)
ããªãã¯ãè€éãªè¡åã«æ¡åŒµããããšããã®ã¹ãã¯ãã«ã®2åã¯ãããšãã°å埩æ³ã«å¯ŸããŠããªãããŒãªçµæããããããŸãïŒããšãã°ãã®è«æãåç
§ïŒã
å¥ã®èšãæ¹ãããã°ã z
ã¯ãã§ã«è€çŽ æ°ãã¯ãã«ç©ºéïŒè€çŽ æ°äžã®ãã¯ãã«ç©ºéïŒã§ããã2x2å®æ°è¡åm(z)
ã¯å®æ°äžã®ãã¯ãã«ç©ºéã§ãïŒããªãæããããšãã§ããŸãm(z)
å®æ°ã«ããïŒ...ããªãã¯"complexify"å Žåã¯m(z)
è€çŽ æ°ãä¹ããŠäŸãã°m(z) * (2+3im)
ïŒãªãm(z) * m(2+3im)
ïŒããªãå
ã®è€çŽ ãã¯ãã«ç©ºéz
å圢ã§ã¯ãªããªã£ãå¥ã®è€çŽ ãã¯ãã«ç©ºéãååŸããŸãã
ãã®ææ¡ã¯ãå®éã®æ¹åãããããããã«èŠããŸãïŒ+1ïŒç§ã¯æ°åŠçãªåŽé¢ã«ã€ããŠèããŠããŸãïŒ
v
ã conj(v) = conj.(v)
äžå¿ã«ããããšãæå³ãã conj
ã«é
åçšã®ã¡ãœãããããããã¹ã«ã©ãŒå°çšã®ã¡ãœããããããã¯èšèšäžã®éžæã§ããã©ã¡ãã倧äžå€«ããïŒ ïŒcomplex-numbers-as-2x2-matricesã®äŸã«é¢ããStevenã®ãã€ã³ãã¯ãããã¯ä¿æ°ã圢åŒç/å®éã«å®æ°ã§ãããã¯ãã«ç©ºéã§ããããã掻çšã¯ããã§ã¯å¹æããªããšããããšã§ããïŒadjoint
å¯æ¥ã«ç·åœ¢ä»£æ°ãå«ãéèŠãªãã¡ã€ã³ã®å€ãã®åºæ¬çãªã®ã§ã代æ°çãªæå³ãæã£ãŠããïŒåç
§1ãš2ãš3 ãããŸãã«ãç©çåŠã®å€§ããªã¢ããªã±ãŒã·ã§ã³ã§ããã¹ãŠãïŒã adjoint
ãè¿œå ãããå Žåãæ€èšäžã®ã¢ã¯ã·ã§ã³ã®ããŒã¯ãŒãåŒæ°ãèš±å¯ããå¿
èŠããããŸãããã¯ãã«ç©ºé/é¢æ°è§£æã§ã¯ããã®ã¢ã¯ã·ã§ã³ã¯éåžžãå
ç©ã«ãã£ãŠèªå°ãããããã代ããã«ããŒã¯ãŒãåŒæ°ã圢åŒã«ããããšãã§ããŸãã ãžã¥ãªã¢ã®è»¢çœ®ã®ããã«èšèšããããã®ã¯ããããã®ã¢ããªã±ãŒã·ã§ã³ãšã®ç«¶åãé¿ããå¿
èŠãããã®ã§ã adjoint
ã¯å°ãé«é¡ã ãšæããŸããïŒ@felixrehren ãé䌎ãèªçºããå
ç©ãæå®ããããã«ããŒã¯ãŒãåŒæ°ã䜿çšããããšã¯ãªããšæããŸãã ãã¯ãã«ã®dot
ã®æå³ãå€æŽãããå Žåãšåãããã«ã代ããã«å¥ã®åã䜿çšãããšæããŸãã
ç§ã®å¥œã¿ã¯å°ãç°¡åã§ãããïŒ
conj
ãã®ãŸãŸïŒèŠçŽ ããšã«ïŒä¿æããŸããa'
ãadjoint(a)
ã«å¯Ÿå¿ãããåžžã«ååž°çã«ããŸãïŒãããã£ãŠãèŠçŽ ã«adjoint
ãå®çŸ©ãããŠããªãæååã®é
åãªã©ã§ã¯å€±æããŸãïŒãa.'
ãtranspose(a)
ã«å¯Ÿå¿ãããååž°çã§ã¯ãªãããã«ãïŒ permutedims
ïŒãèŠçŽ ã®ã¿ã€ããç¡èŠããŸããéååž°çãªadjoint
ãŠãŒã¹ã±ãŒã¹ã¯å®éã«ã¯èŠåœãããŸããã äžæ°ã«ãååž°çãªtranspose
ãŠãŒã¹ã±ãŒã¹ãæ³åããããšãã§ããŸããã a.'
ãtranspose(a, recur=true)
ã«å€æŽããå¿
èŠãããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãåãããã«ç°¡åã«æããŸããå¥ã®é¢æ°transposerecursive(a)
åŒã³åºããŸãã Baseã§transposerecursive
ãå®çŸ©ããããšãã§ããŸããããããå¿
èŠã«ãªãããšã¯ãã£ãã«ãªãã®ã§ãå®éã«è¡šç€ºããããã©ããã確èªããå¿
èŠããããŸãã
ç§ã¯å人çã«ããããåçŽã«ä¿ã€ããšããŠãŒã¶ãŒã«ãšã£ãŠïŒãããŠå®è£ ã«ãšã£ãŠïŒæãç°¡åã§ãããããã§ãç·åœ¢ä»£æ°ã®é¢ã§ããªãé²åŸ¡ã§ãããšæããŠããŸãã
ãããŸã§ã®ãšããïŒã»ãšãã©ã®ïŒç·åœ¢ä»£æ°ã«ãŒãã³ã¯ãæšæºã®é
åæ§é ãšæšæºã®å
ç©ã«ããªã匷ãæ ¹ãããŠããŸãã è¡åãŸãã¯ãã¯ãã«ã®åã¹ãããã«ãããã£ãŒã«ããã®èŠçŽ ãé
眮ããŸãã ç§ã¯ããã£ãŒã«ãã®èŠçŽ ã®ããã«ãç§ãã¡ã¯æ°ã«ããããšã䞻匵ããã ãã+
ã *
ããªã©ãããã³conj
ã§ã¯ãªãã transpose
ã ãã£ãŒã«ãã2x2ã®å®æ°è¡åã«å°ã䌌ãŠãããã conj
äžã§å€åããç¹å¥ãªè€éãªè¡šçŸã§ããå Žåãããã¯åé¡ãããŸãã-ããã¯conj
ããããã£ã§ãã conj
äžã§å€åããªãã®ã2x2ã®å®éã®AbstractMatrix
ããå Žåããããããè¡åã®ãã®ãããªèŠçŽ ã¯é䌎äœçšçŽ ã®äžã§å€åããã¹ãã§ã¯ãããŸããïŒ @stevengjã¯ç§ã説æã§ãããããè¯ããšèšããŸãã-è€çŽ æ°ãšååã§ããå¯èœæ§ããããŸãããããã¯ãã¹ãŠã®ç¹ã§åãããã«åäœãããšããæå³ã§ã¯ãããŸããïŒã
ãšã«ããã2x2ã®è€éãªäŸã¯ãç§ã«ã¯å°ãèµ€ããã·ã³ãæããŸãã ååž°è¡åã®åäœã®æ¬åœã®åå ã¯ããããã¯è¡åã§ç·åœ¢ä»£æ°ãå®è¡ããããã®ã·ã§ãŒãã«ããã§ããã ãã®ç¹å¥ãªã±ãŒã¹ãé©åã«æ±ããåºç€ãšãªãã·ã¹ãã ãç°¡çŽ åããŠã¿ãŸãããïŒ
ãããã£ãŠãç§ã®ãåçŽåããããææ¡ã¯æ¬¡ã®ããã«ãªããŸãã
conj
ãã®ãŸãŸç¶æããŸãïŒãŸãã¯AbstractArray
ã®ãã¥ãŒã«ããŸãïŒa'
ã(a')[i,j] == conj(a[j,i])
ãããªéååž°çãªãã¥ãŒã«ããŸãa.'
ã(a.')[i,j] == a[j,i]
ãããªéååž°çãªãã¥ãŒã«ããŸãBlockArray
ã¿ã€ããå°å
¥ããŸãïŒ Base
ããŸãã¯ããããååã«ãµããŒããããããã±ãŒãžã§ïŒã ééããªããããã¯ãã®ç®çã®ããã«Matrix{Matrix}
ãããã¯ããã«åŒ·åã§æè»æ§ããããŸãããåæ§ã«å¹ççã§ãããããã®ã«ãŒã«ã¯ããŠãŒã¶ãŒãåãå ¥ããŠæ§ç¯ããã®ã«ååã·ã³ãã«ã ãšæããŸãã
PS- @ StefanKarpinskiå®çšäžã®çç±ãããååž°ã®ããŒã«ããŒã¯ãŒãåŒæ°ã¯ã転眮ã®ãã¥ãŒã§ã¯æ©èœããŸããã ãã¥ãŒã®ã¿ã€ãã¯ããŒã«å€ã«äŸåããå ŽåããããŸãã
ãŸããä»ã®å Žæã§èšåããŸããããå®å
šãæãããã«ããã«è¿œå ããŸããå垰転眮ãã¥ãŒã«ã¯ãã©ããããŠããé
åãšæ¯èŒããŠèŠçŽ ã¿ã€ããå€æŽãããå¯èœæ§ããããšããåä»ãªããããã£ããããŸãã äŸïŒ transpose(Vector{Vector}) -> RowVector{RowVector}
ã å®è¡æã®ããã«ãã£ãªãã§ããŸãã¯åºåã¿ã€ããèšç®ããããã«æšè«ãåŒã³åºãããšã«ãã£ãŠããã®èŠçŽ ã¿ã€ããRowVector
ã§ååŸããæ¹æ³ãèããŠããŸããã§ããã èšèªã®èŠ³ç¹ããã¯ãçŸåšã®æ¯ãèãïŒæšè«ãåŒã³åºãïŒã¯æãŸãããªããšæããŸãã
泚æïŒãŠãŒã¶ãŒãconj
ãå®çŸ©ããŠå¥ã®åãè¿ãããšã劚ãããã®ã¯äœããªãã®ã§ã ConjArray
ãã¥ãŒããååž°çã§ãããã©ããã«é¢ä¿ãªãããã®åé¡ã«æ©ãŸãããŸãã
@stevengj âãè€éãªã2x2è¡åããè€éãªãã¯ãã«ç©ºéã§ã¯ãªã圢åŒçã«å®æ°ã®ãã¯ãã«ç©ºéã§ãããšææããã®ã¯çã«ããªã£ãŠããŸããããã®ç¹ã¯ãååž°çé䌎ã®å ã®åæ©ã«çåãæããããŸãã @andyferrisã®ææ¡ã¯è¯ããããŸããïŒéååž°çãªè»¢çœ®ãšé䌎ïŒã è€éãª2x2ã®äŸãšãããã¯è¡åè¡šçŸã®äž¡æ¹ãååž°çã«é䌎äœçšçŽ ããæãã§ããããšããäºå®ã¯ç€ºåçã§ããããã®æåã®äŸã«ã€ããŠã®ã³ã¡ã³ããèãããšãéååž°çé䌎äœçšçŽ ãä»ã«ãªãå Žåã¯ãªãããšæããŸããããæ£ç¢ºã§äŸ¿å©ã§ãã
é䌎äœçšçŽ ãååž°çã§ãªãå Žåãããã¯é䌎äœçšçŽ ã§ã¯ãããŸããã ããã¯ãã ééã£ãŠããŸãã
å°ãæéãããã°ããããããå°ãæ£åœåã§ããŸããïŒ
ãã¯ãã«ã®é䌎ã¯ããããã¹ã«ã©ãŒã«ãããã³ã°ããç·åœ¢æŒç®åã§ãªããã°ãªããŸããã ã€ãŸãã a'*a
a
ããã¯ãã«ã®å Žåã a'*a
ã¯ã¹ã«ã©ãŒã§ãªããã°ãªããŸããã ãããŠãããã¯ãå®çŸ©ããããããã£ãa'*A*a == (A'*a)'*a
ã§ãããããè¡åã«å¯Ÿå¿ããé䌎ãèªçºããŸãã
a
ããã¯ãã«ã®ãã¯ãã«ã§ããå Žåãããã¯a' == adjoint(a)
ãååž°çã§ãªããã°ãªããªãããšãæå³ããŸãã
OKãç§ã¯ããã«åŸããšæããŸãã
ååž°çãªå ç©ããããŸãã
julia> norm([[3,4]])
5.0
julia> dot([[3,4]], [[3,4]])
25
æããã«ããé䌎ããŸãã¯ãåæ°ããŸãã¯åæ§ã«ååž°çã§ããå¿ èŠããããŸãã
äžå¿çãªè³ªåã¯ããã¹ãŠã®ãã¯ãã«a
ã b
ã«å¯ŸããŠa' * b == dot(a,b)
ãå¿
èŠãã©ãããšããããšã ãšæããŸãã
å¥ã®æ¹æ³ã¯ã '
ãå¿
ãããé䌎äœçšçŽ ãè¿ããšã¯éããªããšããããšã§ããããã¯ãèŠçŽ ã転眮ããŠconj
ãééãããåãªãé
åæŒç®ã§ãã ããã¯ããŸããŸå®éã®èŠçŽ ãŸãã¯è€éãªèŠçŽ ã®é䌎äœçšçŽ ã§ãã
ç·åœ¢ä»£æ°ã®é䌎äœçšçŽ ã«ç¹å¥ãªååãšç¹å¥ãªèšå·ãããçç±ã¯1ã€ã ãã§ããããã¯ãå ç©ãšã®é¢ä¿ã§ãã ãããããå ±åœ¹è»¢çœ®ããéèŠãªæäœã§ããããè¡åã®90床ã®å ±åœ¹å転ããéèŠã§ãªãçç±ã§ãã ããã¯ããããã®è£œåã«æ¥ç¶ãããŠããªãå Žåã¯ããã¹ã¯ããã®è¡ãšåãšã®ã³ã³ãžã¥ã²ãŒãããããšãåã«ã¢ã¬ã€åäœãã§ããäœããæã€ãã€ã³ãã¯ãããŸããã
transpose
ãšéå
±åœ¹ã®ããããç©ãã®éã®åæ§ã®é¢ä¿ãå®çŸ©ã§ããŸããããã¯ãååž°çãªè»¢çœ®ã䞻匵ããŸãã ãã ããå®éã«ã¯å
ç©ã§ã¯ãªãè€éãªããŒã¿ã®éå
±åœ¹ããããç©ãã¯ãçã®å
ç©ã»ã©é »ç¹ã«ã¯è¡šç€ºãããŸãããæŒç®åãè€çŽ æ°ã§èšè¿°ãããŠããå ŽåãåçŽäº€é¢ä¿ããçºçããŸãã察称ïŒãšã«ããŒã圢åŒã§ã¯ãªãïŒåœ¢åŒâçµã¿èŸŒã¿ã®Juliaé¢æ°ãç·åœ¢ä»£æ°ã®äžè¬çãªçšèªãããããŸããããä»»æã®éæ°å€é
åã®è¡ãšåã亀æããããšã¯ãç¹ã«ãããŒããã£ã¹ãã§ã¯ã¯ããã«äžè¬çã§ãã ãããã adjoint
ååž°çã«ãããŸãŸã transpose
éååž°ã«ããããšããµããŒãã§ããçç±ã§ãã
ããã§ããã ãããã£ãŠã '
ååãadjoint
ã«å€æŽããããšã¯ã conj â transpose
ã§ã¯ãªãããšãæ確ã«ããããã«ãå€æŽã®äžéšã«ãªããŸããïŒ
ååž°é
åãšåžžã«æ··åããŠããã®ã¯ããã®ã³ã³ããã¹ãã§ã®ã¹ã«ã©ãŒãšã¯äœã§ããïŒ ç§ãããç¥ã£ãŠãããã¹ãŠã®å Žåã«ãããŠããã¯ãã«ã®èŠçŽ ã¯ã¹ã«ã©ãŒã§ãããšèšãããŠããŸãã æ°åŠè
ããããã¯ãã¯ãã«/è¡åæ§é ãçŽã«æžããå Žåã§ããããã¯ãèŠçŽ ãããããå®æ°ãŸãã¯è€çŽ æ°ã§ããããã倧ããªãã¯ãã«/è¡åã®çç¥åœ¢ã§ããããšãããããŸãïŒã€ãŸãã BlockArray
ïŒã ã¹ã«ã©ãŒã¯*
äžã§ä¹ç®ã§ãããšæåŸ
ããŠãããã¹ã«ã©ãŒã®ã¿ã€ãã¯éåžžããã¯ãã«ãšãã¥ã¢ã«ã®éã§éãã¯ãããŸããã
@andyferris ãäžè¬çãªãã¯ãã«ç©ºéã®å Žåãã¹ã«ã©ãŒã¯ãã¯ãã«ã«ä¹ç®ã§ãããªã³ã°ïŒæ°å€ïŒã§ãã 3 * [[1,2], [3,4]]
ã¯ã§ããŸããã [3,3] * [[1,2], [3,4]]
ã¯ã§ããŸããã ãããã£ãŠã Array{Array{Number}}
å Žåã§ããæ£ããã¹ã«ã©ãŒåã¯Number
ã§ãã
åæããŸãã-ããããèŠçŽ ã¯éåžžïŒåãïŒã¹ã«ã©ãŒã§ãããšèšãããŠããŸããïŒ
ãšã«ãããç§ãèŠãæ²»çæ³ã¯ããªã³ã°ããå§ãŸããããããããã¯ãã«ç©ºéãæ§ç¯ããŸãã ãªã³ã°ã¯+
ã *
ããµããŒãããŸããã adjoint
ã dot
ãªã©ããµããŒãããå¿
èŠãããåŠçã¯èŠãããšããããŸããã
ïŒç³ãèš³ãããŸããããã¢ãã«åããŠããåºç€ãšãªãæ°åŠçãªããžã§ã¯ããç解ããããšããŠããŸãïŒã
ããã¯ããªãããéèšãã«ãã£ãŠäœãæå³ãããããããŠããªãããèŠçŽ ãã«ãã£ãŠäœãæå³ãããã«ãããŸãã
ããšãã°ãé¢æ°ã®æéãµã€ãºã®ãã¯ãã«ãããã³ç¡é次å æŒç®åã®ãè¡åããæã€ããšã¯éåžžã«äžè¬çã§ãã ããšãã°ã次ã®åœ¢åŒã®å·šèŠçãªãã¯ã¹ãŠã§ã«æ¹çšåŒãèããŠã¿
ãã®å ŽåããèŠçŽ ãã3æåãã¯ãã«å Žã§ãã2æåãã¯ãã«ã«äœçšããç·åœ¢æŒç®åïŒã«ãŒã«ãªã©ïŒã®2x2è¡åããããŸãã ãããã¯ãè€çŽ æ°ã®ã¹ã«ã©ãŒå Žäžã®ãã¯ãã«ã§ãã ããæå³ã§ããã¯ãã«ã®ãèŠçŽ ãã¯è€çŽ æ°ïŒç©ºéå ã®åã ã®ãã€ã³ãã«ãããã£ãŒã«ãã®åã ã®ã³ã³ããŒãã³ãïŒã§ãããããã¯ããªãææ§ã§ãã
ãããã¯ããã£ãšæ£ç¢ºã«èšãã°ããã¯ãã«ã®ä¿æ°ãäœããã®åºæºã§èšè¿°ããããã«åžžã«ãªã³ã°ã䜿çšããããšã¯ã§ããŸããïŒJuliaã®é åã®æ§è³ªãèãããšãæ ¹æ ããªãããã§ã¯ãããŸããïŒã
ãããã«ãããçµæã¯äŸç¶ãšããŠé䌎äœçšçŽ ãååž°çã§ãªããã°ãªããªããšããããšã§ãããïŒ ããªããäœãããŠããã®ãããããŸããã
ïŒé åã®ãªããžã§ã¯ããŸãã¯èŠçŽ ã¯SåŒãŸãã¯æœè±¡çãªæ°åŠçãªããžã§ã¯ããè¡šãä»ã®ããŒã¿æ§é ã§ããå¯èœæ§ããããé£æ¥ãããã®ã¯ä¹ç®ããããšå¥ã®ãªããžã§ã¯ããè¿ãå¯èœæ§ãããããã絶察ã«æ ¹æ ããªãããã«ããããšãã§ããŸããããšãã°ãæŽæ°ã§ããïŒ
ç§ã¯ç¹å®ã®ç¹ãææããã®ã§ã¯ãªããããããç解ããããšããŠããã ãã§ã:)
確ãã«ãäžèšã§ã¯ãé䌎äœçšçŽ ã¯ååž°çã§ãã ããšãã°ãäžèšã®ããã«ã [E, H]
BlockVector
ãïŒç¡éã«ïŒïŒå€ãã®èŠçŽ ãè€éãªBlockVector
ã¢ãããŒãã¯å®è¡äžå¯èœã ãšæããŸãã
ãŸãããããšãã
ã ãããããããç§ã¯ãã®åœ¢ã§ç§ã®èããèžçããããšãã§ããŸãïŒ
ãã¯ãã«v
å Žåã length(v)
ããã¯ãã«ç©ºéã®æ¬¡å
ãã€ãŸããã¯ãã«ç©ºéã®èŠçŽ ãïŒå®å
šã«ïŒèšè¿°ããããã«å¿
èŠãªã¹ã«ã©ãŒä¿æ°ã®æ°ãè¡šãããšãæåŸ
ããŸãããŸãã v[i]
ã¯i
çªç®ã®ã¹ã«ã©ãŒä¿æ°ãè¿ããŸãã ä»æ¥ãŸã§ãç§ã¯AbstractVector
ããæœè±¡çãªãã¯ãã«ããšã¯èããŠããŸããã§ããããããã°ã©ããŒãç¥ã£ãŠããäœããã®åºç€ãäžãããããã¯ãã«ç©ºéã®èŠçŽ ã®ä¿æ°ãä¿æãããªããžã§ã¯ããšèããŠããŸããã
ã·ã³ãã«ã§äŸ¿å©ãªã¡ã³ã¿ã«ã¢ãã«ã®ããã«èŠããŸããããããããããã¯å¶éãå€ãããŠå®çšçã§ã¯ãããŸããã
ïŒç·šéïŒ Vector{T}
ã§ã¯ã T
ã¯ç·åœ¢ä»£æ°æŒç®ãæ©èœããããã«ã¹ã«ã©ãŒã®ããã«åäœããå¿
èŠããããããå¶éããããŸããïŒ
ã§ã
[3,3] * [[1,2], [3,4]]
ã¯ã§ããŸãã
ç§ãã¡ã¯ãããä¿®æ£ããããšãã§ããŸãã ãããè¯ãèããã©ããã¯ããããŸãããã確ãã«æ©èœãããããšãã§ããŸãã
ãããæãŸãããã©ããã¯ããããŸãã...ãã®å Žåã [3,3]
å®éã«ã¯ã¹ã«ã©ãŒã§ã¯ãããŸããã ïŒç§ãã¡ã¯ãã§ã«[3,3]' * [[1,2], [3,4]]
ãå®è¡ããæ©èœãæã£ãŠããŸã-ããã¯ç·åœ¢ä»£æ°ã®æå³ã§è§£éããæ¹æ³ãæ¬åœã«ç¥ããŸããïŒã
ããã¯èå³æ·±ãã³ãŒããŒã±ãŒã¹ã瀺ããŠããŸãã v1' * v2
ã¯å
ç©ã§ããïŒãããã£ãŠãã¹ã«ã©ãŒããè¿ãïŒãšèšã£ãŠããããã§ããã [3,3]' * [[1,2], [3,4]] == [12, 18]
ã§ãã äžèªç¶ãªäŸã ãšæããŸãã
ãã®å Žåã [3,3]
ã¯ã¹ã«ã©ãŒã§ããã¹ã«ã©ãŒã¯åºç€ãšãªããªã³ã°ã®èŠçŽ ã§ããã [a,b]
圢åŒã®èŠçŽ ããªã³ã°ã«ããïŒãããã£ãŠãã¯ãã«/è¡åãå®çŸ©ããïŒããã®è¯ãæ¹æ³ã¯ãããããããŸãããã®äžïŒã ãããããã¯ãã«ãšããŠæžãããŠãããšããäºå®ããŸãã¯ãã®ãªã³ã°èªäœãå¥ã®åºç€ãšãªããªã³ã°ã®äžã«ãã¯ãã«ç©ºéã圢æããŠãããšããäºå®ã¯ããããå€æŽããŸããã ïŒãã¯ãã«ãé ãå¯èœæ§ã®ããä»ã®è¡šèšæ³ãæ¡çšããããšãã§ããŸãïŒãŸãã¯ããŸã£ããç°ãªãå€èŠ³ã«ããããšãã§ããŸããïŒ @ andyferrisãååŸããããã«ãã¹ã«ã©ãŒãšã¯ã³ã³ããã¹ãã«ãã£ãŠç°ãªããŸãã
æ£åŒã«ã¯ãååž°ã¯é䌎äœçšçŽ ã®äžéšã§ã¯ãããŸããã 代ããã«ãã¹ã«ã©ãŒèŠçŽ ã®æŽ»çšã¯äœæ¥ã®ãã®éšåãè¡ããŸã-ãããŠãã¹ã«ã©ãŒs
ãè¡åãšããŠè¡šãããå Žåã s
掻çšã«ã¯ãç§ãã¡ãè¡šãããã«äœ¿çšããè¡åã®è»¢çœ®ãå«ãŸããããšããããããŸãããã ãã ããåžžã«ããã§ãããšã¯éããŸãããã¹ã«ã©ãŒã®ãªã³ã°ã«ãŠãŒã¶ãŒãæå®ããæ§é ã«äŸåããŸãã
é䌎ååž°ã匷å¶ããããšã¯ãMATLABã¿ã€ãã®ã¢ããªã±ãŒã·ã§ã³ã§äžè¬çãªãå®çšçãªåŠ¥åæ¡ãšããŠã¯åé¡ãªããšæããŸãã ããããç§ã«ãšã£ãŠããããéåžžã«çå£ã«åãæ¢ãããšããããšã¯ãéååž°çãªé䌎äœçšçŽ ãšåä»ãã¹ã«ã©ãŒ+ãã£ã¹ãããã䜿çšããŠãåºã«ãªããªã³ã°ã®æ§é ãäœã§ããã conj
ã«å¿
èŠãªéæ³ãåãããããšãæå³ããŸãã
ãã®å Žåã[3,3]ã¯ã¹ã«ã©ãŒã§ããã¹ã«ã©ãŒã¯åºç€ãšãªããªã³ã°ã®èŠçŽ ã§ãã
ãã®ãããªã¹ã«ã©ãŒã+
ã *
å®çŸ©ããããªã³ã°ã®èŠçŽ ã§ã¯ãªãããšãé€ããŠã *
ã¯ãµããŒãããŠããŸãã; [3,3] * [3,3]
ã¯ã§ããŸããã
é䌎ååž°ã匷å¶ããããšã¯ãMATLABã¿ã€ãã®ã¢ããªã±ãŒã·ã§ã³ã§äžè¬çãªãå®çšçãªåŠ¥åæ¡ãšããŠã¯åé¡ãªããšæããŸãã ããããç§ã«ãšã£ãŠããããéåžžã«çå£ã«åãæ¢ãããšããããšã¯ãéååž°çãªé䌎äœçšçŽ ãšåä»ãã¹ã«ã©ãŒ+ãã£ã¹ãããã䜿çšããŠãåºã«ãªããªã³ã°ã®æ§é ãäœã§ããã
conj
ã«å¿ èŠãªéæ³ãåãããããšãæå³ããŸãã
ç§ãã¡ãå®çšçãªæ§æããããã®ã§ããã°ãããã¯å®å
šã«åé¡ãªãããããŸã§è¡ã£ãŠããããšã§ãããåºç€ãšãªãã¹ã«ã©ãŒã¯å®å
šã«ãã©ããåãããé
åã®ãã®ã§ãããç·åœ¢ä»£æ°ãå®çŸ©ãããŠããããã§ãã ã BlockVector
ãšBlockMatrix
ïŒããã³BlockDiagonal
ãªã©ïŒãäœæãããã¯ãããžãŒããããå®å
šã«æ¡åŒµãããã¢ã¬ã€ã®å¹ççã§ãã©ãããªãã¥ãŒãæäŸããŸãã ãã¢ãããŒãã¯ãå°ãªããšãå®è¡å¯èœã§ãªããã°ãªããŸããã ç§ã¯ãŸããå
¥åããã ãã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªååž°çãªã¢ãããŒããšããŠãïŒããã€ãã®äœåãªæåãšããŠã«ãªããšæããŸããèµ·ããBlockMatrix([A B; C D])
ç«æŽŸèªããã»ãã³ãã£ãã¯ãšæœåšçã«å€ãã®ã³ãŒããäœã§ããããšåŒãæãã«ãã-ç§ã¯ç¢ºä¿¡ããŠãããã®ãã€ã³ãã¯è°è«ã®äœå°ããããŸãïŒã ãã ããããããã¹ãŠãå®è£
ããã®ã¯ããã«æéãããããŸãã
@andyferrisããã§ãã *
ãå®çŸ©ãããŠããªãããããªã³ã°ã§ã¯ãããŸãã-ãããã *
ç°¡åã«å®çŸ©ã§ããã®ãšåãããŒãžã«ãããšæããŸããããããŠãããè¡ãã«ã¯ããªã³ã°æ§é ãäžããããŸããŸãªæ¹æ³ããããŸãã ã ããç§ãã¡ã¯åãããŒãžã«ãããšæããŸãïŒã¿ã€ãã³ã°ã¯ããã解決ããããã®ããæ¡åŒµå¯èœãªæ¹æ³ã§ãã
ïŒã¹ã«ã©ãŒã«ã€ããŠïŒã¹ã«ã©ãŒã¯å¿ ãããå®å šã«å¹³åŠåãããæ§é ã®èŠçŽ ã§ã¯ãããŸããïŒçç±ã¯ããã§ãã1次å ã®è€çŽ ãã¯ãã«ç©ºéã¯è€çŽ æ°ã«å¯ŸããŠ1次å ã§ãããå®æ°ã«å¯ŸããŠ2次å ã§ããã©ã¡ãã®è¡šçŸãããã§ã¯ãããŸãããç¹å¥ãã¯ã©ãŒã¿ããªã³ã¯è€çŽ æ°ã«å¯ŸããŠ2次å ããªã¯ãããªã³ã¯è€çŽ æ°ã«å¯ŸããŠ2次å ãè€çŽ æ°ã«å¯ŸããŠ4次å ãå®æ°ã«å¯ŸããŠ8次å ã§ãããããããªã¯ãããªã³ãã8次å ãã§ãããšäž»åŒµããçç±ã¯ãããŸããããããã®ã¹ã«ã©ãŒã¯è€çŽ æ°ã§ã¯ãªãå®æ°ã§ãããšäž»åŒµãããããããããã¯è«çã«ãã£ãŠåŒ·å¶ãããªãéžæã§ããããã¯çŽç²ã«è¡šçŸã®åé¡ã§ããç·åœ¢ä»£æ°ã¯ãããã®å Žåãåãã§ããããããŠãŒã¶ãŒã¯ãã®èªç±ãèš±å¯ããå¿ èŠããããŸãã [åãæšãŠããã]å€å€é åŒãªã³ã°ããŸãã¯æ°å€ãã£ãŒã«ãã®ä»£æ°çæ¡åŒµã䌎ããã®ãããªç©ºéã®ã¯ããã«é·ããã§ãŒã³ãã©ã¡ããè¡åã§æŽ»çºã«é©çšãããŸãããžã¥ãªã¢ã¯ãŠãµã®ã®ç©Žãããã»ã©é ããŸã§è¡ãå¿ èŠã¯ãããŸãããã ããããããã¯ããªãããã«ããããååšããããšãèŠããŠããå¿ èŠããããŸãã å€åè«è©±ã®ãããã¯ïŒ :)ïŒ
@felixrehren ããªã³ã°Räžã®ãã¯ãã«ã®ãã¯ãã«ã¯ãçŽå空éãšããŠæãããç解ãããŸããããã¯ãRäžã®ãã¯ãã«ç©ºéã§ããããŸãããã¯ãã«èªäœããåºã«ãªããªã³ã°ããšåŒã¶ã®ã¯ç¡æå³ã§ãããªã³ã°ã ãã®æšè«ã¯[[1,2], [3,4]]
ã«å®å
šã«åœãŠã¯ãŸããŸãã
å ±åœ¹ãšé䌎ã¯éåžžãå¥ã ã®æŠå¿µã§ãã ãã¹ã«ã©ãŒèŠçŽ ã®æŽ»çšããããã§ã®äœæ¥ãè¡ãã¹ãã§ãããšèšãããšã¯ã以äžã«è¿°ã¹ãç¹å¥ãªå Žåãé€ããŠããæ·±å»ãªãã®å察ã§ããç§ã«ã¯å®å šã«ééã£ãŠããããã«æãããŸãã
ãã£ã©ãã¯èšæ³ã§ããããªã³ã°ïŒããšãã°è€çŽ æ°âïŒäžã®ãã«ãã«ã空éHã«ãã2ã€ã®èŠçŽ |uâ©ãš|vâ©ã®ã2æååãã¯ãã«ãïŒ|uâ©ã|vâ©ïŒã®å ŽåãèããŠã¿ãŸãããã ããã¯ãã«ã®ãã¯ãã«ãã ããã¯ãèªç¶ãªå ç©âšïŒ|uâ©ã|vâ©ïŒãïŒ|wâ©ã|zâ©ïŒâ©=âšu|wâ©+âšv|zâ©ãæã€çŽåãã«ãã«ã空éHâHã§ãã ãããã£ãŠãé䌎äœçšçŽ ã¯ãè¡ãã¯ãã«ãïŒâšu|âšv|ïŒãããªãç·åœ¢æŒç®åãçæããå¿ èŠããããŸãããã®èŠçŽ èªäœã¯ç·åœ¢æŒç®åã§ããé䌎äœçšçŽ ã¯ãååž°çã ã ããã¯ãäžå±€ãªã³ã°ã®å ±åœ¹ã«ãã£ãŠèªå°ãããåããã«ãã«ã空éHâHã®èŠçŽ ãçæããè€çŽ å ±åœ¹ãšã¯ãŸã£ããç°ãªããŸãã
ã¯ã©ãŒã¿ããªã³ãªã©ã®ãã¯ãã«ãåç §ããããšã§ãåé¡ãæ··ä¹±ãããŠããŸãã ãã¯ãã«ã®ãèŠçŽ ããåºç€ãšãªããcomplexifiedããªã³ã°ã®èŠçŽ ã§ããå Žåã«ã¯ãåœç¶ã®ããšãªããé䌎ãããããã®èŠçŽ ã®è€åäœã¯ãåããã®ã§ãã ãã ããããã¯ãã¹ãŠã®çŽæ¥è£œåã¹ããŒã¹ã«é©çšã§ããããã§ã¯ãããŸããã
èšãæãããšããªããžã§ã¯ãã¿ã€ãã¯ã2ã€ã®ç°ãªãæ å ±ã瀺ãå¿ èŠããããŸãã
Vector{T<:Number}
å Žåãã¹ã«ã©ãŒãªã³ã°ãT
ïŒãŸãã¯è€éåããããã¯ãã«ç©ºéã®å Žåã¯complex(T)
ïŒã§ãããå
ç©ãéåžžã®ãŠãŒã¯ãªããç©ã§ããããšã瀺ããã®ãšããŠèªã¿åãå¿
èŠããããŸãã ã
ãã¯ãã«ã®ãã¯ãã«ãããå Žåãããã¯çŽåãã«ãã«ã空éã§ããããªã³ã°ã¯åã ã®ãã¯ãã«ã®ã¹ã«ã©ãŒãªã³ã°ã®ææ Œã§ãããå ç©ã¯èŠçŽ ã®å ç©ã®åèšã§ãã ïŒã¹ã«ã©ãŒãææ Œã§ããªãå ŽåããŸãã¯å ç©ãåèšã§ããªãå Žåãããã¯ãã¯ãã«/ãã«ãã«ã空éã§ã¯ãããŸãããïŒ
ã¹ã«ã©ãŒT<:Number
å Žåã conj(x::T) == adjoint(x::T)
ã
ãããã£ãŠãè€çŽ æ°z::Complex{T}
ã2x2è¡åm(z)::Array{T,2}
ã§è¡šçŸããããšãããšãã¿ã€ãã¯z
ãšæ¯èŒããŠç°ãªããªã³ã°T
ãšç°ãªãå
ç©ã®äž¡æ¹ã瀺ããŸãã z
ã§ããããã conj
ãŸãã¯adjoint
ãããããåçã®çµæãããããããšãæåŸ
ããã¹ãã§ã¯ãããŸããã
@felixrehrenã®èšã£ãŠããããšãããããŸãã ã¹ã«ã©ãŒãå®æ°ã®å Žåããªã¯ãã«ãã¢ã³ã¯8次å
ã®ãã¯ãã«ç©ºéãšèããããšãã§ããŸãã ããããã¹ã«ã©ãŒä¿æ°ããªã¯ãã«ãã¢ã³ã§ããå Žåããã¹ãŠã®ãªã¯ãã«ãã¢ã³ãè¡šãèªæãªæ¬¡å
1ã®åºç€ããããŸãã ãããç§ãèšã£ãããšïŒãŸãã¯ç§ãæå³ããããšïŒsmile :)ãšç°ãªããã©ããã¯ããããŸãããã AbstractVector{T1}
ãããå Žåã¯ãç°ãªã次å
ã®AbstractVector{T2}
ãšååã§ããå¯èœæ§ããããŸãïŒ length
ïŒã ãã ãã T1
ãšT2
ã¯ãã©ã¡ããJuliaæŒç®å+
ãš*
äžã®ãªã³ã°ã§ããå¿
èŠããããŸãïŒååååã¯+
åäœãä¿æããå¯èœæ§ããããŸãïŒãã ãã *
ããŸãã¯å
ç©ãŸãã¯é䌎äœçšçŽ ã§ã¯ãããŸããïŒã
@stevengjç§ã¯ãã€ãBlockVector
ãŸã£ããåãããã«çŽåãèããŠããŸããã 2ã€ã®ïŒäºãã«çŽ ãªïŒäžå®å
šãªå¡©åºããããŸãã ååºåºå
ã§ãæåã®åºåºã§ã¯câ|Xââ©+câ|Xââ©ã2çªç®ã®åºåºã§ã¯câ|Yââ©+câ|Yââ©ã®ãããªéãåããã圢æã§ããå ŽåããããŸãã ãçŽåãã¯ãïŒcâ|Xââ©+câ|Xââ©ïŒ+ïŒcâ|Yââ©+câ|Yââ©ïŒã®ãããªç¶æ
ã®ç©ºéãè¡šããŸãã ãããè€çŽ æ°ã®æ¬¡å
4ã®åºåºããåé¢ããå¯äžã®ç¹å¥ãªããšïŒã€ãŸããcâ|Xââ©+c²|Xââ©+câ|Yââ©+câ|Yââ©ã®ãããªç¶æ
ïŒã¯æ¬åŒ§ã§ã-ç§ã«ã¯ãããã¯è¡šèšã®ããã§ãã çŽåã¯ãããããçŽã«æžããããã³ã³ãã¥ãŒã¿ãŒã®é
åã䜿ã£ãŠæžãããããã®ã«äŸ¿å©ãªæ¹æ³ã§ãïŒããšãã°ã察称æ§ãã«ã¿ãã°åããŠå©çšããããåé¡ãåå²ãããïŒãããã䞊ååããïŒãªã©ã«åœ¹ç«ã€å ŽåããããŸãïŒã ïŒã ãã®äŸã§ã¯ãXâYã¯äŸç¶ãšããŠã¹ã«ã©ãŒãè€çŽ æ°ã§ãã4次å
ã®ãã¯ãã«ç©ºéã§ãã
ãããã eltype(v) == Vector{Complex{...}}
ãšlength(v) == 2
ã§ã¯ãªãeltype(v) == Complex{...}
ãšlength(v) == 4
欲ããçç±ã§ãã ããã¯ãåºã«ãªããªã³ã°ãšãã¯ãã«ç©ºéã確èªããŠæšè«ããã®ã«åœ¹ç«ã¡ãŸãã é䌎äœçšçŽ ãèšç®ããããã«ãã°ããŒãã«ã転眮ãšèŠçŽ ããšã®conj
ãå®è¡ã§ããã®ãããã®ããã©ããåãããã空éã§ã¯ãããŸãããïŒ
ïŒç§ã1ã€ã ãæžããŠããéã«2ã€ã®æçš¿ããããŸããã @ stevengj ïŒsmile :)
ãã¡ããã BlockArray
ã§ã¯ãªããïŒçŸåšã®ããã«ïŒçŽåã®èŠåãšããŠãã¹ããããé
åã䜿çšããå Žåã¯ããããåªããäžè²«æ§ããããŸãã ã¹ã«ã©ãŒå ŽïŒäžçš®ã®ååž°çeltypeïŒãšãæå¹ãªå¹³åŠåããã次å
ïŒäžçš®ã®ååž°çãµã€ãºïŒã決å®ããããã®ããã€ãã®è¿œå é¢æ°ãå©çšããŠãå®è¡ããŠããç·åœ¢ä»£æ°ã«ã€ããŠå°ãç°¡åã«æšè«ã§ããããã«ããããšãã§ããŸãã
æ確ã«ããããã«ãç§ã¯äž¡æ¹ã®ã¢ãããŒãã«æºè¶³ããŠããããã®è°è«ããå€ãã®ããšãåŠã³ãŸããã ããããšãã
@ andyferris ã2ã€ã®ç©ºéãååã§ãããããšãã£ãŠããããããåãã空éã§ãããšã¯éããŸãããã©ã¡ãããæ¬åœã«ããã¯ãã«ç©ºéã§ãããïŒãŸãã¯ãæ¬åœã«ãåããã©ããïŒã«ã€ããŠè°è«ããããšã¯åœ¢èäžåŠçãªæ³¥æ²Œã§ããããããéããããšã¯ãããŸããã ïŒããããç¡é次å ã®ãã¯ãã«ç©ºéã®çŽåã®å Žåã¯ããäžæ¹ã®ãã¹ãŠã®èŠçŽ ã®åŸã«ä»æ¹ã®ãã¹ãŠã®èŠçŽ ãç¶ãããšããçŽåã®ãå¹³åŠåããããæŠå¿µã®å¶éã瀺ããŠããŸããïŒ
ç¹°ãè¿ããŸãããç§ã¯ããªãã®ãã€ã³ããäœã§ãããããããŸããã Juliaã®eltype(::Vector{Vector{Complex}})
ãComplex
ã«ããããšããŸãã¯length
ãé·ãã®åèšãè¿ãããšãçå£ã«ææ¡ããŠããŸããïŒ ãžã¥ãªã¢ã®èª°ããçŽå空éã«ããªãã®ãå¹³åŠåããããååãæ¡çšããããšã匷å¶ãããã¹ãã ãšïŒ ããã§ãªãå Žåãé䌎äœçšçŽ ã¯ååž°çã§ãªããã°ãªããŸããã
ãŸãããç¹å®ã®ç¹ãææããã®ã§ã¯ãªããããããç解ããããšããŠãããå Žåã¯ãå¥ã®ãã©ãŒã©ã ã«æã¡èŸŒãããšãã§ããŸããïŒ ãã®åé¡ã¯ãçŽå空éã®æå³ã«ã€ããŠåœ¢èäžåŠçãªè°è«ããªããã°ååã«æ··ä¹±ããŸãã
2ã€ã®ã¹ããŒã¹ãååã§ãããããšãã£ãŠããããããåããã¹ããŒã¹ã§ãããšã¯éããŸããã
ç§ã¯çµ¶å¯Ÿã«ããã瀺åããŠããŸããã§ããã
ç¹°ãè¿ããŸãããç§ã¯ããªãã®ãã€ã³ããäœã§ãããããããŸãã
AbstractArray
ã§ç·åœ¢ä»£æ°ãå®è¡ãããå Žåã¯ã eltype
æ¹ããªã³ã°ã§ããããšãçå£ã«ææ¡ãããŠããŸãïŒ +
ã *
ãããã³conj
ãµããŒãïŒ [1,2] * [3,4]
ãæ©èœããªããããããšãã°Vector
eltypeãé€å€ããŸãã ãããŠããã¯ãã«ã®length
ã¯ãå®éã«ã¯ç·åœ¢ä»£æ°ã®æ¬¡å
ãè¡šããŸãã ã¯ããããã¯ç¡é次å
ã®ãã¯ãã«ç©ºéãé€å€ããŸãããäžè¬çã«Juliaã§ã¯AbstractVector
ãç¡éã®ãµã€ãºã«ããããšã¯ã§ããŸããã ããã«ãããJuliaã§ç·åœ¢ä»£æ°æ©èœãå®è£
ããã³äœ¿çšããæ¹æ³ã«ã€ããŠæšè«ãããããªããšæããŸãã ãã ãããŠãŒã¶ãŒã¯ããã¹ããããé
åæ§é ã䜿çšããã®ã§ã¯ãªãã BlockArray
ãªã©ãä»ããŠçŽæ¥åèšãæ瀺çã«ç€ºãå¿
èŠããããŸãã
ããã¯éåžžã«ç»æçãªææ¡ã§ãããé¡èãªæ¬ ç¹ããããŸãïŒããªããèšåãããã®ããããŸãïŒã®ã§ããããã¯ããèãã§ãããå®çšçã§ã¯ãªãããšèšã£ãŠãäžå¹žã«ãªãããšã¯ãããŸããã ãã ãããã¹ããããé åã¢ãããŒãã§ã¯ãåºç€ãšãªãç·åœ¢ä»£æ°ã«é¢ããããã€ãã®ããšãå°ãäžéæã«ãªãããšãææããããšããŠããŸãã
ããã¯ãã¹ãŠãOPã«çŽæ¥é¢é£ããŠããããã§ãã 匷å¶çãªå¹³åŠåã¢ãããŒãã§ã¯ãååž°ç転眮/é䌎ãç Žæ£ããŸããååž°ç転眮/é䌎ãç Žæ£ããå Žåãç·åœ¢ä»£æ°ã§ã¯å¹³åŠåãããæ§é ã®ã¿ãå®è¡å¯èœã«ãªããŸãã å¹³åŠåãããã¢ãããŒãã匷å¶ããªãå Žåã¯ãååž°çãªé䌎äœçšçŽ ãç¶æããå¿ èŠããããŸãã ç§ã«ã¯ãããã¯é¢é£ãã決å®ã§ããããã«æãããŸããã
Juliaã®
eltype(::Vector{Vector{Complex}})
ãComplex
ã«ããããšããŸãã¯length
ãé·ãã®åèšãè¿ãããšãçå£ã«ææ¡ããŠããŸããïŒ
ããããç³ãèš³ãããŸããããç§ãæžããå
容ãæ確ã§ã¯ãªãã£ãå¯èœæ§ããããŸããç¹å®ã®ç¶æ³ã§ã¯ããã®ç®çã®ããã®2ã€ã®æ°ãã䟿å©ãªæ©èœã圹ç«ã€å¯èœæ§ãããããšã瀺åããã ãã§ãã ããšãã°ããã®ãªã³ã°ã®zero
ãŸãã¯one
ãå¿
èŠãªå ŽåããããŸãã
ãžã¥ãªã¢ã®èª°ããçŽå空éã«ããªãã®ãå¹³åŠåããããååãæ¡çšããããšã匷å¶ãããã¹ãã ãšèšã£ãŠããŸããïŒ
å¯èœæ§ãšããŠãããã ãšææ¡ããŠããŸããã ç§ã¯ãããæåã®ã¢ã€ãã¢ã§ãããš100ïŒ ç¢ºä¿¡ããŠããããã§ã¯ãããŸããããããã€ãã®å©ç¹ïŒããã³ããã€ãã®æ¬ ç¹ïŒããããšæããŠããŸãã
ããã§å®è¡å¯èœãªå€æŽã®é åã«æ»ããšã @ stevengjã®ææ¡ã®ç°¡ç¥åãããããŒãžã§ã³ããããã«é²ãæ¹æ³ã®ããã§ãã
conj
ãã®ãŸãŸïŒèŠçŽ ããšã«ïŒä¿æããŸããa'
ãadjoint(a)
ã«å¯Ÿå¿ãããåžžã«ååž°çã«ããŸãïŒãããã£ãŠãèŠçŽ ã«é䌎ãå®çŸ©ãããŠããªãæååã®é åãªã©ã§ã¯å€±æããŸãïŒãa.'
ãtranspose(a)
ã«å¯Ÿå¿ãããååž°çã§ã¯ãªãããã«ãïŒpermutedims
ïŒãèŠçŽ ã®ã¿ã€ããç¡èŠããŸãã
ããããæœåºã§ããäž»ãªå®éã®ãtodoãã¯æ¬¡ã®ãšããã§ãã
ctranspose
ååãadjoint
ãŸããtranspose
ãéååž°çã«å€æŽããŸããååž°ç転眮ã«äŸåããããšã¯ååã«ãŸãã§ãããããããã1.0ã§å€æŽããŠãNEWSã§å£ããŠãããšãªã¹ãããããšãã§ãããšæããŸãã ctranspose
ãadjoint
ã«å€æŽãããšãéåžžã®éæšå¥šã«ãªãå¯èœæ§ããããŸãïŒãã ãã1.0ã§ã¯ãããè¡ããŸãïŒã ä»ã«ãããªããã°ãªããªãããšã¯ãããŸããïŒ
@StefanKarpinski ã察å¿ããå€æŽãRowVector
ã«å ããå¿
èŠããããŸãã 1ã€ã®å¯èœæ§ã¯ã RowVector
ãTranspose
Adjoint
ã¿ã€ããštranspose
ãšã¬ã€ãžãŒååž°adjoint
ããããã䜿çšããããšã§ãããããŠConj
ïŒæ æ°ãªconj
ïŒãåãé€ãããã«ã
å°ãªããšãæ¥ç·æ¹åã«é¢é£ããããã€ãã®å€æŽ
transpose
ãšadjoint
ã®AbstractMatrix
adjoint(::Diagonal)
ååž°çã«ããŸãïŒãããããJuliav0.6.0ããåã®transpose
ãšctranspose
Diagonal
ã§ãã®ããã°ããä¿®æ£ããå¿
èŠããããŸãïŒv = Vector{Vector{Float64}}(); dot(v,v)
ïŒçŸåšã¯ãšã©ãŒ- zero(Vector{Float64})
ãè¿ãããšããŸãïŒOKãç§ã¯ååž°çãªåºåè¡åãããçå£ã«åãæ¢ããããšããŠããããããããã¯ã¢ããããããã«ãããã§Diagonal
ã®åäœãæ¹åããããšããŠããŸãïŒãããã¯å¯Ÿè§ãäºæž¬ããããã€ãã®æ¹æ³ããã§ã«ãããŸãïŒ getindex
ãªã©ã®æ§é ãªã®ã§ããã®å Žåã¯è»¢çœ®ãååž°çã«ããã®ãèªç¶ãªããã§ãïŒã
ç§ãè¡ãè©°ãŸããäžèšã®ãã¹ãŠã®è°è«ã®ãã€ã³ããçŽæ¥åæ©ä»ããã®ã¯ã inv
ã det
ã expm
ãå«ããã®ãããªæ§é ã§ç·åœ¢ä»£æ°æŒç®ãè¡ãæ¹æ³ã§ãã eig
ãªã©ã ããšãã°ããã¹ãŠã®å¯Ÿè§èŠçŽ ã®ç©ããšãdet(::Diagonal{T}) where T
ã¡ãœããããããŸãã T <: Number
ã§èŠäºã«æ©èœãããã¹ãŠã®èŠçŽ ãåããµã€ãºã®æ£æ¹è¡åãŸãã ïŒåœŒãã¯åããµã€ãºã®æ£æ¹è¡åã§ããå Žåã¯ãã¡ããããã®åŸã®èŠçŽ ãç°ã圢æãããããŠããã¯ãã¹ãŠã®éåžžã«è³¢æã -ãŸããå垰転眮ïŒç·šéïŒé䌎ïŒãæ£ãããã®ã§ãïŒã
ãã ããäžè¬çãªãããã¯å¯Ÿè§è¡åDiagonal{Matrix{T}}
ããŸãã¯ä»»æã®ãããã¯è¡åMatrix{Matrix{T}}
ãèãããšããã®è¡ååŒã¯äžè¬ã«ã¹ã«ã©ãŒT
ãšèšããŸãã ã€ãŸãããµã€ãºã(3 â 4) à (3 â 4)
ïŒ3Ã3ã4Ã4ã®æ¬¡å
ã®è¡åã§ãããäžèŽããé察è§èŠçŽ ã§ãã察è§èŠçŽ ãæã€2Ã2è¡åïŒã®å Žåã det
ã¯ãå¹³åŠåãããã7Ã7æ§é ã®è¡ååŒã§ããããããšãåã«2Ã2ã®èŠçŽ ããã®ãŸãŸä¹ç®ããå¿
èŠããããŸããïŒãã®å Žåã¯ãšã©ãŒã¢ãŠãïŒïŒ
ïŒç·šéïŒäžèšã®ãã£ã¡ã³ã·ã§ã³ããã¹ãŠç°ãªããã®ã«å€æŽããŸãããããã«ããããããŸããªèšèªãé¿ããããšãã§ããŸãïŒ
a'
ãååž°çã§ããããšã«åé¡ã¯ãããŸããããå人çã«ã¯ãæ°ããa.'
è¡šèšãéåžžã«æ··ä¹±ããŠããããšã«æ°ä»ãã§ãããã æ§æa.'
ãèŠããŠããããããžã¥ãªã¢ã®ã¡ã³ã¿ã«ã¢ãã«ã«åºã¥ããŠã transpose.(a)
ã€ãŸãa
èŠçŽ ããšã®è»¢çœ®ãå®è¡ãããšèšããŸããéãã ãŸãã¯ã a'
ãša.'
äž¡æ¹ã転眮ã®ãªãã·ã§ã³ã§ããããã®ãã¡ã®1ã€ãèŠçŽ ããšã«ååž°ããããšã瀺ããå Žåã a.'
ã¯èŠçŽ ããšã®ååž°ããããŠç§ã¯åã³ééã£ãŠããã§ãããã
ãã¡ããããã®å Žåã .
ãäœãæå³ãããã«ã€ããŠã®ç§ã®ã¡ã³ã¿ã«ã¢ãã«ã¯ééã£ãŠããŸãã ãããããã®æ§æããŸã£ããééã£ãæ¹æ³ã§è§£éããã®ã¯ç§ã ãã§ã¯ãªããšæããŸãã ãã®ããã«ã¯ãéååž°çãªè»¢çœ®ã«.'
以å€ã®ãã®ã䜿çšããããšããå§ãããŸãã
@rdeitsãã®æ§æã¯MATLABãã掟çããŠãããšæããŸãã ïŒéåžžã«çŽ æŽãããïŒãããã³ãŒã«ãããŒããã£ã¹ãæ§æãv0.5ã«å°å ¥ããããšãããã¯å°ãäžå¹žã«ãªããŸããã
MATLABãšã¯å¥ã«ç¬èªã®ãã¹ãäœæãããããå€æŽããããšãã§ããŸãããããã«ã€ããŠã¯å¥ã®è°è«ããã£ããšæããŸãïŒèª°ããã©ããèŠããŠããŸããïŒïŒã
ãããããã¯æ®å¿µã§ãã ããããšãïŒ
å¥ã®ããããšïŒ
issymmetric
ãšishermitian
ãä¿®æ£ããŠã issymmetric
transpose
ãšadjoint
ã«äžèŽãããŸããåãã¢ã®åè
ã¯éååž°çã§ãåŸè
ã¯ååž°çã§ããMatlabã®.'
æ§æã¯ãæ°ãã.
æ§æã®ã³ã³ããã¹ãã§ã¯ééããªãéåžžã«æ®å¿µã§ãã ãããå€æŽããããšã«å察ããã€ããã¯ãããŸãããã転眮ã®ããã®æ°ããæ§æãå¿
èŠã§ããã䜿çšã§ããæ§æããããã©ããã¯ããããŸããã 転眮ã®ææ¡ã¯ãããŸããïŒ
転眮æ§æã®èª¬æãããã«ç§»åããŸãããïŒ https ïŒ
transpose
/ ctranspose
/ adjoint
ãååž°çã§ãããšãã匷ãæèŠã¯ãããŸãããã A::Matrix{Matrix{T}}
ããããã¯è¡åã®ããã«æ±ããããããŸãããæ æ°ãªhvcat
æèŠãããã¯ã @ andyferrisãå°ãªããšãéšåçã«æ瀺ããŠããããã§ãã ã€ãŸãã A
ã®èŠçŽ ããã¹ãŠåããµã€ãºã®æ£æ¹è¡åã§ããå ŽåïŒã€ãŸãããªã³ã°ã圢æããå ŽåïŒã det(A)
ã¯ãã®ãµã€ãºã®æ£æ¹åœ¢ãåã³è¿ããšäºæ³ãããŸãã é·æ¹åœ¢ãŸãã¯ãµã€ãºãç°ãªãå Žåã¯ããšã©ãŒãçºçããå¯èœæ§ããããŸãã
ãšã¯èšããã®ã®ããããã¯è¡å/æ æ°ãªç«ã®ã¿ã€ãã¯äŸ¿å©ãããããŸããããããã¯ãã£ãšè¡ãæž¡ãããã©ããåãããããŒã¿ãåŠçããããã«ããšãã°getindex
ãå®çŸ©ããå¿
èŠããããŸãã ããããç§ã¯ãã®æŠå¿µãMatrix
ãDiagonal
ãããªä»ã®æ¢åã®ãããªãã¯ã¹ã¿ã€ãã«åžåãããããšã絶察ã«æãã§ããŸããã
@martinholtersãããã¯å®å¿ã§ãã ãã®ã¹ã¬ããã®ååã§ç§ããããã¯ã«é¥ã£ãã®ã¯ãJuliaã®ç·åœ¢ä»£æ°ãã¬ãŒã ã¯ãŒã¯å
šäœãä»»æã®ãããã¯è¡åïŒéšåè¡åã®ãµã€ãºãç°ãªãïŒã®Matrix{Matrix}
ã«é©çšã§ããã¯ãã ãšããèãã§ããã
ç§ããå¹³åŠåãã§äž»åŒµããŠããã®ã¯ãèŠçŽ ãäœã§ãããã«ã€ããŠã®æŽŸæãªå
çãè¡ãããšã§ã¯ãªããåã«èŠçŽ èªäœã®ã¡ãªããããªã³ã°ã®èŠçŽ ãšããŠæ±ãããšã§ãã ãã ããååž°çãªctranspose
/ adjoint
ã¯ãããæ¡åŒµããŠãç·åœ¢æŒç®åã®ããã«æ©èœããèŠçŽ ãèš±å¯ããŸããããã¯æ£ãããŠäŸ¿å©ãªããã§ãã ïŒä»ã®å Žåã¯ããã¯ãã«ã®ããã«æ©èœãããã¯ãã«ã®èŠçŽ ã§ãããååž°çé䌎ãæ£ããã§ãïŒã
ããå°ãæ»ããšã transpose(x) = x
ãšctranpsose(x) = conj(x)
ããã©ã«ãã®no-opåäœãåé€ããå
ã®åæ©ã¯äœã§ãããïŒ ãããã¯ãã€ãç§ã«ãšã£ãŠéåžžã«äŸ¿å©ã«æããŸããã
ããå°ãæ»ããšãtransposeïŒxïŒ= xããã³ctranpsoseïŒxïŒ= conjïŒxïŒã®ããã©ã«ãã®no-opåäœãåé€ããå ã®åæ©ã¯äœã§ãããïŒ ãããã¯ãã€ãç§ã«ãšã£ãŠéåžžã«äŸ¿å©ã«æããŸããã
ããã¯ã ctranspose
ãç¹æ®åã§ããªãã£ãã«ã¹ã¿ã ç·åœ¢æŒç®åã¿ã€ãïŒAbstractArrayã®ãµãã¿ã€ãã«ããããšã¯ã§ããŸããïŒã«ãã£ãŠåæ©ä»ããããŸããã ããã¯ããã©ãŒã«ããã¯ãã誀ã£ãno-opåäœãç¶æ¿ããããšãæå³ããŸãã ãã©ãŒã«ããã¯ãé»ã£ãŠééã£ãŠããŸãããšããªãããã«ãã£ã¹ããããæ§æããããšããŸããïŒãã ããæ²èŠ³çãªè€éããããå¯èœæ§ããããŸãïŒã https://github.com/JuliaLang/julia/issues/13171
2ã€ã®ãªãã·ã§ã³ãããããã§ããã©ã¡ãã®å Žåãã transpose
ã¯éååž°çã«ãªããŸãããã以å€ã®å Žåã¯ã次ã®ããã«ãªããŸãã
ctranspose
ãctranspose
ã@ stevengj ã @ jiahao ã @ andreasnoack âããã§ã®ããªãã®å¥œã¿ã¯äœã§ããïŒ ãã®ä»ïŒ
@jiahaoã®JuliaCon2017ã®è¬æŒä»¥æ¥ãç§ã¯ããã«ã€ããŠå€ãã®ããšãèããŠããŸããã
ç§ã«ã¯ãç·åœ¢ä»£æ°ãèŠçŽ ã¿ã€ãT
ãšããŠãã¹ã«ã©ãŒããã£ãŒã«ãã«é¢ããŠå®çŸ©ããå¿
èŠããããšä»ã§ãæããŠããŸãã T
ããã£ãŒã«ãã®å ŽåïŒ +
ã *
ãããã³conj
ïŒ -
ã /
ã..ããµããŒãïŒ ãïŒïŒ Base.LinAlg
ã¡ãœããã倱æããçç±ãããããŸããã
OTOHããšãã°ããããã¯è¡åã®è»¢çœ®ã«ã€ããŠè©±ãããšã¯éåžžã«äžè¬çïŒãããŠæå¹ïŒã§ãã ããã§ãæ°åŠãåçè«ããåŠã¶ããšãã§ãããšæããŸããããšãã°ãã1次ãã®ã¹ã«ã©ãŒã®ã»ãããã2次ãã®ã¹ã«ã©ãŒã®ã»ãããã3次ãã䜿çšããŠãã»ããã®ã»ããã«ã€ããŠè°è«ããããšããçããå¥åŠãªã¹ããŒãã¡ã³ããåŠçããããšããŸããã¹ã«ã©ãŒã®ã»ããã®ã»ããã®ãé åºãã»ãããªã©ã é åã®é åãæ±ãå Žåãããã§ãåãåé¡ïŒããã³æ©äŒïŒããããšæããŸããJuliaã®åã·ã¹ãã ã䜿çšããŠããçã®ãã¹ã«ã©ãŒã®ã1次ãé åãã¹ã«ã©ãŒã®é åã®ã2次ãé åãªã©ãèšè¿°ããããšãã§ããå¯èœæ§ããããŸãã ã @ stevengj ãç§ãããã³ä»ã®äººã®éã®é·ãè°è«ã¯ãã¯ããä»»æã®ãé åºãã®é åã«å¯ŸããŠèªå·±ççŸã®ãªãäžé£ã®æäœãæãä»ãããšãã§ãããšããäºå®ããçãããšæããŸãããã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯ïŒcïŒè»¢çœ®ã¯æ確ãã€æ£ç¢ºã«ååž°çã§ããããããè¡ãå¿ èŠã¯ãããŸããã Jiahaoã®è©±ãæ確ã«ææããŠããããã«ãããã°ã©ãã³ã°èšèª/ãã¬ãŒã ã¯ãŒã¯ã¯ãã¹ã«ã©ãŒãé åããåºå¥ããïŒãŸãã¯ããªãïŒããã¯ãã«ãè¡åããåºå¥ããïŒãŸãã¯ããªãïŒãªã©ã«ã€ããŠæå³çãªéžæãè¡ããŸããããã¯ç§ãã¡ãè¡ãããšãã§ããé¢é£ããéžæã ãšæããŸãã
ç§ã«ãšã£ãŠãããã§éèŠãªç¹ã¯ããä»»æã®é åºãã®é
åãæ©èœãããã«ã¯ãéåžžã¯ãã¯ãã«ãšè¡åã§ã®ã¿å®çŸ©ãããããã€ãã®æäœããã¹ã«ã©ãŒãã«æããå¿
èŠããããšããããšã§ãã ãããè¡ãçŸåšã®Juliaã¡ãœããã¯transpose(x::Number) = x
ã§ãã ãã ãããã®ã¡ãœãããåé€ããããšã§ãé
åãšã¹ã«ã©ãŒã®æå³äžã®åºå¥ãæ¡åŒµãããã®ã§ãããããã¯ããªãå®çŸå¯èœãããããªããšæããŸãã
次ã®ã¹ãããã¯ã1次è¡åãš2次è¡åã®éããªã©ãBase.LinAlg
ã«æããããšã§ãã ç§ã¯2ã€ã®å®è¡å¯èœãªãªãã·ã§ã³ãèããŸããããã£ãšãããããããŸãããç§ã¯æ¬åœã«ç¥ããŸããïŒ
transpose(::AbstractMatrix{T})
æã«ååž°çã§ããT
ããAbstractMatOrVec
ãšãã§ã¯ãªãã T
ãããŸãNumber
ããã以å€ã®å Žåã¯äœããã®æ¹æ³ã§æ§æå¯èœïŒãªããã€ã³ããªããã¢ãŠããªã©ïŒã«ããŸãã ïŒããã€ãã®ç¹ã§ãããã¯èŠçŽ ã®transpose
ã¡ãœããã®åäœãå¶åŸ¡ããããšã«ãã£ãŠè¡ãããŠããŸããããçŸåšã¯ïŒouterïŒã®transpose
ã¡ãœããã®åäœãå¶åŸ¡ããæ¹ãã¯ãªãŒã³ã ãšæããŸãã ïŒé
åïŒãArray
ãå«ãã»ãšãã©ã®AbstractArray
ã1次ã§ããïŒèŠçŽ ã¯ã¹ã«ã©ãŒãã£ãŒã«ãã§ããïŒãå¥ã®AbstractArray
ã¿ã€ãïŒããšãã°NestedArray
ïŒã䜿çšããããšãè¡šæããŸãã ïŒé
åãã©ãããããããã®èŠçŽ ãã¹ã«ã©ãŒã§ã¯ãªãé
åãšããŠæ±ãããããšããããŒã¯ãããŸãã ãããå°ãè©ŠããŠã¿ãŸããããäžèšã®ãªãã·ã§ã³ã®æ¹ããŠãŒã¶ãŒã®è² æ
ãå°ãªãããã§ããJuliaã¯é
åãšã¹ã«ã©ãŒã匷åã«ã»ãã³ãã£ãã¯ã«åé¢ããŠããããã«æããŸãããŸããã¹ã«ã©ãŒã¯é
åããããã£transpose
ã«ã€ããŠãæãããããå¿
èŠããããããçŸåšã®ç¶æ³ã¯ïŒç§ã«ã¯ïŒå°ãççŸããŠããããã«èŠããŸãã ãŠãŒã¶ãŒã¯ã Matrix{Float64}
ãã¹ã«ã©ãŒã®è¡åïŒ1次é
åïŒã§ããã Matrix{Matrix{Float64}}
ããããã¯è¡åïŒ2次é
åïŒã§ããããšãæ確ã«ç解ã§ããŸãã åã·ã¹ãã ãŸãã¯ç¹æ§ã䜿çšããŠãé
åããäžæ¬¡ãã§ãããã©ãããå€æããæ¹ãäžè²«ããŠããå ŽåããããŸãã ãŸããæåã«ãªã¹ããããªãã·ã§ã³ã䜿çšãããšãJuliaããããŠãŒã¶ãŒãã¬ã³ããªãŒã«ãªãïŒ ["abc", "def"].'
ãå®è¡ã§ããŸãïŒããããã¯è¡åã䜿çšããŠå®çšçã§äŸ¿å©ãªããã©ã«ãã®åŠçãå®è¡ã§ããæè»æ§ãç¶æããããšæããŸãã
é·ãéããŒãããŠç³ãèš³ãããŸãããã JuliaConã§@jiahaoãšè©±ããåŸãããã§ããå°ãããŸãããããšæããŸããã @StefanKarpinskiãäžèšã§èšåããä»ã®ãªãã·ã§ã³ããæ©èœããããããšãã§ãããšç¢ºä¿¡ããŠããŸããã RowVector
ãå°å
¥ãããåã¯ãè¡å/ãã¯ãã«ä»£æ°ããæ©èœãããŠããã®ãšåãããã«ãæ©èœãããŸãã
TLDRã¯-ïŒ c
ïŒ transpose
ååž°çã«ãããããªãã-äž¡æ¹ãå®è¡ãããŸãïŒã€ãŸããæ§æå¯èœã«ããŸãïŒã
ãããã¯è¯ãç¹ã§ããã (c)transpose
ãååž°çã§ãããšããèŠæ
ã®ã»ãšãã©ãã¹ãŠïŒãã¹ãŠã§ã¯ãªãã«ããŠãïŒã¯ã '
ãš.'
éæ°åŠçãªäœ¿çšã«é¢é£ããŠããããšãææããããšæããŸãã Vector{String}
ãšVector{PyObject}
ã1xnè¡åã«å圢æããå Žåã ã¿ã€ãããšã«ä¿®æ£ããã®ã¯ç°¡åã§ãããé¢åã§ããããšãããããŸãã ãã ããååž°çå®çŸ©ã¯æ°åŠçã«æ£ãããã®ã§ãããã䟿å©ã ããŸããªå Žåã¯ééã£ãŠãããããããæ£ãããå€ãã®å Žåã¯ç
©ããããã®æ¹ãåªããŠãããšèããããŠããŸããã
èãããã解決çã¯ãæåã®ç®æ¡æžãã§ã®ææ¡ã§ããã€ãŸããé
åã®ãããªèŠçŽ ã«å¯ŸããŠååž°çãªè»¢çœ®ãè¡ãããšã ãã§ãã T<:AbstractVecOrMat
ã¯ãã¹ããŒã¿ã¹ãã䟿å©ã ãéåžžã«ãŸããªã±ãŒã¹ã§ã¯ééã£ãŠãããã«å€æŽããã»ãšãã©ã®ã±ãŒã¹ãã«ããŒãããšæããŸãã ããã§ãééã£ãŠããå¯èœæ§ãããçç±ã¯ã AbstractArray
ã€ã³ã¿ãŒãã§ã€ã¹ãäž»ã«é
åïŒ getindex
ïŒã»ãã³ãã£ã¯ã¹ã«é¢ãããã®ã§ãããããäžéšã®æŒç®åã®ãããªåãAbstractMatrix
ã«ããŽãªã«é©åããªãããã§ãã ãç·åœ¢ä»£æ°ã§ã¯ãããŸããã
@andyferris ãã¹ã«ã©ãŒã®é䌎ããã³å察ã¯å®å
šã«æ確ã«å®çŸ©ãããŠããã ctranspose(x::Number) = conj(x)
ã¯æ£ããã§ãã
ç§ã®æãã§ã¯ã transpose
ã»ãšãã©ã®äœ¿çšæ³ã¯ãæ°åŠçã§ã¯ãªãããã®ã§ããã ctranspose
ã»ãšãã©ã®äœ¿çšæ³ïŒã€ãŸãã掻çšè¡åãæãŸããå Žæã§ã®äœ¿çšïŒã¯ãã·ãŒã§ãïŒæŽ»çšããçç±ãä»ã«ãªãããïŒ ïŒã ãããã£ãŠãç§ã¯éååž°çãªtranspose
ãšååž°çãªctranspose
ã奜ãåŸåããããŸãã
å人çã«ã¯ããã¹ããããArrays
ãšããŠãããã¯é
åãèŠãããšãããšãããã§ã®çç±ã«ããè€éã«ãªããšæããŸããhttpsïŒ//github.com/KristofferC/BlockArrays.jlã®å°çšã¿ã€ãã䜿çšããæ¹ãããã§ããã
@KristofferCãããããã ã
@stevengjãäžã§è¿°ã¹ãéåžžã«æå¹ãªç¹ã1ã€ãããŸããããã¯ãèŠçŽ ãæ°åŠçãªæå³ã§ã®ãã¯ãã«ãç·åœ¢æŒç®åã§ããå ŽåããããŸããã AbstractArray
ã§ã¯ãªãå Žåããããšããããšã§ãã ãããã«å¯ŸããŠååž°çãªïŒcïŒç§»èª¿ãè¡ãæ¹æ³ã絶察ã«å¿
èŠã§ã-ããã«ã€ããŠèãããã©ããã¯ããããŸããããç§ã¯ããã«ã€ããŠèšåããããšæããŸããã
ãã®ãããã¯ã«é¢ããslack /ïŒlinalgäŒè©±ã®ãã€ã©ã€ãã äžèšã®ã¹ã¬ããã®äžéšãèŠçŽããŸãã ã»ãã³ãã£ã¯ã¹ã«çŠç¹ãåœãŠãã¹ãã«ãåé¿ããŸãã ïŒãã®äŒè©±ã«åå ãããã¹ãŠã®äººã«æè¬ããŸãïŒ:)ïŒ
3ã€ã®æå³çã«ç°ãªãæäœãååšããŸãã
1ïŒãæ°åŠçé䌎äœçšçŽ ãïŒååž°çã§æ æ°ãªïŒ
2ïŒãæ°åŠçãªè»¢çœ®ãïŒçæ³çã«ã¯ååž°çã§æ æ°ãªïŒ
3ïŒãæ§é ç転眮ãïŒçæ³çã«ã¯éååž°çã§ãç±å¿ãïŒ
çŸåšã®ç¶æ³ïŒ2次å
C
å Žåããæ°åŠçãªé䌎ãã¯ctranspose
ããæ°åŠçãªè»¢çœ®ãã¯transpose
ã«ããæ§é çãªè»¢çœ®ãã¯permutedims(C, (2, 1))
ã«ããããããŸãããããŠreshape(C, 1, length(C))
äždimesionalã®ããã®C
ã åé¡ïŒãæ§é ç転眮ãã¯äžè¬çãªæäœã§ããã permutedims
/ reshape
話ã¯ãå®éã«ã¯ããæ··ä¹±/äžèªç¶/è¿·æã§ãã
ãããã©ã®ããã«çºçãããïŒä»¥åã¯ããæ§é 転眮ãã¯ã transpose(x::Any) = x
ã ctranspose(x::Any) = conj(x)
ã conj(x::Any) = x
ãªã©ã®äžè¬çãªno-opãã©ãŒã«ããã¯ãä»ããŠãæ°åŠé䌎ã/ãæ°åŠè»¢çœ®ããšæ··åãããŠããŸããã ãããã®ãã©ãŒã«ããã¯ã«ãããã»ãšãã©ã®å Žåã [c]transpose
ãšé¢é£ããæ¥å°ŸèŸæŒç®å'
/ .'
ããæ§é 転眮ãã«äœ¿çšãããŸãã ãããã ãããããããã®ã¿ã€ãã®[c]transpose
ç¹æ®åã®å®çŸ©ããªãå Žåãäžéšã®ãŠãŒã¶ãŒå®çŸ©ã®æ°å€ã¿ã€ãã§[c]transpose
ãå«ãæäœããµã€ã¬ã³ãã«å€±æããïŒèª€ã£ãçµæãè¿ãïŒããšããããŸããã çãã ãããã£ãŠããããã®äžè¬çãªno-opãã©ãŒã«ããã¯ã¯åé€ãããçŸåšã®ç¶æ³ãåŸãããŸããã
åé¡ã¯ä»äœããã¹ããã§ãã
çæ³çãªçµæïŒãæ§é ç転眮ãã®ããã®çµ±äžããããèªç¶ã§ã³ã³ãã¯ããªåªæãæäŸããŸãã æå³çã«æ£ããæ°åŠçé䌎ãšè»¢çœ®ãåæã«ãµããŒãããŸãã 䜿çšäžãŸãã¯å®è£ æã«ããªãããŒãªã³ãŒããŒã±ãŒã¹ãå°å ¥ããããšã¯é¿ããŠãã ããã
2ã€ã®åºãææ¡ãååšããŸãïŒ
ïŒ1ïŒæ°åŠçé䌎ãæ°åŠç転眮ãããã³æ§é ç転眮ããæ§æçããã³æå³çã«ç°ãªã3ã€ã®æŒç®ãšããŠæäŸããŸãã å©ç¹ïŒãã¹ãŠãæ©èœããæŠå¿µãæ確ã«åé¢ãããããªãããŒãªã³ãŒããŒã±ãŒã¹ãåé¿ãããŸãã æ¬ ç¹ïŒèª¬æããã³å®è£ ãã3ã€ã®æäœã
ïŒ2ïŒ3ã€ã®æäœã2ã€ã«ã·ã¥ãŒããŒã³ããŸãã ãã®ææ¡ã«ã¯3ã€ã®åœ¢åŒããããŸãã
ïŒ2aïŒ transpose
æå³çã«ãæ§é ç転眮ãã«ããäžè¬çãªå Žåã«ã¯ãæ°åŠç転眮ããšããŠãæ©èœããŸãã å©ç¹ïŒ2ã€ã®æäœã æ確ãªã¹ã«ã©ãŒèŠçŽ ãæã€ã³ã³ãããŒã§æåŸ
ã©ããã«æ©èœããŸãã æ¬ ç¹ïŒãæ°åŠçãªè»¢çœ®ãã»ãã³ãã£ã¯ã¹ãæåŸ
ãã人ã¯èª°ã§ããæ確ã«ã¹ã«ã©ãŒèŠçŽ ãæã€ã³ã³ãããŒãããè€éãªãªããžã§ã¯ãã§èª€ã£ãçµæããµã€ã¬ã³ãã«åãåããŸãã ãŠãŒã¶ãŒããã®åé¡ãèŠã€ããå Žåããæ°åŠçãªè»¢çœ®ãã»ãã³ãã£ã¯ã¹ãå®çŸããã«ã¯ãæ°ããã¿ã€ããã¡ãœãããå®çŸ©ããå¿
èŠããããŸãã
ïŒ2bïŒã¿ã€ãã®ããã·ãã¹ãã瀺ãç¹æ§ãå°å
¥ããŸãã ãªããžã§ã¯ãã«é䌎/転眮ãé©çšãããšãã«ãã³ã³ãã/èŠçŽ ã®ã¿ã€ãããæ°åŠãã§ããå Žåã¯ãååž°ããŸãã ããã§ãªãå Žåã¯ãååž°ããªãã§ãã ããã å©ç¹ïŒ2ã€ã®æäœã ããŸããŸãªäžè¬çãªã±ãŒã¹ãã«ããŒã§ããŸãã æ¬ ç¹ïŒäžè¬çãªno-op [c]transpose
ãã©ãŒã«ããã¯ãšåãåé¡ãçºçããŸããã€ãŸããå¿
èŠãªç¹æ§å®çŸ©ããªããŠãŒã¶ãŒå®çŸ©ã®æ°å€ã¿ã€ãã«å¯ŸããŠããµã€ã¬ã³ãã«èª€ã£ãçµæãçããå¯èœæ§ããããŸãã ãæ°åŠãã¿ã€ããžã®æ§é ç転眮ãŸãã¯ãéæ°åŠãã¿ã€ããžã®æ°åŠç転眮ã®é©çšãæå¹ã«ããŸããã ãã¹ãŠã®å Žåã«ãããŠããªããžã§ã¯ãããæ°åŠçãã§ãããã©ãããå€æããæ¹æ³ãæ確ã§ã¯ãããŸããã ïŒããšãã°ãèŠçŽ ã¿ã€ããæœè±¡ã§ããå Žåã¯ã©ããªããŸããïŒååž°ç/éååž°ç決å®ã¯ãå®è¡æãšèŠçŽ ããšããŸãã¯å®è¡æã§ãããéåã¿ã€ãããã§ãã¯ããããã«ã³ã³ãããŒå
ã®ãã¹ãŠã®èŠçŽ ã«å¯ŸããŠæåã®ã¹ã€ãŒããå¿
èŠã§ããïŒïŒ
ïŒ2cïŒ adjoint
ïŒ ctranspose
ïŒãæ°åŠé䌎ããštranspose
ãæ°åŠè»¢çœ®ããç¶æãã adjoint
ç¹åããïŒäžè¬çãªãã©ãŒã«ããã¯ã§ã¯ãªãïŒã¡ãœãããå°å
¥ããŸã/éæ°å€ã¹ã«ã©ãŒåã®å Žåã¯transpose
ïŒäŸïŒ adjoint(s::AbstractString) = s
ïŒã å©ç¹ïŒ2ã€ã®æäœã æ£ããæ°åŠçã»ãã³ãã£ã¯ã¹ã æ¬ ç¹ïŒéæ°å€åã«ã¯adjoint
/ transpose
æççãªå®çŸ©ãå¿
èŠã§ããããžã§ããªãã¯ããã°ã©ãã³ã°ã劚ããããŸãã ãæ°åŠãã¿ã€ããžã®æ§é 転眮ã®é©çšãæå¹ã«ããŸããã
ææ¡ïŒ1ïŒããã³ïŒ2aïŒã¯ãïŒ2bïŒããã³ïŒ2cïŒãããå€§å¹ ã«å¹ åºãæ¯æãåŸãŸããã
詳现ã«ã€ããŠã¯ãïŒ19344ãïŒ21037ãïŒ13171ãããã³slack /ïŒlinalgãåç §ããŠãã ããã ãã¹ãïŒ
çŽ æµãªèšäºãããããšãïŒ
ãªãã·ã§ã³1ã«é©ããå¥ã®å¯èœæ§ãããŒãã«ã«çœ®ããããšæããŸããæ°åŠè¡åãšè¡šåœ¢åŒããŒã¿çšã«ç°ãªãã³ã³ãããŒã¿ã€ããçšæããŸãã ãã®åŸã®æå³A'
ã®çš®é¡ã«ãã£ãŠæ±ºå®ãããå¯èœæ§ãA
ïŒæ³šïŒäžè¿°ã®ããã«ã§ã¯ãªãããã®èŠçŽ åïŒã ããã§ã®çæã¯ãããã«ã¯2ã€ã®éã«å€ãã®convert
ãå¿
èŠã«ãªãå¯èœæ§ãããïŒãããªãã§ããããïŒïŒããã¡ãããéåžžã«æ··ä¹±ãæãå¯èœæ§ããããšããããšã§ãã 確ãã«ãç§ã¯å©çããã®æ··ä¹±ãæ£åœåãããã©ããã«ã€ããŠæççã§ãããããã§ãããã«ã€ããŠèšåããããšæããŸããã
ãããã§ãçŽ æŽãããèšäºã ïŒ1ïŒã«æ祚ããŸãã
çŽ æŽãããèšäºã ïŒ1ïŒã®å Žåãã¹ãã«ã¯æ¬¡ã®ããã«ãªãããšã«æ³šæããŠãã ããã
a'
ïŒååž°çãæ æ°ãªïŒconj(a')
ïŒååž°çãæ æ°ãªïŒa.'
ïŒéååž°çãç±å¿ïŒãããã£ãŠãå¿
ãããæ°ããæŒç®åãå°å
¥ããå¿
èŠã¯ãããŸãããæ°åŠçãªè»¢çœ®ã¯ãé䌎ãšå
±åœ¹ã®ïŒæ æ°ã§å¹ççãªïŒæ§æã«ãããŸããã æ倧ã®åé¡ã¯ã2ã€ã®é¡äŒŒããæŒç®åãã€ãŸãæ¥å°ŸèŸ'
ãš.'
ãæå³çã«ãŸã£ããç°ãªããã®ã«ãªãããšã§ãã ãã ããæãæ£ãããžã§ããªãã¯ã³ãŒãã§ã¯ã誰ãã'
ãŸãã¯.'
ã䜿çšãããã©ããã¯ãããã®ããšã®é䌎äœçšçŽ ãããããŸãã¯ãã¹ã¯ããããæå³ãããã©ããã®99ïŒ
æ£ç¢ºãªææšã§ãããšæããŸãããã®ããšã®å¯žæ³ãã ããã«ã誰ãã'
ãå®éã«ããã®ããšã®æ¬¡å
ã亀æãããããšãæå³ããå Žåããã®ã³ãŒãã¯ãã¹ã«ã©ãŒé䌎ãèªæã§ãªãèŠçŽ ïŒè€çŽ æ°ãªã©ïŒãæã€è¡åã«å¯ŸããŠãã§ã«æ£ãããããŸããã 誰ããå®éã«ãããã®é䌎ã®å
±åœ¹ãç§ã«äžããŠãã ããããæå³ããæ®ãã®ããã€ãã®ã±ãŒã¹ã§ã¯ãå®éã«ã¯äººã
ãå®éã«a.'
ã䜿çšããã®ã§ã conj(a')
ãæžããšãã®æå³ãã¯ããã«æ確ã«ãªããšäž»åŒµããŸãã a
ã®å¯žæ³ãå
¥ãæ¿ããããšããæå³ã§ãã
ããã«å¿ èŠãªãã¹ãŠã®åºç€ãšãªããžã§ããªãã¯åã解æããããšã¯@ andyferrisãš@andreasnoackã¯ãã§ã«ãã®åé¡ã«ã€ããŠããã€ãã®èããæã£ãŠãããå¯èœã§ããããã«æãããŸãã
ãã®è°è«ã¯ä»ã®å Žæã§è¡ãããã®ã§ãç§ãæŽæ°ããå¿
èŠããããšæããŸããã ãã®ææ¡ã«ã€ããŠãç§ãå®å
šã«èŠéããŠããïŒæãããªïŒïŒãââãšã1ã€ãã£ãããšãèªããŸããããã¯ãç·åœ¢ä»£æ°ã«.'
ãåŒãç¶ã䜿çšãããšæ³å®ããããšã§ãããããã§ã¯ãªãããšãèªèããŠããå¿
èŠããããŸãã ïŒ
ããšãã°ã vector.'
ã¯RowVector
ã§ããå¿
èŠã¯ãªããªããŸãïŒ RowVector
ã¯ç·åœ¢ä»£æ°ã®æŠå¿µã§ããããããå察ããã¯ãã«ã§ã®æåã®è©Šã¿ã§ãïŒã Matrix
ãŸãã ç·åœ¢ä»£æ°ã§ãéå
±åœ¹è»¢çœ®ããå¿
èŠãªå Žåãå®éã«è¡ã£ãŠããã®ã¯conj(adjoint(a))
ã䜿çšããããšã§ããããã䜿çšãããã¹ãŠã®ç·åœ¢ä»£æ°ãŠãŒã¶ãŒã«äœ¿çšããããšããå§ãããŸãïŒãããŸã§ã¯ãã ã䜿çšããMATLAB以æ¥ãé·å¹Žã®ãæªããç¿æ
£ã ã£ãa.'
ã§ã¯ãªãa'
ç§ã¯æ¬åœã®ããšãç¥ã£ãŠããä»»æã®è¡åïŒãŸãã¯ãã¯ãã«ïŒã転眮ã®ãããç§ãæ¬åœã«æããšãã ã£ãadjoint
ïŒãŸãã¯ãã¥ã¢ã«ïŒ-ååã®å€æŽã¯ããã§å€§ããªå©ãã«ãªããŸãïŒã
ãŸããããã«ããèå³æ·±ã空éãéãããããšãç°¡åã«ææããŠãããŸãã 以åã¯ã vector'
ãšvector.'
ã¯ããããŒã¿è»¢çœ®ããå®è¡ãããã¥ã¢ã«ãã¯ãã«ã®ãããªãã®ãååŸãããšããäºéã®ããŒãºãæºããå¿
èŠããããŸããã .'
ã¯é
åãµã€ãºãæäœããããã®ãã®ã§ããã '
ã¯ç·åœ¢ä»£æ°ã®æŠå¿µã§ããããã RowVector
ã1D DualVector
ãªã©ã«å€æŽã§ããå¯èœæ§ããããŸããå®å
šã«ã ïŒãããããããã§ããã«ã€ããŠè°è«ããã¹ãã§ã¯ãããŸãã-誰ããããã«é£æ¬²ãæã£ãŠãããªããå¥ã®åé¡ãäœããŸããããïŒ
æåŸã«ãææ¡ãããã¢ã¯ã·ã§ã³ãã©ã³ãSlackããã³ããŒããŸãã
1ïŒ transpose
ãLinAlg
ããBase
ã«ç§»åãã RowVector
äœæãããªããªã£ãããååž°çã§ãªããªã£ããããããšã«ã€ããŠã®èŠåïŒ0.7ã®ã¿ïŒãè¿œå ããŸãïŒå¯èœãªå ŽåïŒ
2ïŒã©ãã§ãctranspose
ååãadjoint
ãŸã
3ïŒ Vector
ã ConjVector
ã RowVector
ã'
ãšconj
ãš*
çµã¿åããã§æ©èœããããšã確èªããŸãã RowVector
ååãå€æŽããŸãã ïŒããã§ãconj(vector)
æ æ°ã«ããŸãïŒã
4ïŒ conj
ããã³ConjMatrix
ãšãããŸãçžäºäœçšããæ æ°ãªè¡åé䌎äœçšçŽ ãå°å
¥ãã
5ïŒ A_mul_Bc
ãªã©ãåé€ããŸãã A_mul_B!
ååãmul!
ïŒãŸãã¯*!
ïŒã«å€æŽããŸãã
6ïŒå©ç
@stevengjã¯æžããïŒ
@andyferris ãã¹ã«ã©ãŒã®é䌎ããã³å察ã¯å®å šã«æ確ã«å®çŸ©ãããŠããã
ctranspose(x::Number) = conj(x)
ã¯æ£ããã§ãã
èšé²ã®ããã«ãç§ã¯ééããªãããã«åæããŸãã
ç§ã®æãã§ã¯ã転眮ã®ã»ãšãã©ã®äœ¿çšæ³ã¯ãéæ°åŠçãã§ãããctransposeïŒ...ïŒã®ã»ãšãã©ã®äœ¿çšæ³ã¯æ°åŠçã§ã
ãããã£ãŠãã¢ã€ãã¢ã¯ããã圢åŒåããããšã§ãã transpose
ãã¹ãŠã®äœ¿çšã¯ãéæ°åŠãã«ãªãã adjoint
ã®å¯äžã®äœ¿çšã¯ãæ°åŠãã«ãªããŸãã
ããšãã°ã
vector.'
ã¯RowVector
ã§ããå¿ èŠã¯ãªããªããŸãïŒRowVector
ã¯ç·åœ¢ä»£æ°ã®æŠå¿µã§ããããããå察ããã¯ãã«ã§ã®æåã®è©Šã¿ã§ãïŒãMatrix
ãŸãã
ãã ãã .'
ãæ æ°ã«ãããã®ã§ãã ããšãã°ã X .= f.(x, y.')
ã¯ãŸã å²ãåœãŠãããŠããªãã¯ãã§ãã
ããã«è³ªåããããŸãïŒ issymmetric(::AbstractMatrix{<:AbstractMatrix})
ãã©ã®ããã«å®è£
ããå¿
èŠããããŸããïŒ transpose
ãšäžèŽããã®ã¯ãéååž°çãªãã§ãã¯ã§ããããïŒ ç§ã¯å®è£
ãèŠãŠããŸãã èŠçŽ ãtranspose
ã§ããããšãåæãšããŠããŸãã OTOH issymmetric(::Matrix{String})
ãã©ããã確èªããããšã¯éåžžã«æå¹ãªããã§ã...
Symmetric
btwã§ã©ãããããŠããå ŽåãçŸåšã¯ååž°çã§ã¯ãããŸãã
julia> A = [rand(2, 2) for i in 1:2, j in 1:2]; A[1, 2] = A[2, 1]; As = Symmetric(A);
julia> issymmetric(A)
false
julia> issymmetric(As)
true
julia> A == As
true
ã¯ããç§ã¯ãã®ããã®PRã®äœæã«åãçµãã§ããããã®çš®ã®ççŸããããããããŸãã ïŒé
åã³ãŒãã§transpose
ã adjoint
ã conj
ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ãæ€çŽ¢ããŠãããšãã«ãå°ãåã«ãã®åé¡ã«ééããŸããïŒã
ç¹ã«æ瀺ããªãéãã issymmetric(a) == (a == a.')
ããã³ishermitian(a) == (a == a')
ãããªåäœãå®è£
ããŸãã ãããã¯ããèªäœããªãçŽæçã«èŠããAFAICTã®æ¢åã®issymmetric
䜿çšæ³ã¯ã Number
èŠçŽ ã¿ã€ãçšã§ãïŒãŸãã¯ããã¹ããããé
åã«ã¯ããŸãæå³ããªããªãä»ã®ééã/ä»®å®ãé »ç¹ã«ãããŸãïŒ ã
ïŒä»£æ¿ã®å®è£
ã¯issymmetric(a) == (a == conj(adjoint(a)))
ã§ã...ãããããã§ã¯ãªãããããŒã¿ãé
åïŒ String
ãªã©ïŒã§ã¯æ©èœããŸãããã Number
é
åã§ã¯äžèŽããŸã
ç¹ã«æ瀺ããªãéãã
issymmetric(a) == (a == a.')
ããã³ishermitian(a) == (a == a')
ãããªåäœãå®è£ ããŸã
ç§ã«ãšã£ãŠæ£ãã解決çã®ããã§ãã
æŽæ°ïŒæ°ãå€ãã£ãã 察称ã¯ããããäž»ã«ç·åœ¢ä»£æ°çšã§ã
ã»ãã®å°ããªææ¡ã§ãã2ã€ã®ãã¯ãã«ïŒ dotu
ïŒã®ç©ã«å¯ŸããŠåèšãè¡ããšäŸ¿å©ãªããšããããããã¹ã«ã©ãŒãè¿ãx.ây
ã¯ãããè¡ãããã®äŸ¿å©ãªæ¹æ³ã§ãã ã ããç§ã¯transpose(::Vector)
ããMatrix
ãè¿ããªãããšã«è³æã§ã
ã¯ãã RowVector
ãªãã®ã§ãã¹ã«ã©ãŒãååŸããå¿
èŠããããŸãã ïŒè»¢çœ®ã¯ååž°çã§ã¯ãªãããšã«æ³šæããŠãã ããïŒã
ããããæ¥ç·ã®ã³ã¡ã³ãã§ç³ãèš³ãããŸãããããã®ã¹ã¬ããã®å€ãã®äººã ã¯ããã¯ãã«ç©ºéã®ã¹ã«ã©ãŒã®ãªã³ã°ãã«ã€ããŠè©±ãç¶ããŠããŸãã å®çŸ©äžããã¯ãã«ç©ºéã®ã¹ã«ã©ãŒã¯ããªã³ã°ã ãã§ãªãããã£ãŒã«ãã圢æããå¿ èŠããããŸãã ãã¯ãã«ç©ºéã«éåžžã«äŒŒãŠããããã¹ã«ã©ãŒããã£ãŒã«ãã§ã¯ãªããªã³ã°ã圢æããã ãã®ä»£æ°çæ§é ã¯ãã¢ãžã¥ãŒã«ããšåŒã°ããŸãããã¢ãžã¥ãŒã«ã¯å°ãé£è§£ãããŠBase ... erã§åŠçã§ããªããšæããŸãã ..ã¢ãžã¥ãŒã«ã
æŽæ°é
åããµããŒãããŠããããããã¯ãã«ç©ºéã ãã§ãªãã¢ãžã¥ãŒã«ãå¹æçã«ãµããŒãããŠããŸãã ãã¡ãããæŽæ°é
åãæµ®åå°æ°ç¹é
åã«åã蟌ãŸãããã®ãšããŠåäœçã«è¡šç€ºããããšãã§ããããããããã¯ãã¯ãã«ç©ºéã®éšåçãªè¡šçŸã§ãã ãã ããã¢ãžã¥ã©ãŒæŽæ°ã®é
åãäœæããããšãã§ããŸãïŒããšãã°ïŒãéçŽ æ°ä¿æ°ã䜿çšãããšãã©ã®ãã£ãŒã«ãã«ãèªç¶ã«åã蟌ãŸããŠããªããªã³ã°ãæäœã§ããŸãã èŠããã«ãç§ãã¡ã¯å®éã«ã¯ãã¯ãã«ç©ºéã ãã§ãªãäžè¬çãªã¢ãžã¥ãŒã«ãæ€èšãããã®ã§ãããç§ãã¡ã®ç®çã«ã¯å€§ããªéãã¯ãªããšæããŸãïŒäžè¬çã«ã¯+
ãš*
ã«ã€ããŠã®ã¿è©±ããŸãïŒ
ã¯ãããžã¥ãªã¢ã¯ç¢ºãã«ãäžè¬çãªã¢ãžã¥ãŒã«ãšçã®ãã¯ãã«ç©ºéã§ã®ä»£æ°æŒç®ããµããŒãããŠããŸãïŒãããŠãµããŒãããå¿
èŠããããŸãïŒã ããããç§ãç解ããŠããããã«ãã³ãã¥ããã£ã®äžè¬çãªå²åŠã¯ã Base
é¢æ°ã¯ãããéåžžã®ãäžè¬çãªç·åœ¢ä»£æ°ã«ãŒãã³ãã念é ã«çœ®ããŠèšèšããå¿
èŠããããšãããã®ã§ããããšãã°ãæŽæ°è¡åã®æ£ç¢ºãªç·åœ¢ä»£æ°èšç®ã§ã¯ã Base
å±ããŠããªãã®ã§ãåºæ¬çãªèšèšäžã®æ±ºå®ãè¡ããšãã¯ãã¹ã«ã©ãŒããã£ãŒã«ãã圢æãããšæ³å®ããå¿
èŠããããŸãã ïŒããªããèšã£ãããã«ãå®éã«ã¯ãããã¯å®éã«ã¯éèŠã§ã¯ãããŸãããïŒ
ã¯ãã¹ãã¹ãhttps://github.com/JuliaLang/julia/pull/23424#issuecomment-346678279
ãã®ãã«ãªã¯ãšã¹ããè¡šãïŒ5332ãšïŒ20978ãåé²ãããåªåã«æè¬ããé¢é£ããèšç»ã®ã»ãšãã©ã«åå ããŠããŸãã ãŸãããã®ãã«ãªã¯ãšã¹ããé²ããçšèªã®éžæãšããŠã³ã¹ããªãŒã ãžã®åœ±é¿ã«ã€ããŠãåå ããããšæããŸãããã®ããããããã®éžæã«ãã£ãŠå©çšå¯èœãªæè¯ã®ãã¬ãŒããªããåŸãããããšãå®æçã«ç¢ºä¿¡ããŠãã ããã
ãã®ç«å Žãèªåã«çŽåŸãããããšãããã³ã«ãç§ã¯åãäžé£ã®äžå®ã«åº§ç€ããŸãã ãããã®äžå®ã®1ã€ã¯ããã®éžæã
LinAlg
匷ãå®è£ ã®è€éãã§ãã転眮ãšé åå転ãå§çž®ãããšãLinAlg
ãäž¡æ¹ãåŠçããããã«ãªããLinAlg
ãã¯ããã«å€§ããªã»ããããµããŒãããå¿ èŠããããŸããäžè¬çãªæäœã§ã®åã®çµã¿åããã説æã®ããã«ã
mul(A, B)
èããŠã¿ãŸããããããã§ãA
ãšB
ã¯ã裞ãé䌎ã©ããã転眮ã©ããããŸãã¯é åããªããã©ãããããMatrix
ã§ãã 転眮ãšé åå転ãæ··åããªãéããA
ã¯ãMatrix
ãé䌎ã§ã©ãããããMatrix
ããŸãã¯è»¢çœ®ã§ã©ãããããMatrix
ïŒããã³åæ§ã«B
ïŒã ãããã£ãŠãmul(A, B)
ã¯9ã€ã®ã¿ã€ãã®çµã¿åããããµããŒãããå¿ èŠããããŸãã ãããã転眮ãšé åããªãããæ··åãããšãA
ã¯ãMatrix
ãé䌎ã©ãããããMatrix
ã転眮ã©ãããããMatrix
ããŸãã¯é åã«ãªãå¯èœæ§ããããŸã-ããªããã©ãããããMatrix
ïŒããã³åæ§ã«B
ïŒã ãããã£ãŠãmul(A, B)
ã¯16çš®é¡ã®çµã¿åããããµããŒãããå¿ èŠããããŸãããã®åé¡ã¯ãåŒæ°ã®æ°ãšãšãã«ææ°é¢æ°çã«æªåããŸãã ããšãã°ãã³ã³ãã£ã¬ãŒã·ã§ã³ããªãå Žåã
mul!(C, A, B)
ã¯27ã®ã¿ã€ãã®çµã¿åããããµããŒãããå¿ èŠããããŸãããã³ã³ãã£ã¬ãŒã·ã§ã³ãããå Žåãmul!(C, A, B)
ã¯64ã®ã¿ã€ãã®çµã¿åããããµããŒãããå¿ èŠããããŸãã ãããŠãã¡ãããVector
ãšéMatrix
è¡å/æŒç®åã¿ã€ããããã¯ã¹ã«è¿œå ãããšãäºæ ã¯ããã«è€éã«ãªããŸãããã®å¯äœçšã¯ããã®å€æŽãé²ããåã«æ€èšãã䟡å€ãããããã§ãã ãã¹ãïŒ
ãã®æçš¿ã§ã¯ãgithubãslackãtriageã«é¢ããæè¿ã®è°è«ãçµ±å/ã¬ãã¥ãŒããä»åŸã®å¯èœæ§ã®ãããã¹ãåæããŸãã ïŒhttps://github.com/JuliaLang/julia/issues/20978#issuecomment-315902532ã®ç²Ÿç¥çãªåŸç¶è ã¯ã1.0ã«å°éããæ¹æ³ã«ã€ããŠèããããšããçãŸããŸãããïŒ
3ã€ã®æå³çã«ç°ãªãæäœãåé¡ã«ãªã£ãŠããŸãïŒ
é䌎äœçšçŽ ã¯adjoint
/ '
ãšåŒã°ããŸãïŒãã ãã '
é€ããŠç±å¿ã§ã-ç¹å¥ã«A[c|t]_(mul|rdiv|ldiv)_B[c|t][!]
åŒã³åºãã«äžããããåŒãå«ã¿ãäžéã®ç±å¿ãªé䌎äœçšçŽ /転眮ãåé¿ããŸãïŒ ã
転眮ã¯transpose
/ .'
ãšåŒã°ããŸãïŒ adjoint
ãšåã泚æãå¿
èŠã§ãïŒã
é
åããªããã¯ã2次å
ã®C
ã¯permutedims(C, (2, 1))
ãšåŒã°ãã1次å
ã®C
reshape(C, 1, length(C))
ãšåŒã°ããŸãã
A[c|t]_(mul|rdiv|ldiv)_B[c|t]
ãžã®ç¹å¥ãªå€äžããšãããã«é¢é£ããã¡ãœããåã®çµã¿åããã³ã¬ã¯ã·ã§ã³ã¯ã1.0ãŸã§ã«æ¶ããã¯ãã§ãã ãã®ç¹å¥ãªäžé/é¢é£ããã¡ãœããåãåé€ããã«ã¯ãæ æ°ãªé䌎ãšè»¢çœ®ãå¿
èŠã§ããctranspose
ïŒãšè»¢çœ®ã¯ã以åã¯transpose(x::Any) = x
ã ctranspose(x::Any) = conj(x)
ã conj(x::Any) = x
ãªã©ã®äžè¬çãªno-opãã©ãŒã«ããã¯ãä»ããŠé
åããªãããšæ··åãããŠããŸããã ãããã®ãã©ãŒã«ããã¯ã«ãããäžéšã®ãŠãŒã¶ãŒå®çŸ©ã®æ°å€ã¿ã€ãã§[c]transpose
ãå«ãæäœã¯ããããã®ã¿ã€ãã®[c]transpose
ç¹æ®åããªããšããµã€ã¬ã³ãã«å€±æããŸãïŒèª€ã£ãçµæãè¿ããŸãïŒã ééã£ãçµæãé»ã£ãŠè¿ãã®ã¯æªããã¥ãŒã¹ãªã®ã§ããããã®ãã©ãŒã«ããã¯ã¯åé€ãããŸããïŒïŒ17075ïŒã ããå€ãã®ãµã€ã¬ã³ãé害ãå°å
¥ããªãããšã¯çŽ æŽãããããšã§ãã.'
æ§æãåé€ãããšããã§ãããã ãã®å€æŽãæå¹ã«ããã«ã¯ãäžèšã®ç¹å¥ãªäžéãåé€ããå¿
èŠããããŸããç¹å¥ãªäžéããã³é¢é£ããã¡ãœããåãåé€ãããµã€ã¬ã³ããšã©ãŒã®çºçãåé¿ãã転眮ããã³é
åããªããã«çŽæçã§äŸ¿å©ãªåªæãæäŸãã .'
ãåé€ããŸãã æå°éã®è¿œå ã®è€éããšç Žæã§åè¿°ã®ããšãéæããŸãã
ãã®åéã¯ã2ã€ã®èšèšææ¡ã«çµã蟌ãŸããŠããŸãã
é䌎äœçšçŽ adjoint
åŒã³åºãã conjadjoint
ïŒãé䌎äœçšçŽ ãïŒã転眮ãã transpose
ãé
åå転ããŸãã adjoint
ãšconjadjoint
ã¯LinAlg
ã«äœãã§ããã transpose
ã¯Base
äœãã§ããŸãã
é䌎adjoint
åŒã³åºãã transpose
転眮ãã flip
ãé
åå転ããŸãã adjoint
ãštranspose
ã¯LinAlg
ã«äœãã§ããã flip
ã¯Base
äœãã§ããŸãã
äžèŠãããšããããã®ææ¡ã¯è¡šé¢çã«ããç°ãªã£ãŠããªãããã«èŠããŸãã ããããããã«èª¿æ»ãããšãå®éçãªéããæããã«ãªããŸãã ãããã®åœåã¹ããŒã ã®çžå¯Ÿçãªè¡šé¢çãªã¡ãªããã«ã€ããŠã®è°è«ãé¿ããŠããããã®æ·±ãå®éçãªéããèŠãŠã¿ãŸãããã
è€éïŒ
ææ¡1ã¯ãarray-flip transpose
åŒã³åºãããšã«ããã転眮ãšé䌎ã«å ããŠã LinAlg
ã«array-flipã®åŠçã匷å¶ããŸãã ãããã£ãŠã LinAlg
ã¯ãäžè¬çãªæäœã§ãµããŒããããåã®çµã¿åããã®ã»ããã倧å¹
ã«æ¡åŒµããå¿
èŠããããŸãã https://github.com/JuliaLang/julia/pull/23424#issuecomment -346678279ã¯ãäŸãšããŠãã®è¿œå ã®è€éãã瀺ããŠããŸãã以äžã®èª¬æã§ã¯ãè¿œå ã®è€éãã®ååšãæé»çã«ç¢ºèªããŠããŸãã
ææ¡2ãå¿
èŠã§ãLinAlg
å¯äžã®è»¢çœ®ãµããŒãããã³é䌎ã LinAlg
ä»ãããŸãããã
ç ŽæïŒ
ææ¡1ã¯ãæ¢åã®æäœã®åºæ¬çãªã»ãã³ãã£ã¯ã¹ãå€æŽããŸãã transpose
ã¯è»¢çœ®ã§ã¯ãªãé
åããªããã«ãªããããã«å¿ããŠãã¹ãŠã®transpose
é¢é£ã®æ©èœãå€æŽããå¿
èŠããããŸãã ïŒããšãã°ã transpose
ãšããååã«é¢é£ä»ããããLinAlg
ãã¹ãŠã®ä¹ç®ããã³å·Š/å³é€ç®æŒç®ã§ã¯ãã»ãã³ãã£ãã¯ã®ä¿®æ£ãå¿
èŠã«ãªããŸããïŒãã®å€æŽã®å®çŸæ¹æ³ã«ãã£ãŠã¯ããã®å€æŽã«ãããµã€ã¬ã³ãç ŽæãçºçããŸããçŸåšã®ã»ãã³ãã£ã¯ã¹ãäŸåããŠããå Žåã¯ãã€ã§ãïŒæå³çãŸãã¯äžæ³šæã«ïŒã
ææ¡2ã¯ãæ¢åã®ãã¹ãŠã®æäœã®åºæ¬çãªã»ãã³ãã£ã¯ã¹ãä¿æããŠããŸãã
ã«ãããªã³ã°ïŒ
ææ¡1ã¯ãç·åœ¢ä»£æ°ã®æŠå¿µïŒè»¢çœ®ïŒãBase
ã«ãæœè±¡é
åã®æŠå¿µïŒarray-flipïŒãLinAlg
ã«æã¡èŸŒã¿ã Base
ãšLinAlg
匷åã«çµåããŸãã
ææ¡2ã¯ãæœè±¡çãªé
åãšç·åœ¢ä»£æ°ãæ確ã«åé¢ããåè
ã¯ããŒã¹ã®ã¿ã«ãåŸè
ã¯LinAlg
ã®ã¿ã«ååšããæ°ããçµåã¯ãããŸããã
ãµã€ã¬ã³ãvs.ã©ãŠãé害ïŒ
ææ¡1ã¯ã転眮ã»ãã³ãã£ã¯ã¹ãæåŸ
ããŠtranspose
ãåŒã³åºããšããµã€ã¬ã³ãã«èª€ã£ãçµæã«ãªããŸãïŒãã ãã代ããã«é
åããªããã»ãã³ãã£ã¯ã¹ãååŸããŸãïŒã
ææ¡2ã®ã¢ããã°ã¯ãé
åããªããã»ãã³ãã£ã¯ã¹ãæåŸ
ããéæ°å€é
åã§transpose
ãåŒã³åºããŠããŸãã ãã®å Žåã transpose
ã¯ãšã©ãŒãã¹ããŒããŠããŠãŒã¶ãŒã«flip
瀺ãã®ã«åœ¹ç«ã¡ãŸãã
.'
ïŒ .'
éæšå¥šã«ããªãããã®äž»ãªåŒæ°ã¯ã transpose
ã®é·ãã§ãã ææ¡1ã¯ã .'
ãtranspose
ããã³conjadjoint
ãšããååã«çœ®ãæããŸããããã®ç¶æ³ã¯æ¹åãããŸããã 察ç
§çã«ãææ¡2ã¯flip
ãštranspose
ãšããååãæäŸãããã®ç¶æ³ãæ¹åããŸãã
åææ¡ã®äžã§1.0ã«å°éããã«ã¯äœãå¿ èŠã§ããïŒ 1.0ãžã®ãã¹ã¯ãææ¡2ã®æ¹ãç°¡åãªã®ã§ãããããå§ããŸãããã
LinAlg
ã«æ æ°ãªé䌎ããã³è»¢çœ®ã©ãããŒã¿ã€ããå°å
¥ããŸããããšãã°ã Adjoint
ãšTranspose
ã§ãã mul[!]
/ ldiv[!]
/ rdiv[!]
ã¡ãœãããå°å
¥ãããããã®ã©ãããŒã¿ã€ãã«ãã£ã¹ããããã察å¿ããA[c|t]_{mul|ldiv|rdiv}_B[c|t][!]
ã¡ãœããã®ã³ãŒããå«ããŸãã åè
ã®ã¡ãœããã®çãåãšããŠåŸè
ã®ã¡ãœãããåå®è£
ããŸãã
ãã®æé ã¯äœãäžæããã .'
ã®ç¹å¥ãªåŒãäžãã®åé€ãšéæšå¥šã®äž¡æ¹ãå³åº§ã«æå¹ã«ããŸãã
A[c|t]_{mul|ldiv|rdiv}_B[c|t]
ãçæããç¹å¥ãªäžããåé€ããŸãã代ããã«ãåã«'
/ .'
ãAdjoint
/ Transpose
äžããŸãã 以åã¯ç¹å¥ã«äžããããåŒã§A[c|t]_{mul|ldiv|rdiv}_B[c|t]
åŒã³åºããçºçãã代ããã«åçã®mul
/ ldiv
/ rdiv
åŒã³åºãã«ãªããŸãã A[c|t]_{mul|ldiv|rdiv}_B[c|t][!]
ã察å¿ããmul[!]
/ ldiv[!]
/ rdiv[!]
ã¡ãœããã«éæšå¥šã«ããŸãã .'
æšå¥šã«ããŸãã
ãããã®æé ã¯0.7ã§å®è¡ã§ããŸãã ãããã¯2ã€ã®ããšã ããå£ããŸãïŒïŒ1ïŒéBase
/ LinAlg
ã¿ã€ãã®A[c|t]_{mul|ldiv|rdiv}_B[c|t]
ã¡ãœããããããããããã«ç¹å¥ãªäžãã«äŸåããã³ãŒãã¯å£ããŸãã ãã®ãããªã³ãŒãã¯ãæ瀺çãªMethodError
ãçºè¡ããæ°ããäœäžãäœãããããã/å£ããã³ãŒããäœã«ç§»è¡ããå¿
èŠããããã瀺ããŸãã ïŒ2ïŒåé¢ããã'
s / .'
äŸåããã³ãŒãã¯ãå³å¯ã«ç±å¿ã«åäœãããšå£ããŸãã äžè¬çãªé害ã¢ãŒããæ瀺çãªMethodError
å¿
èŠããããŸãã è³ãæã§ãç Žæã¯å¶éãããéšã
ããã§ãã
1.0ã«å³å¯ã«å¿ èŠãªå€æŽã«ã€ããŠã¯ä»¥äžã§ãã
ãã®æç¹ã§ã Adjoint(A)
/ Transpose(A)
ã¯æ æ°ãªé䌎äœçšçŽ ãšè»¢çœ®ãçæãã adjoint(A)
/ transpose(A)
ã¯ç±å¿ãªé䌎äœçšçŽ ãšè»¢çœ®ãçæããŸãã åŸè
ã®ååã¯ç¡æéã«æ®ãããå¿
èŠã«å¿ããŠã0.7ã®ä»ã®ã¹ãã«ãããšãã°eagereval(Adjoint(A))
/ eagereval(Transpose(A))
ã¢ãžã¥ãã¹ãã«ã®eagereval
ãŸãã¯eageradjoint(A)
å»æ¢ãããå¯èœæ§ããããŸãã eagertranspose(A)
ã éæšå¥šã®å Žåã adjoint
/ transpose
ã¯1.0ã§åå©çšã§ããŸãïŒãã ãã Adjoint(A)
/ Transpose(A)
ããããŸããããããªããã©ããã¯ããããŸãããå¿
èŠïŒã
æçµçã«...
Base
flip
ããã³/ãŸãã¯Flip
ãå°å
¥ããŸãã æ©èœã®è¿œå ã§ããããããã®å€æŽã¯å¿
èŠã«å¿ããŠ1.xã§çºçããå¯èœæ§ããããŸãã
ææ¡1ã¯ã©ãã§ããïŒ ä»¥äžã«ã2ã€ã®å¯èœãªãã¹ã®æŠèŠã瀺ããŸãã æåã®ãã¹ã¯0.7ã®å€æŽãçµ±åããŸããããµã€ã¬ã³ããã¬ãŒã¯ã䌎ããŸãã 2çªç®ã®ãã¹ã¯ããµã€ã¬ã³ããã¬ãŒã¯ãåé¿ããŸããã0.7-> 1.0ã®å€æŽãå€ãå«ãŸããŸãã ã©ã¡ãã®ã¢ãŠãã©ã€ã³ããã³ãŒãããŒã¹ãç¶ç¶çã«é²åãããŠããŸãã ç¶ç¶æ§ã®äœãåçç©ã¯ãäžéšã®äœæ¥/ãã£ãŒã³ãçµ±å/åé¿ããå¯èœæ§ããããŸãããããå°é£ã§ãšã©ãŒãçºçããããå¯èœæ§ããããŸãã é²è¡äžã®äœæ¥ã¯ãæåã®ãã¹ããã©ã£ãŠããããã§ãã
transpose
ã®ã»ãã³ãã£ã¯ã¹ã転眮ããé
åããªããã«å€æŽããå¿
ç¶çã«ãã¹ãŠã®transpose
é¢é£æ©èœã®ã»ãã³ãã£ã¯ã¹ãå€æŽããŸãã ããšãã°ã At_...
å§ãŸããŸãã¯..._Bt[!]
çµãããã¹ãŠã®A[c|t]_{mul|ldiv|rdiv}_B[c|t][!]
ã¡ãœããã¯ãã»ãã³ãã£ãã¯ãªããžã§ã³ãå¿
èŠã«ãªãå¯èœæ§ããããŸãã ãŸããããšãã°Symmetric
/ issymmetric
ã®å®çŸ©ãšåäœãå€æŽããå¿
èŠããããŸãã transpose
èªäœãBase
ãŸãã
ãããã®å€æŽã¯ãéãã«ãããŠåºãå£ããã§ãããã
LinAlg
conjadjoint
ãå°å
¥ããŸãã ãã®ã¹ãããã§ã¯ãåã®ã¹ãããã§è§Šãããã¹ãŠã®ã¡ãœããã埩å
ããå¿
èŠããããŸãããå
ã®ã»ãã³ãã£ãã¯åœ¢åŒã§ã conjadjoint
é¢é£ä»ããããç°ãªãååïŒããšãã°ã Aca_...
ãš..._Bca[!]
ååïŒã䜿çšããŸãã ã ãŸããé
åããªããïŒçŸåšã¯transpose
ïŒã転眮ïŒçŸåšã¯conjadjoint
ïŒãããã³LinAlg
é䌎ãåæã«ãµããŒãããè¿œå ã®åã®çµã¿åããã®ã¡ãœãããè¿œå ããå¿
èŠããããŸãïŒããšãã°ã ca
A[c|t|ca]_{mul|ldiv|rdiv}_B[c|t|ca][!]
äžã®ca
ããªã¢ã³ãïŒã
ïŒãšåŒã°æ æ°ãªé䌎ãã転眮ã玹ä»conjadjoint
ã§ïŒ LinAlg
èšãã Adjoint
ãšConjAdjoint
ã Base
ã«ã¬ã€ãžãŒé
åããªããïŒ transpose
ãšåŒã°ããïŒã©ãããŒã¿ã€ããå°å
¥ããŸãïŒäŸïŒ Transpose
ã mul[!]
/ ldiv[!]
/ rdiv[!]
ã¡ãœãããå°å
¥ãããããã®ã©ãããŒã¿ã€ãã«ãã£ã¹ããããã察å¿ããA[c|t|ca]_{mul|ldiv|rdiv}_B[c|t|ca][!]
ã¡ãœããã®ã³ãŒããå«ããŸãã åè
ã®ã¡ãœããã®çãåãšããŠåŸè
ã®ã¡ãœãããåå®è£
ããŸãã
A[c|t]_{mul|ldiv|rdiv}_B[c|t]
ãçæããç¹å¥ãªäžããåé€ããŸãã代ããã«ãåã«'
/ .'
ãAdjoint
/ Transpose
äžããŸãã 以åã¯ç¹å¥ã«äžããããåŒã§A[c|t]_{mul|ldiv|rdiv}_B[c|t]
åŒã³åºããçºçãã代ããã«åçã®mul
/ ldiv
/ rdiv
åŒã³åºãã«ãªããŸãïŒãã ããã»ãã³ãã£ã¯ã¹ã¯ãµã€ã¬ã³ãã«å€æŽãããããšãæãåºããŠãã ããïŒã A[c|t]_{mul|ldiv|rdiv}_B[c|t][!]
ã察å¿ããmul[!]
/ ldiv[!]
/ rdiv[!]
ã¡ãœããã«éæšå¥šã«ããŸãã åæ§ã«ãæè¿å°å
¥ãããAca_...
/ ...Bca[!]
ã¡ãœãããåé€ããŠã mul[!]
/ ldiv[!]
/ rdiv[!]
çžåœãããã®ãåªå
ããŸãã .'
æšå¥šã«ããŸãã
ãããã®å€æŽã¯0.7ã§è¡ãå¿ èŠããããŸãã æ¢åã®æäœã«å¯Ÿããã»ãã³ãã£ãã¯ã®å€æŽã¯ãåºç¯å²ã«ããããµã€ã¬ã³ããªç ŽæããããããŸãã ç¹å¥ãªäžéé€å»ã¯ãäžèšãšåãéã蟌ãããã倧ããªç ŽæããããããŸãã
ãã®æç¹ã§ã Adjoint(A)
/ Transpose(A)
/ ConjAdjoint(A)
ã¯ãããããæ æ°ãªé䌎ãé
åå転ã転眮ãããã³adjoint(A)
/ transpose(A)
/ conjadjoint(A)
ã¯ãããããç±å¿ãªé䌎ãé
åå転ã転眮ãçæããŸãã åŸè
ã®ååã¯ç¡æéã«æ®ãããå¿
èŠã«å¿ããŠã0.7ã§ãä»ã®ã¹ãã«ã«å»æ¢ãããå¯èœæ§ããããŸãïŒäžèšãåç
§ïŒã
ãã®ããã»ã¹ã®æ©ã段éã§ConjAdjoint
å°å
¥ããŠãäžéšã®äœæ¥/ãã£ãŒã³ãçµ±å/åé¿ããããšãã§ããŸããããã®ã¢ãããŒãã¯ããå°é£ã§ãšã©ãŒãçºçããããå¯èœæ§ããããŸãã
LinAlg
ç±å¿ãªconjadjoint
ãå°å
¥ããŸãã çŸåštranspose
é¢é£ä»ããããŠãããã¹ãŠã®æ©èœãšã¡ãœããïŒããšãã°ã t
ãå«ãA[c|t]_{mul|ldiv|rdiv}_B[c|t][!]
ã¡ãœãããå«ãïŒãconjadjoint
ãšæŽŸçåã«ç§»è¡ããŸãã ãã¹ãŠã®transpose
é¢é£ã®ååããæ°ããconjadjoint
çžåœãããã®ã®çãåã«ããŸãã ãã¹ãŠã®transpose
é¢é£ã®ååãconjadjoint
çžåœãããã®ã«éæšå¥šã«ããŸãã
LinAlg
ã«ã¬ã€ãžãŒé䌎ããã³è»¢çœ®ïŒ conjadjoint
ãšåŒã°ããïŒã©ãããŒã¿ã€ããå°å
¥ããŸããããšãã°ã Adjoint
ãšConjAdjoint
ã§ãã mul[!]
/ ldiv[!]
/ rdiv[!]
ã¡ãœãããå°å
¥ãããããã®ã©ãããŒã¿ã€ãã«ãã£ã¹ããããã察å¿ããA[c|ca]_{mul|ldiv|rdiv}_B[c|ca][!]
ã¡ãœããã®ã³ãŒããå«ããŸãã åè
ã®ã¡ãœããã®çãåãšããŠåŸè
ã®ã¡ãœãããåå®è£
ããŸãã
Transpose
ãšåŒã°ããæ æ°ãªé
åããªããã©ãããŒåãBase
ã«å°å
¥ããŸãïŒåæã«transpose
ã¯è»¢çœ®ã»ãã³ãã£ã¯ã¹ã§conjadjoint
éæšå¥šã«ãªããããããæ··ä¹±ããŸãïŒã array-flipïŒ Transpose
ïŒãæ©èœããããã«å¿
èŠãªãã¹ãŠã®äžè¬çãªã¡ãœãããBase
è¿œå ããŸãã 次ã«ãé
åå転ïŒçŸåšã¯Transpose
ã§ããã transpose
ã¯ãããŸããïŒã転眮ïŒçŸåšã¯conjadjoint
ïŒãåæã«ãµããŒããããã¹ãŠã®è¿œå ã®åã®çµã¿åããã«ã€ããŠã LinAlg
ã«ã¡ãœãããè¿œå ããŸããããã³ConjAdjoint
ïŒãããã³LinAlg
é䌎ã«ã¯ãïŒããšãã°ã A[c|t|ca]_{mul|ldiv|rdiv}_B[c|t|ca][!]
çžåœããmul[!]
/ rdiv[!]
/ ldiv[!]
ïŒãå¿
èŠã§ããçŸåšååšããªãïŒã
A[c|t]_{mul|ldiv|rdiv}_B[c|t]
ãçæããç¹å¥ãªäžããåé€ããŸãã代ããã«ãåã«'
/ .'
ãAdjoint
/ Transpose
äžããŸãã 以åã¯ç¹å¥ã«äžããããåŒã§A[c|t]_{mul|ldiv|rdiv}_B[c|t]
åŒã³åºããçºçãã代ããã«åçã®mul
/ ldiv
/ rdiv
åŒã³åºãã«ãªããŸãã A[c|t]_{mul|ldiv|rdiv}_B[c|t][!]
ã察å¿ããmul[!]
/ ldiv[!]
/ rdiv[!]
ã¡ãœããã«éæšå¥šã«ããŸãã .'
å»æ¢ããŸãã
äžèšã®å€æŽã¯0.7ã§è¡ãå¿ èŠããããŸãã ãµã€ã¬ã³ãç Žæã¯ãªããäžèšã®ç¹å¥ãªäžéé€å»ã«ãã倧ããªç Žæã®ã¿ã§ãã
ãã®æç¹ã§ã Adjoint(A)
/ Transpose(A)
/ ConjAdjoint(A)
ã¯ãããããæ æ°ãªé䌎ãé
åå転ã転眮ãçæããŸãã adjoint(A)
/ conjadjoint(A)
ã¯ãããããç±å¿ãªé䌎äœçšçŽ ãšè»¢çœ®è¡åãçæããŸãã transpose(A)
ã¯conjadjoint
éæšå¥šã«ãªããŸã; transpose
ã¯ãå¿
èŠã«å¿ããŠ1.0ã§åå©çšã§ããŸãã adjoint
ã¯ç¡æéã«æ®ããã0.7ã®å¥ã®ã¹ãã«ãåªå
ããŠéæšå¥šã«ãªãå¯èœæ§ããããŸãã conjadjoint
ã綎ãå¥ã®æ¹æ³ã¯ã0.7ã«çŽæ¥å
¥ãããšãã§ããŸãã
æé 1ãš2ãããçšåºŠçµ±åããŠãäžéšã®äœæ¥/ãã£ãŒã³ãåé¿ããããšãã§ããŸããããã®ã¢ãããŒãã¯ããå°é£ã§ãšã©ãŒãçºçããããå¯èœæ§ããããŸãã
èªãã§ãããŠããããšãïŒ
çŽ æŽãããèšäºãããããšãã ç§ã¯äžè¬çã«ææ¡2ã«ãåæããŸãããé䌎äœçšçŽ ã¯ãŸã£ããæšæºçãªçšèªã§ã¯ãªããå人çã«ã¯éåžžã«æ··ä¹±ããŠãããšæããŸãïŒé䌎äœçšçŽ ã¯æ°åŠã®ç¹å®ã®åéã§åçŽãªè»¢çœ®ã®çšèªãšããŠäœ¿çšãããããšããããããè¿œå ã®åœ¢å®¹è©æŽ»çšå ±åœ¹ãèµ·ããããšãæå³ããŠããããã§ãïŒã
äžèšã®æã®èŸŒãã è°è«ãèªãã§ã¿ãŸããããæ°åŠçãªtranspose
ãååž°çã§ããããšã決å®/åæ©ä»ããããæç¹ãããããŸããã§ããã ããã¯ãããã€ãã®å人çãªè°è«ïŒ7æ14æ¥ãã18æ¥ã®ã©ããïŒã«ç¶ãããã§ããã®åŸçªç¶ãæ°åŠçããã³æ§é çãªè»¢çœ®ãå°å
¥ãããŸããã
@ Sacha0ã¯ããã
ãããã©ã®ããã«çºçãããïŒä»¥åã¯ãæ§é 転眮ãã¯ãæ°åŠçé䌎ã/ãæ°åŠç転眮ããšæ··åãããŠããŸãã
ïŒæ§é çïŒè»¢çœ®ããé䌎ããšæ··åãããããšã«åæããŸãããããã§ã¯ãæ°åŠçãªè»¢çœ®ããã©ããããšããªãçŸããŸããïŒ å®å šæ§/èªå·±å®çµæ§ã®ããã«ããã®æŠå¿µãšãããååž°çã§ããå¿ èŠãããçç±ãç°¡åã«ç¹°ãè¿ã/èŠçŽããããšãã§ããŸããïŒ
ããã«é¢é£ããŠãè¡åã®è»¢çœ®ãäœçšããªããªããžã§ã¯ãã«ãªããšããåçŽãªçç±ãããç·åœ¢ãããã®æŒç®ãšããŠãæœè±¡çãªæ°åŠçãªæå³ã§transpose
ãå®éã«äœ¿çšããŠãã人ã¯ããªããšæããŸãããã¯ãã«ã§ããã RowVector
ã«ãããŸããã€ãŸãã RowVector
ãRowVector
ãããããŸãã ååž°ç転眮ã«ã€ããŠã®è°è«ãäžè¶³ããŠããããšãèãããšãéåžžïŒåºæ¬äŸåïŒæŠå¿µãšããŠå®çŸ©ãããåçŽãªè¡å転眮ãšãæ°ããææ¡ãããflip
æäœãšã®éã«éãã¯ãããŸããã
çŽ æŽãããèšäºãæžããŠãããŠããããšã@ Sacha0 ã ç§ã¯ïŒã³ãŒã«ãé䌎æ¡2ã奜ãadjoint
転眮ã transpose
ãããã³é
åããªããflip
ã adjoint
ãštranspose
ã©ã€ãã§LinAlg
ãããã³flip
ã¯Base
ãŸããïŒ ç§ã«ã¯ããããæè¯ã®æçµçµæãããããããã«æããïŒãããäž»ãªé¢å¿äºã§ããã¯ãã§ãïŒãv1.0ã®ããã¯ãªãŒã³ãªæ¹æ³ãå¯èœã«ããŸãã ç§ã¯äžèšã®ããªãã®ãã€ã³ãã«åæããã®ã§ãããããç¹°ãè¿ãããšã¯ããŸããããããã«ããã€ãã®è¿œå ã®ã³ã¡ã³ãããããŸãã
éååž°çãªtranspose
ãæ¯æãã1ã€ã®è°è«ã¯ã .'
æ§æãéåžžã«äŸ¿å©ã§ããããããã£ãŠãããšãã°Matrix{String}
䜿çšã§ãããšããããšã§ãã æ§æã¯ïŒïŒ21037ïŒé¢ããŠèµ·ãã£ãŠããããã1ã€ã¯äœ¿çšããå¿
èŠããããšä»®å®ãããštranspose(A)
ã®ä»£ããã«A.'
ãç§ã¯ãšæããŸãflip
ïŒçã-functionã¯æè¿ã®ã»ãã«ãªããŸãtranspose(A)
ãããæ確ã§ã permutedims(A, (2,1))
ãããééããªãåªããŠããŸãïŒã
ææ¡2ãæäŸããLinAlg
ãšBase
éã®åé¢ãéåžžã«åªããŠããŸãã LinAlg
ã¯ã Transpose
ãšAdjoint
åŠçæ¹æ³ã ããæ°ã«ããå¿
èŠãããã ãã§ãªãã transpose
ãšadjoint
ãèæ
®ããããšãæ確ã«ãªããŸãã LinAlg
æŒç®ã§ããã flip
ã¯è¡åã®æ¬¡å
ãå転ããã ãã®äžè¬çãªAbstractMatrix
ãã®ã§ãã
æåŸã«ã transpose(::Matrix{String})
ãªã©ãæ©èœããªããšããèŠæ
ã¯ããŸãèŠãããŸããã ããã¯æ¬åœã«äžè¬çãªãŠãŒã¹ã±ãŒã¹ã§ããïŒ ã»ãšãã©ã®å Žåããšã«ããæåããå転ããè¡åãäœæããæ¹ãè¯ãã¯ãã§ãã
ãã®åœåã¹ããŒã ïŒææ¡2ïŒã¯ç¢ºãã«åªããŠãããããããŸããã é䌎ãšè»¢çœ®ã¯ç·åœ¢ä»£æ°ã®ããªãæšæºçãªçšèªã§ãããå£ãã«ããã§ã...
ããããæ°åŠçãªè»¢çœ®ãååž°çã§ããã¹ãã§ããããšãã©ã®æç¹ã§æ±ºå®/åæ©ä»ããããããç¥ãããšãã§ããŸããã§ãã
@Juthoé䌎äœçšçŽ ïŒè€çŽ æ°ã®é䌎äœçšçŽ ã¯å
±åœ¹ã§ããïŒè€çŽ æ°ã¯æå¹ãªã©ã³ã¯1ã®ãã¯ãã«ç©ºéãšç·åœ¢æŒç®åã§ãããããå
ç©ãšé䌎äœçšçŽ ãé©çšãããïŒãããã³ãããã¯è¡åã®é䌎äœçšçŽ ãšåãåŒæ°ã§ããååž°çã§ã...ïŒã ããšãã°ããã¹ããããå®æ°è¡åã䜿çšããŠç·åœ¢ä»£æ°ãå®è¡ãããå ŽåããããŸãã ãå®æ°ã®è¡åãŸãã¯ãã¯ãã«ã®é䌎äœçšçŽ ãã«.'
ã䜿çšããã³ãŒãããŸã ãããããããããã以åã¯è¡ã£ãŠããŸããã ããã§ã '
ã¯æå¹ã§ããã ãã§ãªããããäžè¬çã§ããããŸãïŒè€éãªå€ããã¹ããããé
åã§æ©èœããŸãïŒã ãã¹ããããè€çŽ è¡åã§ã®å垰転眮ã®ããæ¬ç©ã®äœ¿çšæ³ã¯ãæ¹çšåŒãconj(adjoint(a))
äžãããšãã«çºçããŸããããã¯æ¯èŒçãŸãã§ãããããã§ãçºçããŸãïŒããã«é¢é£ä»ããããé¢æ°ããªãå Žåã¯ãç§ãæºè¶³ããã»ã©ãŸãã§ããäžèšã®è°è«ãä»ã®å Žæã§ãããŸããŸãªäººã
ãããããæ°åŠçãªè»¢çœ®ãã®ãããªç°ãªããã®ãšåŒã³å§ããŸãããç§ã¯conjadoint
ãéžã³ãŸããããããããtranspose
èªäœãé€ããŠãåªããçšèªIMOã¯ãããŸããã ç·åœ¢ä»£æ°ã§ã¯ããããã¯è¡åã®ãããã¯ãåé
眮ãããããããã¯èªäœã«ã¯äœãããªãéååž°çæäœã¯ãéåžžã¯è¡šç€ºãããŸããã
æåŸã«ã
transpose(::Matrix{String})
ãªã©ãæ©èœããªããšããèŠæ ã¯ããŸãèŠãããŸããã ããã¯æ¬åœã«äžè¬çãªãŠãŒã¹ã±ãŒã¹ã§ããïŒ ã»ãšãã©ã®å Žåããšã«ããæåããå転ããè¡åãäœæããæ¹ãè¯ãã¯ãã§ãã
ãžã¥ãªã¢ã®æŸéäºæ¥ã§ã¯ãããããããšã¯ããªãæãŸãããšæããŸãã ããšãã°ãäžéšã®ããŒã¿ã®å€éšïŒãã«ã«ãïŒç©ãååŸãããããé¢æ°ãä»ããŠãããã³ã°ããããšã¯éåžžã«äžè¬çã§ãã ãããã£ãŠã map(f, product(a, b))
ãããªãã®ã®ä»£ããã«ã broadcast(f, a, transpose(b))
ãŸãã¯åã«f.(a, b.')
ã䜿çšã§ããŸãã ããã¯å°æ°ã®ãã£ã©ã¯ã¿ãŒã§å€§ããªåã§ãã
ç§ã®èãïŒãã®ã¹ããŒã¹ã«ããã«å€ãã®é¢æ°åïŒã€ãŸãflip
ïŒãè¿œå ããªãããã«ããããã«ã permutedims(a) = permutedims(a, (2,1))
é åã®ããã©ã«ãå€ã䜿çšã§ãããã©ããçåã«æã£ãŠããŸãã æ®å¿µãªãããããã¯flip
ã»ã©çãã¯ãããŸããããå®å
šãªpermutedims(a, (2,1))
ãã©ãŒã ãããäžå¿«æã倧å¹
ã«å°ãªããªããŸãïŒããäžè¬çãªæ©èœã«ã€ããŠãŠãŒã¶ãŒã«æãããšããå¯äœçšããããŸãïŒã
ïŒ @ Sacha0ããã«ãAdjoint
ãšTranspose
ã©ãããŒããŸãã¯RowVector
+ MappedArray
+å転ãããã®ãéžæããŠãã ãã以åã«èšç»ããããããªãã¯ã¹ïŒãã¶ãPermutedDimsArray
ïŒãç§ã¯ãŸã åŸè
ã奜ãåŸåããããŸã...ïŒ
ãã¹ããããè€çŽ è¡åã§ã®å垰転眮ã®ããæ¬ç©ã®äœ¿çšæ³ã¯ãæ¹çšåŒã
conj(adjoint(a))
äžãããšãã«çºçããŸã
æ¹çšåŒã§conj(adjoint(a))
ãååŸããããè¡åãšã³ããªã«é©çšãããã®ã¯å®éã«ã¯conj
ã§ããã adjoint
ã§ã¯ãªãå¯èœæ§ãããããšãã©ã®ããã«ããŠç¥ãããšãã§ããŸããã adjoint.(adjoint(a))
ã
ããã¯ããããç§ãçŠæ¢/è¿œæŸããã§ãããããç§ã¯ååž°çãªã¢ã€ãã¢å šäœã®å€§ãã¡ã³ã§ã¯ãããŸããã ç§ãå¿ ãããããã«å察ããŠããããã§ã¯ãããŸããããã¯ãã«ãšæŒç®å/è¡åã¯ååž°çã«å®çŸ©ãããŠããªããããæ°åŠçã«å³å¯ãªçç±ããããšã¯æããŸãããã¹ã«ã©ãŒã®ãã£ãŒã«ãäžã§ïŒå¿ èŠã«å¿ããŠæ¡åŒµãªã³ã°ã«ãã£ãŠïŒå®çŸ©ãããŸãããã¯ãã«ç©ºéã®ä»£ããã«ã¢ãžã¥ãŒã«ãæäœããŸãïŒã ãããã£ãŠãBase.LinAlgã¯ãã®å Žåã«ã®ã¿æ©èœããã¯ãã§ãã äž»ãªè°è«
ãã¯ãã«ã®é䌎ã¯ããããã¹ã«ã©ãŒã«ãããã³ã°ããç·åœ¢æŒç®åã§ãªããã°ãªããŸããã ã€ãŸããaããã¯ãã«ã®å Žåãa '* aã¯ã¹ã«ã©ãŒã§ãªããã°ãªããŸããã
Julia Baseã®åäœãšäºææ§ããããŸããïŒ a=[rand(2,2),rand(2,2)]
ã a'*a
ã芳å¯ããŸãã ã¹ã«ã©ãŒã§ã¯ãããŸããã ããã§ã a
ã¯è¡åã§æºãããããã¯ãã«ãªã®ã§ãä»ã¯è¡åã§ããïŒ äžèšã¯ãã¢ãžã¥ãŒã«ãå®çŸ©ããã¹ã«ã©ãŒãšããŠ2x2è¡åã®ãªã³ã°ãå®éã«äœ¿çšããããšãæå³ããŠããå Žåã«ã®ã¿ãã¹ã«ã©ãŒã§ãã ãããããããã®æèã§ã¯ãäžèšã®çµæãæå³ãããã®ã§ãããã©ããã¯ç§ã«ã¯ããããŸããã ãšã«ããããŠãŒã¯ãªããå
ç©ãã¢ãžã¥ãŒã«ãªã©ã®ã³ã³ããã¹ãã§äœ¿çšãããããšã¯ãã£ãã«ãªãã®ã§ãBaseããã®æ£ããåäœãå®çŸ©ããããšããæ°ã«ããå¿
èŠã¯ãªããšæããŸãã
ãããã£ãŠãå®éã«ã¯ãäžèšã®ã¹ããŒãã¡ã³ãã¯ãè¡åã§æºããããè¡åããããã¯è¡åãšããŠè§£éããããšãè¶
ããŠåæ©ãæ¡åŒµããè©Šã¿ã§ããå¯èœæ§ããããŸãããæçµçã«ã¯ããããã¯è¡åã®è§£éãadjoint
ãäœæããå¯äžã®çã®åæ©ã§ãã£ããšæããŸãã transpose
ïŒæ°åŠçãªæå³ã§ã¯æ±ºããŠäœ¿çšãããŸããããåžžã«ããªããè¡åã€ã³ããã¯ã¹ã®æå³ã§äœ¿çšãããŸãïŒã§ãããããããååž°çã§ãã æ°ããã¹ã«ã©ãŒãã£ãŒã«ãã¿ã€ããèªåã§å®çŸ©ããå Žåã䜿çšããåã«ã conj
ã«å ããŠadjoint
ãštranspose
ãå®çŸ©ããå¿
èŠãããã®ã¯å¥åŠãªè² æ
ã§ãããããªãã¯ã¹ã§ã
ã ããããªãããžã¥ãªã¢ã®ãããªåŒ·åãªåã·ã¹ãã ã§ã¯ãåã«ãããã¯è¡åå°çšã®åãæã£ãŠããã ãã§ã¯ãããŸããã ãããã£ãŠãæªéã®ä»£åŒè ãæŒããããšïŒ
ãã§ã«è¿°ã¹ãããã«ãç¹ã«transpose
å Žåã¯ãïŒäžèšã®èª¬æããã¹ãŠèªãã åŸã§ãïŒæå¹æ§ãçåèŠããã ãã§ãå¿
ãããå察ããããã§ã¯ãããŸããã
ããã¯ããããç§ãçŠæ¢/è¿œæŸããã§ããã
ããã¯åè«ã ãšæããŸãããäžè©ãªæèŠãæã£ãŠããŠãã誰ãçŠæ¢ãããããšã¯ãããŸããã é·æéç¶ãæªãè¡åã ããçŠæ¢ã«ã€ãªããå¯èœæ§ããããŸãã ããã§ãçŠæ¢ã¯æä¹ çã§ã¯ãã
ãã¯ãã«ãšæŒç®å/è¡åã¯ååž°çã«å®çŸ©ãããŠããªããããæ°åŠçã«å³å¯ãªçç±ã¯ãªããšæããŸããã¹ã«ã©ãŒã®ãã£ãŒã«ãäžã§å®çŸ©ãããŸãïŒãã¯ãã«ç©ºéã®ä»£ããã«ã¢ãžã¥ãŒã«ãæäœããå Žåã¯ãæ¡åŒµãªã³ã°ã«ãã£ãŠå®çŸ©ãããŸãïŒã ïŒã
ãã®å£°æã¯ç§ã«ã¯æå³ããããŸããã ãã¯ãã«ã®ãã¯ãã«ãé¢æ°ã®ãã¯ãã«ããŸãã¯è¡åã®ãã¯ãã«ã¯ã +
ãš* scalar
ååž°çã«å®çŸ©ããããã¯ãã«ç©ºéïŒåºç€ãšãªãã¹ã«ã©ãŒå ŽäžïŒã圢æããåæ§ã«åœ¢æãããŸããå
ç©ãååž°çã«å®çŸ©ãããå
ç©ç©ºéã ãã¯ãã«ã¯ãã¹ã«ã©ãŒã®åãã«ãããªãåŸãªããšããèãã¯ãæ°åŠãç©çåŠãå·¥åŠã«ãããå®çŸ©ãšäžè¬çãªäœ¿çšæ³ã®äž¡æ¹ã«åããŸãã
a=[rand(2,2),rand(2,2)]
ãa'*a
ã芳å¯ããŸãã ã¹ã«ã©ãŒã§ã¯ãããŸããã
ãã®å Žåã a
ã®ãã¹ã«ã©ãŒãªã³ã°ãã¯2x2è¡åã®ãªã³ã°ã§ãã ãããã£ãŠãããã¯èšèªã®åé¡ã§ãããé䌎äœçšçŽ ã®åäœã®åé¡ã§ã¯ãããŸããã
ãžã¥ãªã¢ã§çŸåšã©ã®ããã«æ©èœãããïŒãŸãã¯æ©èœããªããïŒããa'*a
ãã©ã®ããã«æ©èœãããã«ã€ããŠ
æ°ããã¹ã«ã©ãŒãã£ãŒã«ãã¿ã€ããèªåã§å®çŸ©ããå Žåã䜿çšããåã«ã
conj
ã«å ããŠadjoint
ãštranspose
ãå®çŸ©ããå¿ èŠãããã®ã¯å¥åŠãªè² æ ã§ãããããªãã¯ã¹å
ãã®è² æ
ã¯å®éçãšãããããçŸçã ãšæããŸãã Number
ãµãã¿ã€ãã«ããããšã«åé¡ããªãå Žåã¯ãäœãå®çŸ©ããå¿
èŠã¯ãããŸããã Number
ãé©åã§ã¯ãªããšæãããå Žåã§ããå®çŸ©ã¯éåžžã«ç°¡åã§ããããããè¿œå ããããšã¯ã»ãšãã©è² æ
ã§ã¯ãããŸããã
ã ããããªãããžã¥ãªã¢ã®ãããªåŒ·åãªåã·ã¹ãã ã§ã¯ãåã«ãããã¯è¡åå°çšã®åãæã£ãŠããã ãã§ã¯ãããŸããã
https://github.com/KristofferC/BlockArrays.jl/å¯çš¿è ãæè¿ããŸã:)
ãçŠæ¢ããžã§ãŒã¯ã«ã€ããŠãè©«ã³ããŸãã ãã以äžãã®è°è«ãçãããªãããã«ããããç§ã®æåŸã®åå¿ã«ãªããŸãã ååž°çé䌎äœçšçŽ ïŒè»¢çœ®ã§ã¯ãªããããããŸããïŒã解決ãããããšã¯æããã§ãããç§ã¯ãã®æ±ºå®ãå ã«æ»ãããšã¯ããŠããŸããã ç§ã¯ããã€ãã®ççŸãææããããšããŠããŸãã
@StefanKarpinski ïŒã¹ã«ã©ãŒãªã³ã°ã®äŸã¯ååž°ãšNumber
ã¿ã€ããã¹ã«ã©ãŒã§ããïŒ
åè
ã®å Žåãå®éã«ã¯ãã¯ãã«ç©ºéã®ä»£ããã«ã¢ãžã¥ãŒã«ãããããããã®ãã¹ã«ã©ãŒãã«conj
ãŸãã¯adjoint
ã©ã¡ããå¿
èŠãã¯ããŠãŒã¹ã±ãŒã¹ã«ãã£ãŠç°ãªããŸããå
ç©ãšé䌎ã䜿çšããŸãã
ç§ã¯åŸè
ã®å®çŸ©ãåãå
¥ããŠã倧äžå€«ã§ãã ç§ã¯ä»äºã§è¶
ãã¯ãã«ç©ºéã®æ®µéçãã³ãœã«ç©ã®ã°ã«ãŒãäžå€éšå空éã§ä»»æã®èŠçŽ ã䜿çšããŠããã®ã§ããã¯ãã«ã®å®çŸ©ã§æ°å€ã®åã«å®éã«éå®ãããŠããŸããã ããããè¡åã®ãã¯ãã«ã¯ãçŽç²ãªãã¯ãã«ãªã®ãããããšãäœããã®è¡åã®åäœãç¶æ¿ããå¿
èŠãããã®ãââã åè
ã®å Žåã dot(v,w)
ã¯ããããããã®èŠçŽ ã§vecdot
ãååž°çã«åŒã³åºãããšã«ãããã¹ã«ã©ãŒãçæããå¿
èŠããããŸãã åŸè
ã®å Žåãå°ãªããšãvecdot(v,w)
ã¯ãååž°çã«åäœããããšã«ãã£ãŠã¹ã«ã©ãŒãçæããå¿
èŠããããŸãã ãããã£ãŠãããã¯ååž°çé䌎ãšäžèŽããããã®æå°éã®ä¿®æ£ã«ãªããŸãã
ããããååž°çãªtranspose
ãæãããæ°åŠä»¥å€ã®ã¢ããªã±ãŒã·ã§ã³ã«ã䜿çšã§ããããã«ããæ¹ãç°¡åãªããã§ããéåžžã®è¡åæ¹çšåŒã§ããå®éã®æ°åŠçãªè»¢çœ®ãšã¯ã»ãšãã©é¢ä¿ããªããšæãããã§ããç·åœ¢ãããã®ã
dot
ã¯vecdot
ã§ã¯ãªãdot
ååž°çã«åŒã³åºãå¿
èŠããããšæããŸãããããã£ãŠãè¡åã®æ£èŠå
ç©ãå®çŸ©ããªããããè¡åã®ãã¯ãã«ã«å¯ŸããŠãšã©ãŒãçºçããŸãã
転眮ãååž°çã§ããããšã«ãã€ãé©ããŠããŸã..ãããŠèª°ããããã§ã¯ãªããšã¯æ³åã§ããŸããã ïŒãã®è°è«ã®ãããã§ããç·åœ¢ãããã®è»¢çœ®ããŠã£ãããã£ã¢ã®èšäºã«å¯ŸããèŠè§£ã¯å°ãªããšã3åã«ãªã£ããšæããŸããïŒ
ç§ãååž°çå®çŸ©ãäžå®å®ã§ããããšã«æ°ã¥ãã ãŸããïŒããããåã³éåžžã«ãã䌌ããã¬ãŒãã³ã°ãåããŸããïŒã
ããã§ç§ãæ©ãŸããŠããççŸãç解ãããšæããŸã-ããã§ã¯äŸãšããŠè€çŽ æ°ã®2x2è¡ååã蟌ã¿ãªã©ã®ãªã³ã°ãšãã£ãŒã«ãã䜿çšãç¶ããŠããŸãããå®éã«ã¯æ©èœãããå垰転眮ïŒããã³é䌎ïŒãåæ©ä»ããŸããïŒã
説æãããŠãã ããã ç§ãåºãåæããããš
LinAlg
ã®ãããªæŠå¿µadjoint
ãæã
ãå®çŸ©ããå¿
èŠããããããšãã°ãé©çšãããªãadjoint(z::Complex) = conj(z)
ã ïŒã¹ã«ã©ãŒã®ãã¯ãã«ãšè¡åãè¶
ããŠã LinAlg
æŠå¿µãïŒãŠãŒã¶ãŒã«ãã£ãŠïŒä»ã®ãªããžã§ã¯ãã«æ¡åŒµããããšãã§ããŸã- @ stevengjã¯ãããšãã°ç¡éãµã€ãºã®ãã¯ãã«ç©ºéïŒãã«ãã«ã空éïŒã«ã€ããŠèšåããŸããïŒãz = x + y*im
ãZ = x*[1 0; 0 1] + y*[0 1; -1 0]
ãšããŠã¢ãã«åã§ããæŒç®+
ã -
ã *
ã /
ãš\
ã¯ããã®ååã§ä¿æãããŸãã ïŒãã ãã conj(z)
ã¯adjoint(Z)
/ transpose(Z)
/ flip(Z)
ãŸããããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãïŒãadjoint
ãªã©ã«äŸåããŠããŸãïŒãBase.LinAlg
ã1ããã³2ãšäºææ§ãããããšã¯åççãšæãããŸãããIMO 3ã¯ãèªç¶ã«åãŸãå Žåã«ã®ã¿Base
å¿
èŠããããŸãïŒããã§ãªãå Žåã¯ãhttpsïŒ/ãªã©ã®å€éšããã±ãŒãžã«åŸãåŸåããããŸã/github.com/KristofferC/BlockArrays.jlïŒã
ç§ã¯ä»ãç§ãã¡ã2ãš3ãæ··åããŠããããšã«æ°ã¥ããããã¯ããã€ãã®ççŸã«ã€ãªãããŸãïŒ adjoint
ããã®ä»ã®æäœããããã¯è¡åã«åŸã£ãŠäœ¿çšããŠãã2ãæãç°¡åãªæ¹æ³ã¯äŸã«ãããã®ã§ã¯m = [z1 z2; z3 z4]
ãååè¡šçŸM = [Z1 Z2; Z3 Z4]
ãããã³æšæºã®2x2ãããã¯è¡åb = [m1 m2; m3 m4]
ãšããŠå®çŸ©ããŸããããããã§ã m1
ãªã©ã¯åããµã€ãºã®æ£æ¹åœ¢ã§ãã Number
è¡åã äžè¬çãªæäœã®æå³çã«æ£ããçãã以äžã«ç€ºããŸãã
| æäœ| z
| Z
| m
| M
| b
|
| -| -| -| -| -| -|
| +
ã -
ã *
| ååž°ç| ååž°ç| ååž°ç| ååž°ç| ååž°ç|
| conj
| conj(z)
| Z'
ãŸãã¯Z.'
ãŸãã¯flip(Z)
| conj.(m)
| adjoint.(M)
ïŒãŸãã¯transpose.(M)
ïŒ| conj.(b)
|
| adjoint
| conj(z)
| Z'
ãŸãã¯Z.'
ãŸãã¯flip(Z)
| flip(conj.(m))
ãŸãã¯ååž°ç| flip(transpose.(m))
ãŸãã¯ååž°ç| ååž°ç|
| trace
| z
| Z
| z1 + z4
| Z1 + Z4
| trace(m1) + trace(m4)
|
| det
| z
| Z
| z1*z4 - z2*z3
| Z1*Z3 - Z2*Z3
| det(m1) * det(m4 - m2*inv(m1)*m3)
ïŒ m1
å¯éã®å Žåãããšãã°Wikipediaãåç
§ïŒ|
ã¹ã«ã©ãŒãè¿ãtrace
ãdet
ãããªæŒç®ãèãããšã LinAlg
Juliaåã·ã¹ãã ãComplex
2x2è¡ååã蟌ã¿ãåŠçã§ããªãããšã¯æããã ãšæããŸãã trace(Z)
ã§ã Z = [1 0; 0 1]
ã¯2
ãããã¯1
è¡šçŸã§ãã åæ§ã«rank(Z)
ã
äžè²«æ§ãå埩ãã1ã€ã®æ¹æ³ã¯ã2x2è¡šçŸãã¹ã«ã©ãŒãšããŠæ瀺çã«å®çŸ©ããããšã§ããããšãã°ã次ã®ããã«Number
ãµãã¿ã€ãåããŸãã
struct CNumber{T <: Real} <: Number
m::Matrix{T}
end
CNumber(x::Real, y::Real) = CNumber([x y; -y x])
+(c1::CNumber, c2::CNumber) = CNumber(c1.m + c2.m)
-(c1::CNumber, c2::CNumber) = CNumber(c1.m - c2.m)
*(c1::CNumber, c2::CNumber) = CNumber(c1.m * c2.m)
/(c1::CNumber, c2::CNumber) = CNumber(c1.m / c2.m)
\(c1::CNumber, c2::CNumber) = CNumber(c1.m \ c2.m)
conj(c::CNumber) = CNumber(transpose(c.m))
zero(c::CNumber{T}) where {T} = CNumber(zero(T), zero(T))
one(c::CNumber{T}) where {T} = CNumber(one(T), one(T))
ãããã®å®çŸ©ã«ãããäžè¬çãªLinAlg
ã¡ãœããã¯ããããæ£åžžã«æ©èœããŸãã
ç§ãããããå°ãåºããçµè«ïŒååž°çãªadjoint
ã¯ããããã¯è¡åãšãã¯ãã«ã®ãã¯ãã«ã«ãšã£ãŠäŸ¿å©ã§ãã äžèšã®Z
ãšã©ãã«ä»ããããã¹ã«ã©ãŒã2x2è¡åã®ã¿ã€ãã®æ°åŠçæ£ç¢ºãã«ãã£ãŠåæ©ä»ããããã¹ãã§ã¯ãããŸããã 次ã®é·æãšçæã䜿çšããŠãããã©ã«ãã§ãããã¯è¡åããµããŒããããã©ãããéžæããŸãã
é·æ
+
ã *
ã conj
ãªã©ã®äžã§æå¹ãªç·åœ¢æŒç®åã§ãããããèªç¶ãªå圢ã«ããããšãå¯èœã§ããã°ïŒ CNumber
ãå¿
èŠãšããäžèšã®Z
äŸãšã¯ç°ãªãïŒããªãã§ããïŒçæ
LinAlg
å®è£
ã«å€§å¹
ãªè¿œå ã®è€éãïŒå¥ã®ããã±ãŒãžã«ååšããå¯èœæ§ããããŸãïŒãeig(block_matrix)
ãããªãã®ããµããŒãããã®ã¯å°ãé£ããã§ãïŒãããäžå¯èœã§ã¯ãããŸããïŒã LinAlg
ãeig
ããµããŒããã LinAlg
ããããã¯è¡åããµããŒããããšèšãå Žåãä¿®æ£ããããŸã§ããã¯ãã°ãšèŠãªããŸãã LinAlg
ã«ãã£ãŠæäŸããã倧éã®æ©èœãèãããšãç§ãã¡ããå®æãããããšã¯ã»ãšãã©ãããŸãããtranspose
ãããªæäœãéååž°çã«äœ¿çšãããããŒã¿ãŠãŒã¶ãŒã®äžäŸ¿ãç§ã«ãšã£ãŠã®è³ªåã¯-ããã©ã«ãã§LinAlg
ã¯AbstractArray
ã®èŠçŽ ããã¹ã«ã©ãŒãïŒ Number
ãµãã¿ã€ããŸãã¯ããã¯ã¿ã€ãã³ã°ïŒã§ããããšãæåŸ
ããŠãããšèšãããšãéžæããŸããïŒãããã¯é
åã®è€éããå€éšããã±ãŒãžã«åæ ãããŸããïŒ ãããšãã Base
ãšLinAlg
ã®è€éããåãå
¥ããŸããïŒ
åæ¥ãŸã§ã®èšç»ã¯åŸè ã§ããã
@ Sacha0ããã§ã®å€æŽããµããŒãããããã«å¿
èŠãªRowVector
äœæ¥ãå®äºããããšããŠããŸãïŒä»¥åã®å€æŽïŒéååž°çãªtranspose
ã RowVector
ãµããŒãæååããã³ãã®ä»ã®ããŒã¿ïŒãããŠä»ãç§ã¯ããªãããã¶ã€ã³ã«é¢ããŠäœãèããŠããã®ãçåã«æããŸãã
æè¿ã®è°è«ãããç§ã¯ãããã®ã±ãŒã¹ãäœãæãŸããããæšæž¬ããŠèŠãŠããŸã
| | ãã¯ãã«| ãããªãã¯ã¹|
|-|-|-|
| adjoint
| RowVector
ãšååž°adjoint
| AdjointMatrix
ãŸãã¯TransposedMatrix
ãšååž°çãªadjoint
|
| transpose
| RowVector
ãšååž°transpose
| TransposeMatrix
ãšååž°transpose
|
| flip
| ã³ããŒãŸãã¯PermutedDimsArray
ïŒ | ã³ããŒãŸãã¯PermutedDimsArray
ïŒ |
| conj
ã®AbstractArray
| æ æ°ãŸãã¯ç±å¿ïŒ | æ æ°ãŸãã¯ç±å¿ïŒ |
| conj
RowVector
ãŸãã¯TransposedMatrix
| æ æ°| æ æ°|
ïŒäžèšã¯ãç·åœ¢ä»£æ°ã®æžå¿µãããŒã¿ã®é åã®æ¬¡å ã®äžŠã¹æ¿ãããåé¢ããããšããŠããŸããïŒ
ã ããç§ã解ãæŸã€ããã®ããã€ãã®åºæ¬çãªè³ªåïŒ
transpose
ããŸããïŒ adjoint
ã©ãã§ããïŒconj(transpose(array)) == adjoint(array)
ãä»®å®ãç¶ããŸããïŒconj
é
延ãããŸããïŒflip
ã玹ä»ããå Žåãããã¯æ æ°ã§ããããããšãç±å¿ã§ããïŒåèãŸã§ã«ã permutedims
çã圢åŒã䜿çšããŠãïŒ24839ã§è¡åã®æ¬¡å
ããå転ãããäœæ©æŠã¢ãããŒããè©ŠããŸããã
ç§ã¯@ Sacha0ã®ææ¡2ã«åŒ·ãè³æã§ããååž°çé䌎äœçšçŽ ãšéååž°çé䌎äœçšçŽ ã®çè«çåºç€ãå®å
šã«æŽçããŠããŸãããããããšã¯ç¬ç«ããŠãå°ãªããšãç§ã«ãšã£ãŠã¯ãçŸåšã©ã®ããã«åœ¹ç«ã€ããšãããã£ãŠããŸãã ããããŠããããã®åå£å Žã§ã®å€æŽã¯ãããããå§ãã§ããŸããã 転眮ã¯ãå¿
èŠãªå Žåã¯ããã®ç¹ã§é䌎ïŒ= conjâadjoint
ïŒã«åŸãå¿
èŠããããŸãã
FWIWãMathematicaã¯ååž°çãªTranspose
ãConjugateTranspose
ãããŸããïŒ
äžèšã®æã®èŸŒãã è°è«ãèªãã§ã¿ãŸããããæ°åŠçãªè»¢çœ®ãååž°çã§ããããšã決å®/åæ©ä»ããããæç¹ãããããŸããã§ããã [...]å®å šæ§/èªå·±å®çµæ§ã®ããã«ããã®æŠå¿µãšãããååž°çã§ããå¿ èŠãããçç±ãç°¡åã«ç¹°ãè¿ã/èŠçŽã§ããŸããïŒ
ç§ã¯ãã®ææ ãç解ããæè¬ããŠãããæéã®èš±ãéãããã«å¯ŸåŠããããšæããŸãã é䌎ãšè»¢çœ®ãå®çŸ©äžååž°çã§ããå¿ èŠãããçç±ãã¢ã¯ã»ã¹å¯èœãã€æå¿«ã«èª¬æããããšã¯ãæ®å¿µãªããããããææŠçã§ãããç°¡åã«ã¯äžå¯èœã§ããå¯èœæ§ããããŸãã äžèšã®ãããªéŠå°Ÿäžè²«ããå æ¬çãªèšäºã¯ãäœæã«èšå€§ãªæéãèŠããŸãã çãæéã§ããããã®ä»£ããã«ãåã®ããã€ãã®æçš¿ã®æ··ä¹±ã®ããã€ãã«ããã®äžã®ç¹å®ã®ãã€ã³ã/質åã«çããããšã«ãã£ãŠå¯ŸåŠããããšããŸãã ç§ãå°ããã€ããããŠããéãç§ã«èããŠãã ãã:)ã ãã¹ãïŒ
é䌎äœçšçŽ ãå®çŸ©äžååž°çã§ããçç±ã説æããâŠ
ãã®è°è«ã«è²¢ç®ããç§ã¯ããªã誰ããadjoint(A)
ãååž°çã§ããã¹ãã ãšããããšã«åæããŠããŸãã å¯äžã®è«ç¹ã¯ã transpose(A)
ãååž°çã§ããå¿
èŠããããã©ããïŒããã³éååž°ç転眮ã®ããã«æ°ããé¢æ°flip(A)
ãå°å
¥ããå¿
èŠããããã©ããïŒã§ãã
ãã®è°è«ã«è²¢ç®ããç§ã¯ãadjointïŒAïŒãååž°çã§ããã¹ãã§ããããšã«åæããããªãã®äººã§ãã
ããšãã°ãhttpsïŒ//github.com/JuliaLang/julia/issues/20978#issuecomment-347777577ããã³ä»¥åã®ã³ã¡ã³ããåç §ããŠãã ãã:)ã ãã¹ãïŒ
ååž°çé䌎ã®è°è«ã¯ãå®çŸ©ã®ããªãåºæ¬çãªãã®ã§ãã dot(x,y)
ã¯å
ç©ãã€ãŸãã¹ã«ã©ãŒãçæããå¿
èŠããããé䌎ã®å®çŸ©ã¯dot(A'*x, y) == dot(x, A*y)
ã§ãã ååž°ïŒ dot
ãšadjoint
äž¡æ¹ïŒã¯ãããã2ã€ã®ããããã£ããåŸãããŸãã
ïŒãããç©ãšã®é¢ä¿ããé䌎ãšè»¢çœ®ãç·åœ¢ä»£æ°ã®éèŠãªæŒç®ã§ããçç±ã§ãããã®ãããè¡åã90床å転ãããããªä»ã®æŒç®ã§ã¯ãªãããããã®ååãä»ããããŠããŸãïŒMatlabã§ã¯rot90
ïŒã ïŒãïŒ
éååž°ç転眮ã«flip
ã䜿çšããå Žåã®åé¡ã®1ã€ã¯ãMatlabãšNumpyã®äž¡æ¹ãflipdim
ãšåŒã°ãããã®ã«flip
ã䜿çšããããšã§ãã
è¡åã®è»¢çœ®ããã¯ãã«ã§ã¯ãªãRowVectorã«äœçšãããªããžã§ã¯ãã«ãªããã€ãŸãRowVectorãããããããšããåçŽãªçç±ãããç·åœ¢ãããã®æäœãšããŠãæœè±¡çãªæ°åŠçãªæå³ã§è»¢çœ®ãå®éã«äœ¿çšããŠãã人ã¯ããªããšæããŸãã RowVectorã«ã
ããããååž°çãªè»¢çœ®ããªããæ°åŠä»¥å€ã®ã¢ããªã±ãŒã·ã§ã³ã«ã䜿çšã§ããããã«ããæ¹ãç°¡åãªããã§ããéåžžã®è¡åæ¹çšåŒã§ããç·åœ¢ãããã®å®éã®æ°åŠçãªè»¢çœ®ãšã¯ã»ãšãã©é¢ä¿ããªããšæããŸãã
転眮ïŒæ°åŠçãªæå³ã§ã¯äœ¿çšãããŸããããåžžã«ããªããè¡åã®ã€ã³ããã¯ã¹ã®æå³ã§äœ¿çšãããŸãïŒ
ããã¯å°ãåãéã®ããã«èŠããã®ã§ãææ ¢ããŠãã ãã:)ã
ãžã¥ãªã¢ã®adjoint
ã¯ãç¹ã«ãšã«ããŒãé䌎ãæããŸãã äžè¬ã«ãUãšVã®å Žåãããããã®å察空éU *ãšVãæã€å®å
šãªãã«ã ãã¯ãã«ç©ºéïŒãããã空éïŒ ãããã³ç·åœ¢ååAïŒU-> Vã®å ŽåãéåžžA㧠ã ã€ãŸããäžè¬ã«ã転眮A ^ tãäžèšã®ããã«å察空ééã®ç·åœ¢ååã§ããã®ãšåæ§ã«ãé䌎ã¯å察空ééã®ç·åœ¢ååã§ãã ã§ã¯ããããã®å®çŸ©ããšã«ããŒãé䌎ã®ããç¥ãããæŠå¿µãšã©ã®ããã«èª¿åãããã®ã§ããããïŒ :)
çãã¯ãéåžžäœæ¥ããã¹ããŒã¹ãã€ãŸãå®å šãªå ç©ç©ºéïŒãã«ãã«ã空éïŒãæã€è¿œå ã®æ§é ã«ãããŸãã å ç©ã¯ãã«ã ãèªå°ããã®ã§ãå®å šãªå ç©ç©ºéïŒHilbertïŒã¯å®å šãªãã«ã 空éïŒBanachïŒã§ãããããã«ãã£ãŠïŒãšã«ããã£ã¢ã³ïŒé䌎ã®æŠå¿µããµããŒãããŸãã éèŠãªç¹ã¯æ¬¡ã®ãšããã§ããåãªããã«ã ã§ã¯ãªãå ç©ãæã€ããšã§ãç·åœ¢ä»£æ°ã§æãçŸããå®çã®1ã€ãã€ãŸããªãŒã¹ã®è¡šçŸå®çãé©çšãããŸãã äžèšã§èšãã°ããªãŒã¹ã®è¡šçŸå®çã¯ããã«ãã«ã空éã¯ãã®å察空éãšèªç¶ã«ååã§ãããšè¿°ã¹ãŠããŸãã ãããã£ãŠããã«ãã«ã空éãæ±ãå Žåãéåžžã空éãšãã®å察ãèå¥ããåºå¥ãåé€ããŸãã ãã®èå¥ãè¡ãããšã¯ãA *ïŒV *-> U *ã§ã¯ãªãA *ïŒV-> UãšããŠã®ãšã«ããŒãé䌎ã®ããç¥ãããæŠå¿µã«å°éããæ¹æ³ã§ãã
ãŸãããã«ãã«ã空éãèæ ®ããå Žåã転眮ã«ã€ããŠãåãèå¥ãäžè¬çã«è¡ãããA ^ tïŒV-> Uãšãªããããªãã¿ã®è»¢çœ®ã®æŠå¿µãåŸãããŸãã ãããã£ãŠãæ確ã«ããããã«ãã¯ãã転眮ã®äžè¬çãªæŠå¿µã¯ãæãããç¥ãããŠããïŒãã«ãã«ãïŒèšå®ã«é©çšããã転眮ã®äžè¬çãªæŠå¿µã§ããã¡ããã©ãšã«ããŒãé䌎ã®äžè¬çãªæŠå¿µããã®èšå®ã«é©çšãããé䌎ã®äžè¬çãªæŠå¿µã§ããã®ãšåãã§ãã ãã¹ãïŒ
æ»ãã 銬ã殎ã£ãããšããè©«ã³ããŸãããæ°åŠçãªæ··ä¹±ã®åé¡ãå¥ã®æ¹æ³ã§ç°¡åã«èŠçŽããããšæããŸããã äžäžèŽã®éèŠãªç¹ã¯ã T
ãé
åã®ãããªäžéšæ§é ãæããªãNumber
åãªããµãã¿ã€ãã§ã¯ãªãå Žåã«ããªããžã§ã¯ãVector{T}
ãæ°åŠçã«è§£éããæ¹æ³ã§ãã
ããåŠæŽŸã¯@stevengjã®äž»åŒµãåãå ¥ããŸã
ç°Räžã®ãã¯ãã«ã®ãã¯ãã«ã¯ãRäžã®ãã¯ãã«ç©ºéã§ãããçŽå空éãšããŠæãããç解ãããŸãã
ç¡é次å
ã®ãã¯ãã«ç©ºéãªã©ã«é¢ããç¹å®ã®åŸ®åŠãªã¢ãžã¥ããããã¯åºæ¬çã«ããã¯ãã«ã®ãã¯ãã«ããããã¯ãã¯ãã«ãšèŠãªãå¿
èŠãããããšãæå³ããŸãã ãããã£ãŠã Vector{Vector{T<:Number}}
ã¯ã粟ç¥çã«åçŽãªVector{T}
ããã©ããåãããå¿
èŠããããŸãã ãã®ãã©ãã€ã å
ã§ã¯ãè¡åã®è¡åãšããŠè¡šãããç·åœ¢æŒç®åã¯ããããã¯è¡åãšåæ§ã«èããå¿
èŠãããã adjoint
ã¯ã transpose
åèªã䜿çšããŠããå Žåãšåæ§ã«ã確å®ã«ååž°çã§ããå¿
èŠããããŸããæ°åŠçæå³ã ç§ãééã£ãŠããå Žåã¯èšæ£ããŠãã ããããããããã®èŠ³ç¹ããšã人ã
ã¯ã Vector{Matrix{T}}
ãããªãã®ã«ã¯ãç§ãã¡ãèšèšãã¹ãèªç¶ãªè§£éããªããšèããŠãããšæããŸãã ïŒç¹ã«ã @ stevengjãèšã£ãããã«ãå
åŽã®Matrix
ãè€çŽ æ°ã®è¡åè¡šçŸã§ãããšåçŽã«ä»®å®ããã¹ãã§ã¯ãããŸããã
è€çŽ æ°ã2x2è¡åã§è¡šãå Žåãç°ãªãè€çŽ æ°ãã¯ãã«ç©ºéããããŸãã
ïŒ
ãã1ã€ã®èãæ¹ã¯ã Vector{T}
ã¯åžžã«ãã¿ã€ãT
ã¹ã«ã©ãŒïŒç·åœ¢ä»£æ°ã®æå³ã§ïŒäžã®æœè±¡çãªãã¯ãã«ç©ºéã§ã®ãã¯ãã«ã®è¡šçŸãšèããã¹ãã§ãããšãããã®ã§ããã¿ã€ãã«é¢ä¿ãªãT
ã ãã®ãã©ãã€ã ã§ã¯ã Vector{Vector{T'}}
ã¯çŽå空éã®èŠçŽ ãšããŠã§ã¯ãªããã¹ã«ã©ãŒVector{T'}
äžã®ãã¯ãã«ãšããŠèããããã¹ãã§ãã ãã®å Žåã transpose(Matrix{T})
ã¯ååž°çã§ãã£ãŠã¯ãªãããåã«å€åŽã®è¡åãå転ãããå¿
èŠããããŸãã ãã®è§£éã®1ã€ã®åé¡ã¯ãåT
ã®èŠçŽ ãæå¹ãªã¹ã«ã©ãŒã®ãªã³ã°ã圢æããããã«ãïŒå¯æïŒå ç®ãšä¹ç®ã®æ確ã«å®çŸ©ãããæŠå¿µããªããã°ãªããªããšããããšã§ãã Vector{Vector{T'}}
ãããªãã¯ãã«ã®å Žåã2ã€ã®ãã¹ã«ã©ãŒã Vector{T'}
ãå¥ã®Vector{T'}
ã«ä¹ç®ããããã®ã«ãŒã«ãå¿
èŠã«ãªããŸãã 確ãã«ãã®ãããªã«ãŒã«ãæãä»ãããšãã§ããŸããïŒããšãã°ãåé¡ãT'
ä¹ç®æ¹æ³ã«ãŸã§ãã³ãããèŠçŽ ããšã®ä¹ç®ïŒãããããããã®æ®éçãªèªç¶ãªæ¹æ³ã¯ãããŸããã ãã1ã€ã®åé¡ã¯ããã®è§£éã®äžã§adjoint
ãã©ã®ããã«æ©èœããããšããããšã§ãã ãšã«ããŒãé䌎äœçšçŽ ã¯ããã«ãã«ã空éäžã®ç·åœ¢æŒç®åã§ã®ã¿å®çŸ©ãããŸãããã«ãã«ã空éã®ã¹ã«ã©ãŒå Žã¯ãå®çŸ©äžãå®æ°ãŸãã¯è€çŽ æ°ã®ããããã§ãªããã°ãªããŸããã ãããã£ãŠã adjoint
ãè¡åMatrix{T}
ã«é©çšããå Žåã¯ã T
ãè€çŽ æ°ïŒãŸãã¯å®æ°ïŒã®è¡šçŸã§ãããšæ³å®ããå¿
èŠããããŸãããããã§èª¬æããŸãããã®å Žåã¯ãã埮åŠãªã®ã§è€éã§ãïŒã ãã®è§£éã§ã¯ã adjoint
ã¯ååž°çã§ãã£ãŠã¯ãªããŸããããå€åŽã®è¡åãå転ããŠããconjugate
é©çšããå¿
èŠããããŸãã ãã ãã conjugate(T)
ã®æ£ããã¢ã¯ã·ã§ã³ã¯è¡šçŸã®æ§è³ªã«äŸåãããããããã«ã¯ããã«åé¡ããããŸãã ãŠã£ãããã£ã¢ã§èª¬æãããŠãã2x2è¡šçŸã®å Žåã conjugate
ã¯ãããªãã¯ã¹ãå転ãããå¿
èŠããããŸãã ãã ããäžèšã®çç±ã«ããã conjugate
ã¯åžžã«è¡åãå転ããå¿
èŠã¯ãããŸããã ãããã£ãŠããã®ã¢ãããŒããå®è£
ããã®ã¯å°ãé¢åã§ãã
ãããç§èªèº«ã®èãã§ããèŠçŽ ãããã«è€éãªäžéšæ§é ãæã€é
åã«é©ââçšããããšãã«transpose
ãååž°çã§ãããã©ããã«ã€ããŠãã客芳çã«æ£ãããçãã¯ãããŸããã ããã¯ããŠãŒã¶ãŒãJuliaã§æœè±¡çãªä»£æ°çæ§é ãè¡šçŸããããã«ã©ã®çšåºŠæ£ç¢ºã«éžæããŠãããã«ãã£ãŠç°ãªããŸãã ããã§ããã¹ã«ã©ãŒã®å®å
šã«ä»»æã®ãªã³ã°ããµããŒãããããšã¯éåžžã«é£ããããã«æãããã®ã§ãå®çšæ§ã®ããã«ãããã»ã©éå¿çãªããšãè©Šã¿ãã¹ãã§ã¯ãªããéæšæºã®ãªã³ã°äžã®ã¢ãžã¥ãŒã«ã®é£è§£ãªæ°åŠãå¿ããã¹ãã ãšæããŸãã Base
ïŒ permutedims(A, (2,1))
ãããåçŽãªæ§æïŒã«ã¯ãç·åœ¢ä»£æ°ã®è»¢çœ®ã®æŠå¿µãšã¯é¢ä¿ããªããè¡åãå転ããã ãã§ãååž°çã§ãããã©ããã«é¢ä¿ãªããé¢æ°ãå¿
èŠã§ãã transpose
ãŸãã¯flip
ãªã©ãšåŒã°ããŸãã adjoint
ãšLinAlg
å
ã®åå¥ã®è»¢çœ®é¢æ°ïŒããããå¥ã®ååïŒãååž°çã§ãããšããããã¯ãã¯ãã«/è¡åãšçŽæ¥åã®åçŽãªå®è£
ãåŠçã§ããã®ã§äŸ¿å©ã§ãããã¯ãã«ã®ãã¯ãã«ãšããŠã§ãããããã¯ã客芳çãªæ°åŠçæ£ãããã§ã¯å¿
èŠãããŸãããçŽç²ã«å®è£
ã®å®¹æããçç±ã«ãã®æ±ºå®ãäžãã®ã¯åé¡ãããŸããã
ããã³ã¡ã³ãããªããšããç§ã®ä»¥åã®çŽæã«ãããããããæ®å¿µãªããç§ã¯ããã«å¿çããªããã°ãªããŸããã
ãžã¥ãªã¢ã®é䌎äœçšçŽ ã¯ãç¹ã«ãšã«ããŒãé䌎äœçšçŽ ãæããŸãã äžè¬ã«ãUãšVã®å Žåãããããã®å察空éU *ãšVãæã€å®å šãªãã«ã ãã¯ãã«ç©ºéïŒãããã空éïŒ ãããã³ç·åœ¢ååAïŒU-> Vã®å ŽåãAã®ãšã«ããŒãé䌎ïŒéåžžã¯Aã§
æ¬åœã«ããã¯çå®ã§ã¯ãããŸããã ããã§èª¬æããŠããã®ã¯å®éã«ã¯è»¢çœ®ã§ãããïŒãã§ã«è¿°ã¹ãããã«ïŒäžéšã®ãã£ãŒã«ãã§ã¯ãããã¯é䌎ïŒãšã«ããŒããªãïŒãšåŒã°ããA ^ tãŸãã¯A ^ *ïŒA ^ daggerã§ã¯ãããŸããïŒãšããŠç€ºãããŸãã å®éãããã¯ãã¯ãã«ç©ºéãã¯ããã«è¶ ããŠæ¡åŒµãããåè«ã§ã¯ããã®ãããªæŠå¿µã¯ä»»æã®ã¢ãã€ãåïŒããšãã°ãç·åœ¢ååãšããŠã³ãã«ãã£ãºã ãæã€n次å é åå€æ§äœã®åè«ïŒã«ååšããããã§ã¯é£æ¥ã¡ã€ããšåŒã°ããŸãïŒå®éãå·Šå³ã®å察空éã¯å¿ ãããåãã§ã¯ãªãããã2ã€ã®ç°ãªãAãšAãååšããå¯èœæ§ããããŸãã ãã ããããã«ã¯è€çŽ å ±åœ¹ãå«ãŸããªãããšã«æ³šæããŠãã ããã V *ã®èŠçŽ ã¯ç¢ºãã«ç·åœ¢ååfïŒV->ã¹ã«ã©ãŒã§ãããç·åœ¢ååAïŒU-> VãšUããã®ãã¯ãã«vã®å ŽåãfïŒAvïŒ=ïŒA ^ tfïŒïŒvïŒãšãªããŸãã ã fã®äœçšã¯è€çŽ å ±åœ¹ã䌎ããªãã®ã§ãA ^ tã®å®çŸ©ãå«ãŸããŸããã
çãã¯ãéåžžäœæ¥ããã¹ããŒã¹ãæã€è¿œå ã®æ§é ãã€ãŸãå®å šãªå ç©ç©ºéïŒãã«ãã«ã空éïŒã«ãããŸãã å ç©ã¯ãã«ã ãèªå°ããã®ã§ãå®å šãªå ç©ç©ºéïŒHilbertïŒã¯å®å šãªãã«ã 空éïŒBanachïŒã§ãããããã«ãã£ãŠãšã«ããŒãé䌎ã®æŠå¿µããµããŒãããŸãã éèŠãªç¹ã¯æ¬¡ã®ãšããã§ããåãªããã«ã ã§ã¯ãªãå ç©ãæã€ããšã§ãç·åœ¢ä»£æ°ã§æãçŸããå®çã®1ã€ãã€ãŸããªãŒã¹ã®è¡šçŸå®çãé©çšãããŸãã äžèšã§èšãã°ããªãŒã¹ã®è¡šçŸå®çã¯ããã«ãã«ã空éã¯ãã®å察空éãšèªç¶ã«ååã§ãããšè¿°ã¹ãŠããŸãã ãããã£ãŠããã«ãã«ã空éãæ±ãå Žåãéåžžã空éãšãã®å察ãèå¥ããåºå¥ãåé€ããŸãã ãã®èå¥ãè¡ãããšã¯ãA *ïŒV *-> U *ã§ã¯ãªãA *ïŒV-> UãšããŠã®ãšã«ããŒãé䌎ã®ããç¥ãããæŠå¿µã«å°éããæ¹æ³ã§ãã
ç¹°ãè¿ããŸãããç§ã¯ãããå®å
šã«æ£ãããšã¯æããŸããã å
ç©ç©ºéã§ã¯ãå
ç©ã¯conjïŒVïŒx V-> ScalarïŒconjïŒVïŒã䜿çšããè€çŽ ãã¯ãã«ç©ºéïŒããã®ååç·å圢åŒdot
ã§ãã ããã«ãããå®éã«VããV *ïŒãŸãã¯æè¡çã«ã¯conjïŒVïŒããV *ïŒãžã®ãããã確ç«ã§ããŸããããã¯å®éã«ãªãŒã¹ã®è¡šçŸå®çã§ãã ãã ãããšã«ããŒãé䌎äœçšçŽ ãå°å
¥ããããã«ããã¯å¿
èŠãããŸããã å®éãå
ç©dot
èªäœã§ååã§ãããç·åœ¢ååA
ã®ãšã«ããŒãé䌎ã¯æ¬¡ã®ããã«ãªããŸãã
dot(w, Av) = dot(A' w, v)
ã ããã«ã¯è€çŽ å
±åœ¹ãå«ãŸããŸãã
æ¬åœã«ããã¯çå®ã§ã¯ãããŸããã ããã§èª¬æããŠããã®ã¯å®éã«ã¯è»¢çœ®ã§ãããïŒãã§ã«è¿°ã¹ãããã«ïŒäžéšã®ãã£ãŒã«ãã§ã¯ãããã¯é䌎ïŒãšã«ããŒããªãïŒãšåŒã°ããA ^ tãŸãã¯A ^ *ïŒA ^ daggerã§ã¯ãããŸããïŒãšããŠç€ºãããŸãã [...]
@Jutho ãäŸãã°ããšã«ããŒãé䌎ã®ãŠã£ãããã£ã¢ã®ããŒãžãã芧ãã ããã
ãã¶ããæ°åŠã®ç°ãªãåéã®éã§ççŸããããŸãããïŒ
https://en.wikipedia.org/wiki/Transpose_of_a_linear_map
ç¹ã«
https://en.wikipedia.org/wiki/Transpose_of_a_linear_map#Relation_to_the_Hermitian_adjoint
åè«ã«ãããæ°ãåããªãã»ã©å€ãã®åèæç®ãäŸãã°
https://arxiv.org/pdf/0908.3347v1.pdf
https://en.wikipedia.org/wiki/Transpose_of_a_linear_map
ç¹ã«
https://en.wikipedia.org/wiki/Transpose_of_a_linear_map#Relation_to_the_Hermitian_adjoint
@Jutho ããã®ããŒãžã»ã¯ã·ã§ã³ãšäžèšã®ãªã³ã¯å ã®ããŒãžã«èšèŒãããŠããå®çŸ©ãšã®éã«ççŸã¯èŠãããŸããããŸããäžèšã«æçš¿ããå 容ãšã®ççŸãèŠãããŸããã ãã¹ãïŒ
@ Sacha0ã®ææ¡2ã«ããµã€ã³ãªã³ããŸããä»ã®ãšããã1ã€ã®åŒæ°permutedims
ã§ãåé¡ãããŸããã flip
ããã¯ãŸãã ãšæããŸãã
@ Sacha0ã®å Žåãããã解éããå¥ã®æ¹æ³ããããŸãã ç§ã¯ããã次ã®ããã«èªã¿ãŸãã
äžããããAïŒU-> Vã«å¯ŸããŠã
transposeïŒAïŒ= dualïŒAïŒ=ïŒæã
ïŒadjointïŒAïŒïŒV *-> U *
ãšã«ããŒãé䌎äœçšçŽ ïŒAïŒ=çå£ïŒAïŒ=ïŒéåžžã¯ã¡ããã©ïŒé䌎äœçšçŽ ïŒAïŒïŒV-> U
ãããŠãäž¡è
ã®é¢ä¿ã¯ã空éããå察空éïŒããªãã¡ãRiesz ...ïŒãžã®ãããã䜿çšããããšã«ãã£ãŠæ£ç¢ºã«ååŸãããŸããããã«ã¯ãè€çŽ å
±åœ¹ãå«ãŸããŸãã ãããã£ãŠããšã«ããŒãé䌎ã¯æŽ»çšãå«ã¿ãŸããã転眮ã¯å«ã¿ãŸããã
æåã®1ã€ããšã«ããŒãé䌎ãšåŒã³ããå Žåã転眮ãšã¯äœãšåŒã³ãŸããïŒ ããªãã¯ãããããªãã®èª¬æã«äœã§ãã£ãããå®éã«å®çŸ©ããŠããŸããã§ãããããªãã¯ã¡ããã©èšåããŸãã
Aã®ãšã«ããŒãé䌎ã¯ãéåžžAã§è¡šãããç·åœ¢ååA ïŒV *-> U *ã§ãã ã€ãŸããäžè¬ã«è»¢çœ®A ^ tãå察空ééã®ç·åœ¢ååã§ããã®ãšåæ§ã«ãäžè¬ã«ãšã«ããŒãé䌎ã¯å察空ééã®ç·åœ¢ååã§ãã
ã§ã¯ã転眮ãšãšã«ããŒãé䌎ã¯ãAïŒU-> VãV- > Uãããããã«å€æãã2ã€ã®ç°ãªãæ¹æ³ã§ããïŒ ããã«ã€ããŠããã«è©±ãåãããšãã§ããã°å¹žãã§ãããä»ã®å Žæã§ãããè¡ãæ¹ããããšæããŸãã ããããå®éã«ã¯ãããã«ã€ããŠãã£ãšç¥ããããšæã£ãŠããã®ã§ãç§ã«é£çµ¡ããŠãã ããã
ãŸãã httpïŒ //staff.um.edu.mt/jmus1/banach.pdfãåç §ããŠããããã空éã®ã³ã³ããã¹ãã§äœ¿çšãããé䌎äœçšçŽ ãå®éã«ã¯è»¢çœ®ã§ããããšã«ããŒãé䌎äœçšçŽ ã§ã¯ãªãããšãåç §ããŠ
Julia Baseã®å ŽåïŒç§ã¯ååž°çãªãšã«ããŒãå
±åœ¹ã«å察ããŠããŸããã ç§ã¯ããããã°ãã°æ£ããããšã«ãªãããšã«åæããŸãã èŠçŽ ã¿ã€ããNumber
ãªãå ŽåãBaseãè³¢ãããšãããããšããã¹ããã©ããã¯ããããŸããã T
ãæ°å€ã§ãã£ãŠããBaseã§ã¯ãéãŠãŒã¯ãªããå
ç©ïŒããã³é¢é£ããé䌎ã®ä¿®æ£å®çŸ©ïŒã®ã¯ããã«äžè¬çãªäœ¿çšæ³ã¯ãµããŒããããŠããŸããããŸãããµããŒããããã¹ãã§ã¯ãªããšæããŸãã ãããã£ãŠãäž»ãªåæ©ã¯ãããã¯è¡åã ã£ããšæããŸãããç¹å¥ãªç®çã®ã¿ã€ãïŒBaseãŸãã¯ããã±ãŒãžå
ïŒã¯ã¯ããã«ãžã¥ãªã¢ã³ã§ããã @ andyferrisãè¿°ã¹ãããã«ãä»ã®ãã¹ãŠã®LinAlg
ãšã¯ç°ãªããŸãã LinAlg
ã¯ã inv
ãããªåçŽãªãã®ïŒè¡åã®å æ°å解ãªã©ã¯èšããŸã§ããªãïŒã§ããããããã¯è¡åã®æŠå¿µããµããŒãããŸãã
ããããååž°çãªãšã«ããŒãå
±åœ¹ãããã«ãšã©ãŸãå ŽåïŒç§ã¯åé¡ãããŸããïŒãäžè²«æ§ãä¿ã€ããã«ã dot
ãšvecdot
ã¯èŠçŽ ã«å¯ŸããŠååž°çã«åäœããå¿
èŠããããšæããŸãã çŸåšãããã¯åœãŠã¯ãŸããŸããã dot
ã¯èŠçŽ ã«å¯ŸããŠx'y
ãåŒã³åºãïŒèŠçŽ ãè¡åã®å Žåã¯åãã§ã¯ãããŸããïŒã vecdot
ã¯dot
åŒã³åºããŸããèŠçŽ ã«ã ãããã£ãŠãè¡åã®ãã¯ãã«ã®å Žåãå®éã«ã¯ã¹ã«ã©ãŒçµæãååŸããæ¹æ³ã¯ãããŸããã çŸåšã®å®è£
ãååž°çãªadjoint
ãšå®éã«ççŸããŠããªãããšã«äººã
ãåæããå Žåã¯ãPRãæºåã§ããã°å¹žãã§ãã
transpose
ãéååž°çã«ããæ°å€ããŒã¿ãåŠçããªã人ã«ã䜿çšãããæ¹ãç°¡åãªããã§ãã è¡åãæ±ãã»ãšãã©ã®äººã¯transpose
ãšããçšèªãç¥ã£ãŠããŠããããæ¢ããšæããŸãã ååž°çãªtranspose
ãå¿
èŠãªå Žåã¯ããŸã conj(adjoint())
ããããŸãã
ããªã¢ãŒãžã¯ã @ Sacha0ãææ¡2ãé²ããŠãè©ŠããŠã¿ãå¿ èŠããããšèããŠããŸãã
ç§ã¯@ttparkerã«åŒ·ãåæããŸããååž°çé䌎ã¯éžæã§ãããæ°åŠçã«äžè²«ããå¯äžã®ãªãã·ã§ã³ã§ã¯ãããŸããã ããšãã°ã次ã®ããã«ç°¡åã«è¿°ã¹ãããšãã§ããŸãã
1 -ã LinAlg
ã AbstractVector
v
ã¯ãïŒã¹ã«ã©ãŒïŒåºåºéã¿v[1]
ã v[2]
length(v)
次å
ãã¯ãã«ã§ãã v[2]
ã...ã v[length(v)]
ã
ïŒåæ§ã«AbstractMatrix
ïŒã
ããã¯ãããããå€ãã®äººãä»ã®ã©ã€ãã©ãªããæ¥ããšããä»®å®ã§ãããåºåºãã¯ãã«ãã©ã³ã¯ãªã©ã®ãã®ãããªåçŽãªå®çŸ©ãæã€ããšã¯ãå®è£ ãåçŽã«ä¿ã€ã®ã«åœ¹ç«ã¡ãŸãã ïŒå€ãã®äººã¯ãæ°å€ç·åœ¢ä»£æ°ã¯ãããŸãæ©èœããããã«èšå®ãããåªããåºåºé¢æ°ãæã£ãŠãããšããçç±ã ãã§ãã³ã³ãã¥ãŒã¿ãŒã«å®è£ ããããšãå¯èœã§ãããšèšãã§ããããïŒ
çŸåšã®ã¢ãããŒãã¯æ¬¡ã®ãããªãã®ã§ãã
2-ããLinAlg
ãŸã§ã AbstractVector
v
ã¯ã length(v)
æœè±¡ãã¯ãã«ã®çŽåã§ãã ãŸãã Number
ãããªã¹ã«ã©ãŒåã«ååãªå®çŸ©ãå«ããŠã LinAlg
ããããæå¹ãª1次å
ç·åœ¢æŒç®å/ãã¯ãã«ã«ãªãããã«ããŸãã
ïŒãããã¯ïŒè¡åã«ã€ããŠãåæ§ã§ãã ããã¯ãMATLABãnumpyãeigenãªã©ã®ç·åœ¢ä»£æ°ã®å®è£ ãããã¯ããã«äžè¬åãããŠããããããå®çŸå¯èœã§ãããšããJuliaã®åŒ·åãªã¿ã€ã/ãã£ã¹ãããã·ã¹ãã ãåæ ããŠããŸãã
ãªãã·ã§ã³2ãæãŸãããšç§ãèããå æ¬çãªçç±ã¯ããžã¥ãªã¢ã®ã¿ã€ã/ãã£ã¹ãããã·ã¹ãã ã«ãããæŒ ç¶ãšæ¬¡ã®ãããªãã¯ããã«åºãç®æšãèšå®ã§ããããšã§ãã
3 - LinAlg
ã +
ã *
ã conj
äžã§ç·åœ¢æ§ïŒãªã©ïŒãæºãããªããžã§ã¯ãã«å¯ŸããŠæ©èœããæ±çšç·åœ¢ä»£æ°ã€ã³ã¿ãŒãã§ãŒã¹ãäœæããããšããŠããŸãã
ããã¯æ¬åœã«ã¯ãŒã«ãªç®æšã§ããïŒç§ãç¥ã£ãŠããä»ã®ããã°ã©ãã³ã°èšèª/ã©ã€ãã©ãªãã¯ããã«è¶
ããŠããŸãïŒãååž°çãªadjoint
ãš2ãå®å
šã«åæ©ä»ããŸãïŒ +
ã *
ãããŠconj
èªäœãååž°çã§ããïŒãšSacha0ã®ææ¡2ãšããªã¢ãŒãžã®æ±ºå®ã¯è¯ãéžæã§ããçç±
ããã«ã€ããŠããã«è©±ãåãããšãã§ããã°å¹žãã§ãããä»ã®å Žæã§ãããè¡ãæ¹ããããšæããŸãã ããããå®éã«ã¯ãããã«ã€ããŠãã£ãšç¥ããããšæã£ãŠããã®ã§ãç§ã«é£çµ¡ããŠãã ããã
也æ¯ããããïŒ ããã«ãªãã©ã€ã³ã§ãã£ããããã®ã楜ãã¿ã«ããŠããŸã:)ã ãã¹ãïŒ
çŽ æµãªãŸãšãã¢ã³ãã£ïŒ :)
å°ãªããšãadjoint
ïŒããã¯ããªãã®ã³ã¡ã³ãã®ãããã¯
ããããç§ãæ°žé ã«å¹³åãä¿ã€åã«ãéååž°çãªtranspose
ã«å¯ŸããæåŸã®åé¡ã1ã€ãããŸãïŒé¡ããã°ïŒã
次ã®å©ç¹ãããéååž°ç転眮ããããŸãã
æ æ°ãªflip
ã¿ã€ããŸãã¯PermutedDimsArray
ãLinAlg
ãšçžäºäœçšãããããã«ãè¿œå ã®ã³ãŒããèšè¿°ããå¿
èŠã¯ãããŸããã 転眮ãã代ããã«å転ããæ°å€è¡åãããå Žåã¯ã©ããªããŸããã ããã§ãä»ã®è¡åïŒã§ããã°BLASã䜿çšïŒã§ä¹ç®ããããšã¯ã§ããŸããïŒ
éååž°çãªtranspose
ãšååž°çãªadjoint
ã䜿çšãããšã conj(transpose(a))
ãšååž°çãªè»¢çœ®conj(adjoint(a))
ãããªéååž°çãªé䌎äœçšçŽ ãç°¡åã«äœæã§ããŸãã ããã§ãããã¹ãŠãLinAlg
ãšããŸãçžäºäœçšããŸãã
ã§ã¯ãæ¬ ç¹ã¯äœã§ããã äœãèŠããŸããã ç§ã¯ãŸã ãæ°åŠçãªæå³ã§transpose
ã䜿çšããŠãã人ã¯èª°ãããªããšããç§ã®äž»åŒµãæ¯æããŠããŸãã ãããããã以äžè°è«ããããšãã代ããã«ãå垰転眮ãå¿
èŠãŸãã¯æçšã§ãããå®éã«ã¯æ°åŠçãªè»¢çœ®ã§ããå
·äœçãªäŸã誰ãã«æããŠããããŸããïŒ ããã¯ãå®éã«adjoint
ã䜿çšããã€ããã§ãã£ãããå®æ°ãæã£ãŠããã ãã®äŸãé€å€ããŸãã ãããã£ãŠãããèªäœãè€çŽ æ°å€ã§ããããå€ãã®è¡åã§æºãããããã¯ãã«ãŸãã¯è¡åã転眮ããæ°åŠçãªçç±ãããã¢ããªã±ãŒã·ã§ã³ã
å°ãªããšãMathematicaïŒããã«ããªãã®èãã泚ãã ãšäºæ³ãããïŒã¯ååž°çãªè»¢çœ®ãè¡ããªããšèšãããšãã§ããŸãïŒ
A = Array[1 &, {2, 3, 4, 5}];
Dimensions[A] # returns {2, 3, 4, 5}
Dimensions[Transpose[A]] # returns {3, 2, 4, 5}
ç·šéïŒãã£ãšããããäžã«ã³ã¡ã³ããããŸãããããããªãã
ã ããç§ã¯æ··ä¹±ããŠããŸãã transpose
ãéååž°çã«ããå¿
èŠããããšããããªãå
å®ãªã³ã³ã»ã³ãµã¹ããã£ãããã§ã-äŸïŒ https ïŒ httpsïŒ//github.com/ JuliaLang / julia / issues / 20978ïŒissuecomment -285942526ã httpsïŒ //github.com/JuliaLang/julia/issues/20978#issuecomment -285993057ã https ïŒ //github.com/JuliaLang/julia/issues/20978#issuecomment- 348464449ãããã³https://github.com/JuliaLang/julia/pull/23424ã 次ã«ã @ Sacha0ã¯2ã€ã®ææ¡ãè¡ãããã®ãã¡ã®1ã€ã¯ååž°çãªè»¢çœ®ãæ®ããŸãããéååž°çãªflip
é¢æ°ãå°å
¥ããŸããããã¯ãïŒç§ãç¥ãéãïŒä»¥åã¯å¯èœæ§ãšããŠå®éã«æèµ·ãããŠããªãã£ãã«ããããããã匷åãªãµããŒããåŸãŸããã ã 次ã«ã @ JeffBezansonã¯ã permutedims
ã«ããã©ã«ãã®2çªç®ã®åŒæ°ãæå®ããã°ãçµå±flip
ã¯å¿
èŠãªããšææ¡ããŸããããããã匷åãªãµããŒããåŸãŠããŸãã
ãããã£ãŠãä»ã§ã¯ã transpose
ã«å¯Ÿããå¯äžã®å®éã®å€æŽã¯ããèå°è£ãã§ããå¿
èŠããããšããã³ã³ã»ã³ãµã¹ã®ããã§ããéåžžã®ãšã³ããŠãŒã¶ãŒãããããç¥ããªãããŸãã¯æ°ã«ããªããç¹å¥ãªäžããšæ æ°ãªè©äŸ¡ãšç±å¿ãªè©äŸ¡ã«é¢ããŠã§ãã ã å®éã«ç®ã«èŠããå€æŽã¯ãåºæ¬çã«ã¹ãã«ã®å€æŽã ãã§ãïŒ .'
ãæžäŸ¡ååŽãã permutedims
ã«ããã©ã«ãã®2çªç®ã®åŒæ°ãæå®ããŸãïŒã
ãããã£ãŠãã³ãã¥ããã£ã®ã³ã³ã»ã³ãµã¹ã¯éåžžã«çãæéã§ã»ãŒ180床å€åããããã§ãïŒ @ Sacha0ã®æçš¿https://github.com/JuliaLang/julia/issues/20978#issuecomment-347360279ã®é ïŒã Sachaã®æçš¿ã¯ãšãŠãéåŒã ã£ãã®ã§ãã¿ããªã®å¿ãå€ããã ãã§ãããïŒ ïŒãããããªãããã§ããã®ã§ãããã»ãã®æ°æ¥åã«ç§ãã¡å šå¡ãééã£ãŠãããšæãããŠããéãé²ãã§ããããã«èŠããçç±ãç解ãããã ãã§ããïŒ
誰ãããããææ¡ãããã©ããã¯å¿ããŸããã transpose(::AbstractMatrix{AbstractMatrix})
ïŒãããŠããããtranspose(::AbstractMatrix{AbstractVector})
ãïŒãååž°çã«ããããã§ãªããã°transpose
éååž°çã«ããããšãã§ããŸããïŒ ããã¯ãã¹ãŠã®ããŒã¹ãã«ããŒããããã§ããã tranpose
ãååž°çã«ãããä»ã®ãŠãŒã¹ã±ãŒã¹ã¯èããããŸããã
ãããã£ãŠãã³ãã¥ããã£ã®ã³ã³ã»ã³ãµã¹ã¯éåžžã«çãæéã§ã»ãŒ180床å€åããããã§ãïŒ @ Sacha0ã®æçš¿ïŒ20978ïŒã³ã¡ã³ãïŒã®é ïŒã Sachaã®æçš¿ã¯ãšãŠãéåŒã ã£ãã®ã§ãã¿ããªã®å¿ãå€ããã ãã§ãããïŒ ïŒãããããªãããã§ããã®ã§ãããã»ãã®æ°æ¥åã«ç§ãã¡å šå¡ãééã£ãŠãããšæãããŠããéãé²ãã§ããããã«èŠããçç±ãç解ãããã ãã§ããïŒ
ç§ããšãŠãéåŒã ã£ããðã ããªããèŠãŠããã®ã¯ãã³ã³ã»ã³ãµã¹ãå®éã«ã¯åœ¢æãããŠããªãã£ããšããããšã§ãã ããããïŒ1ïŒçŸç¶ãæ¯æããããæ¶èã®ããã«è°è«ããæ€éããåå è ã¯ãæèŠãè¡šæããããã«æ»ã£ãã ïŒ2ïŒçŸç¶ããã®è±åŽãå®éã«äœã䌎ããïŒãããŠããããªãªãŒã¹ã®èæ ®äºé ãšã©ã®ããã«é¢ä¿ãããïŒãèæ ®ããªãã£ãä»ã®åœäºè ã¯ãçŸç¶ãæ¯æãããã匷ãæèŠã圢æãããã®æèŠãè¡šæããã
ãã®è°è«ã¯ç¶ç¶äžã§ãããŠããããšãèæ ®ããŠãã ããäžã€ã®åœ¢æ ãŸãã¯å¥ã®2014幎以æ¥ãgithubã®äžã®ããããŠãããããã以åã®ãªãã©ã€ã³ã é·æçãªåå è ã«ãšã£ãŠããã®ãããªè°è«ã¯ç²ãæãŠãŠåšæçã«ãªããŸãã ãã®è°è«ã«åå ãã以å€ã«æå³ã®ããä»äºããããŸã---ã³ãŒããæžãããšã®ããã«ããã楜ããã§ã---ãã®çµæããããã®é·æåå è ã®éã§æžå°ãçããŸãã ãã®çµæãäŒè©±ã¯ããæéãŸãã¯å¥ã®æéã«åã£ãããã«èŠããŸãã å人çã«ã¯ãç§ã¯ãã®æžå°ã®ãããå€ã«è¿ã¥ããŠããã®ã§ããã®è°è«ã«åŸäºãç¶ããã®ã§ã¯ãªããä»ã¯ã³ãŒããæžãããšã«éäžããã€ããã§ãã ã©ããããããšãããããŸããïŒ :)
AbstractArrayã®éååž°ç転眮ãšctransposeã«è³æ祚ãæããŸããã©ã¡ãããT <ïŒAbstractArrayã§ããAbstractArray {T}ã§ååž°çã§ãã
ååž°çãªåäœããæ£ãããå Žåãããããšã«åæããŸãããã®è³ªåã¯ãããã±ãŒãžã䜿çšããã³éçºããŠãã人ã«ãšã£ãŠãæå°éã®é©ãã§æ£ããåäœãå®çŸããæ¹æ³ã§ãããšèããŠããŸãã
ãã®ææ¡ã§ã¯ãã«ã¹ã¿ã åã®ååž°ç転眮åäœã¯ãªããã€ã³ã§ããåãAbstractArrayã«ããããé©åãªã¡ãœãããå®çŸ©ããããšã§ãªããã€ã³ããŸãã
Base.transpose(AbstractArray{MyType})
ãŸãã¯Base.transpose(AbstractArray{T}) where T<: MyAbstractType
ã
ååž°ç転眮ïŒè³ªåããã«ååž°ããã ãïŒã®ããã¯ã¿ã€ãã³ã°æŠç¥ã¯ãäžèšã®ããã«ããã€ãã®é©ããçã¿åºããšæããŸãã å¥åã®ctransposeãšadjointããŸãã¯conjadjointãšflipã®ãããªããè€éãªææ¡ãå°å
¥ãããšããŠãŒã¶ãŒã¯ãããã«ééããŠãããã䜿çšããããšããããã±ãŒãžã¡ã³ãããŒã¯ããããã¹ãŠããµããŒãããããšããŸãã
æ°ããææ¡ã§ã¯ãµããŒããé£ãããã®ã®äŸãšããŠãnormalãtransposeãctransposeãããã³conjé
åã¯ãã¹ãŠãReshapeArrayããã³SubArrayãã¥ãŒãšçžäºéçšãããã¥ãŒïŒãŸãã¯é
延è©äŸ¡ïŒãæã€ããšãã§ããå¿
èŠããããŸãã ïŒããããããã©ã«ãã§ãã¥ãŒãçæããã®ãã @view
ã䜿çšããå Žåã«ã®ã¿çæãããã®ãã¯ããããŸãããïŒããã¯ããã©ã°ãNãã䜿çšããA*_mul_B*
äžããšäœã¬ãã«ã®BLASåŒã³åºãã®äœæ¥ã«æ¥ç¶ããŸããä»ã®å Žæã§èª¬æãããŠããããã«ãé«å¯åºŠã¢ã¬ã€ã®å Žåã¯ãTãããã³ãCãã ãããã¯ã normal
ã transpose
ã ctranspose
ãããã³conj
ãåŠçããå Žåã«æšè«ãããããªããŸã
察çã®ç«å Žã§ã BLASèªäœã¯ãéåžžã®å Žåã¯ãNãã転眮ã®å Žåã¯ãTããctransposeã®å Žåã¯ãCãã®ã¿ããµããŒãããæ¥ç¶è©ã®ãã©ã°ããªãããšã«æ³šæããŠãã ãããããã¯ééãã ãšæããŸãã
æåŸã«ãé«æ¬¡å
ã®é
åãšåœ¢ç¶å€æŽãšã®äžè²«æ§ãä¿ã€ããã«ã転眮ãšctransposeã®é©åãªäžè¬åã¯ããã¹ãŠã®æ¬¡å
ãéã«ããããšã ãšæããŸãã
transposeïŒA :: Array {Tã3}ïŒ= permutedimsïŒAãïŒ3ã2ã1ïŒïŒã
也æ¯ïŒ
å®éã«ä»äºãããŠãã ãã£ãŠããæ¹ã ã«å¿ããæè¬ããŠããŸãã @andyferrisãã¹ãããã¢ããããŠãããå®è£ ãããŸã§ãããŸãã«ãé·ãéè°è«ãããŠããã®ã¯ããã¯ãã«é䌎/転眮ã§ãïŒãã ããååž°çãªåŽé¢ã¯ãããŸããïŒãããã¯éåžžã«ããŸãæ©èœããŸãã åæ§ã«ãé åã³ã³ã¹ãã©ã¯ã¿ãŒã®ç¶ç¶çãªåèšèšã«ã倧ãã«æè¬ããŸãã ãã®ãã¹ãŠã«èŠªæãç«ãŠãŸãã
ããã¯èšã£ãŠããè¡åã®è»¢çœ®ãšé䌎/ ctransposeã¯ãç¹ã«ååž°çãªåŽé¢ã«ã€ããŠã¯ããŸãè°è«ãããŸããã§ãããããã¯ã httpsïŒ//github.com/JuliaLang/julia/pull/7244ã§åäžã®åæ©ä»ããããã¯è¡åãšããŠã»ãšãã©éãã«çŽ¹ä»ãããŸãã
ãããã®è°è«ã§ã¯ããã€ãã®å¥ã ã®ããšãèµ·ãã£ãŠããŸãããä»ãè¿ éã«å®è¡ã§ããèšç»ãå¿ èŠã«ãªã£ãŠããŸãã
LinAlg
ããããã¯è¡åïŒããã³ãããšããŸããã¯ãªæ§é ïŒããµããŒããã䟡å€ããããã©ããã«ã€ããŠèª¬æããŸããã å®è£
ã®éžæè¢ã¯æ¬¡ã®ãšããã§ããååž°çãªãã®ã¯ãŸã£ãããããŸããïŒ +
ã *
ã conj
ã¯ãJuliaã®ãžã§ããªãã¯é¢æ°ã®æ§è³ªã§ããããïŒããã¹ãŠãååž°çã«ïŒçŸç¶ïŒããŸãã¯ãèŠçŽ ãååž°ç·åœ¢ä»£æ°ãå®è¡ããããã¹ã«ã©ãŒãšããŠæ±ããããã«ã€ããŠãããçš®ã®ã¿ã€ããã§ãã¯ãŸãã¯ç¹æ§ãè©Šè¡ããŸããtranspose
ã flip
ãççž®ãããpermutedims
æ§æããããŸãïŒPRã¯ãå®è£
ããæåãæãå°ãªããšããçç±ã ãã§æåã«éä¿¡ããããã®ã§ãããããããæå³ããããŸããä»ã®ããšãè¡ãå ŽåïŒãèŠçŽ ãååž°ç転眮ãè¡ãå¿
èŠããããã©ããã®ããçš®ã®åãã§ãã¯ãŸãã¯ç¹æ§ïŒããããtranspose(x::Any) = x
...ãåå°å
¥ããããšãããããŸãïŒãx' * y -> Ac_mul_B(x, y)
ãããªå¥åŠãªåäœãããŸãããããã¯å°ãç£èŽ
ã§ãããv1.0ã«ã¯çæ³çã«ã¯ååšããŸããã ããã¯ãé«éBLASïŒäœåãªã³ããŒãªãïŒããµããŒãã§ããããã«ãªããŸã§å®çŸå¯èœãšã¯èŠãªãããŠããŸããããããã£ãŠãã¬ã€ãžãŒãããªãã¯ã¹ã®è»¢çœ®ãšé䌎ã§ããLinAlg
ã®ã³ãŒãã¯éåžžã«å€§ãããäœå¹Žã«ãããã£ãŠæ§ç¯ãããŠããŸãã è¡åã®ä¹ç®ã®ãããªå€ãã®ãã®ã¯ãããããæ°ããbroadcast
ãããªãã£ã¹ãããã·ã¹ãã ã䜿çšããŠãããç¹æ§ã«é©ãããã®ã«ãªãã¡ã¯ã¿ãªã³ã°ããããšãã§ããŸãã ããã¯ãé©åãªé
åïŒã¹ãã©ã€ãè¡åã®å
±åœ¹å圢æãããajdointedãã¥ãŒã®PermuteDimsArrayãèããŠããŸãïŒãBLASã«ç°¡åã«éä¿¡ã§ããå Žæã ãšæããŸãã ãã ããããã«ãã£ãŠv1.0ãäœæãããããšã¯ãªããã³ãŒãã倧å¹
ã«æªåãããããšãªãããã©ãŒãã³ã¹ã®äœäžãåé¿ããããšããŠããŸãã Sachaãææããããã«ïŒãããŠç§ãçºèŠããŠããããã«ïŒãèŠçŽ ã«å¯ŸããŠããŸããŸãªåäœïŒååž°çé䌎ãååž°ç転眮ã掻çšãäœããªãïŒãæã€è»¢çœ®ãã¥ãŒããããšãè€éããå¢ããç©äºãæ©èœããç¶ããããã®æ°ããæ¹æ³ããããããããŸããã§ããv1.0ãèšèªãããçšåºŠå®å®ããããã®ãšèãããšãããæå³ã§ãåäœãå€æŽããããã®æåªå
äºé
ã¯3çªç®ã®ãã®ã§ãã èšèªïŒããŒãµãŒãå«ãïŒãæãå®å®ããŠããå¿
èŠãããã次ã«Base
ã次ã«stdlibïŒ LinAlg
ãå«ãŸããå Žåãšå«ãŸããªãå ŽåããããŸãããã»ãŒç¢ºå®ã«å«ãŸãããšæããŸãïŒ BLAS
ã Sparse
ãªã©ïŒã ããã¯ãŠãŒã¶ãŒïŒäž»ã«ã©ã€ãã©ãªéçºè
ïŒã«å®éã«ã¯åœ±é¿ãäžããªãå€æŽãªã®ã§ãããã§äººã
ã®æèŠãç°ãªã£ãŠããŠãé©ããªãã§ãããã
ã¢ã³ãã£ã«ã¹ãããïŒ :)
ããã§ãããªããã°ãªããªãããšã¯ãããã©ã«ãã§adjoint
ãštranspose
æ æ°ã«ããããšã ãã ãšæããŸããïŒ
ããã¯ä»ããéããããšãã§ããŸããïŒ
次ã¯ïŒãã¹ã«ã©ãŒè»¢çœ®ãçå£ã«åãæ¢ããã
ããããçå£ã«ãPDEãœã«ããŒã§äœ¿çšãããããŸããŸãª3D転眮ãšãã³ãœã«ä¹ç®ãæå®ããããã®åªããã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšã§ããŸããïŒ ã¡ãã£ãšæ·±å»ã§ããããã®çæ°ã®æ¬¡ã®å埩ãžã®OPã«ãªãããšãã§ãããã©ããã¯ããããŸããã
çªå·
:)
PDEãœã«ããŒã§äœ¿çšãããããŸããŸãª3D転眮ããã³ãã³ãœã«ä¹ç®ãæå®ããããã®åªããã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšã§ããŸããïŒ
ééããªãããã±ãŒãžã®è¯ãäž»é¡ã®ããã§ãã
ããŸããŸãª3D転眮ããã³ãã³ãœã«ä¹ç®ãæå®ããããã®åªããã€ã³ã¿ãŒãã§ã€ã¹
TensorOperations.jlã¯ãããã§å¿ èŠãªããšãå®è¡ããŸãããïŒ ïŒãã®ã¬ãã«ã§ã¯ããåªããã€ã³ã¿ãŒãã§ã€ã¹ããšã¯ã TensorOperationsã®æ§æãããç°¡æœã«ã³ãŒããèšè¿°ããã®ãå°ãé£ããããã³ãœã«ãããã¯ãŒã¯å³ã®ãããªãã®ãæå³ããããšã«æ³šæããŠãã ããïŒã
ãããTensorOperations.jlã¯ããããã§ãã å°ãåè«ã§ããããå¿ èŠãªãã®ãæã«å ¥ããŸããðã
æãåèã«ãªãã³ã¡ã³ã
ïŒOTïŒå€§æåãåãã6éšæ§æã®ããã·ãªãŒãºã®æ¬¡ã®èšäºã§ããã7ãã³ãœã«ãçå£ã«åãæ¢ãããããšããã§ã«æ¥œãã¿ã«ããŠããŸã...ïŒ