ํ์ฌ 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
๋๋ "adjoint"๊ฐ ์ฌ๊ท ์ ์ด๊ธฐ๋ฅผ ์ํ๋ค๋ ๊ฒ์ ๊ฝค ์ ์ดํด๋๊ณ ์์ต๋๋ค. ๋๊ธฐ๋ฅผ ๋ถ์ฌํ๋ ์๋ 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
์ ๋น ์ซ์ (๋๋ ๋ ๊ตฌ์ฒด์ ์ผ๋ก๋ ๋น ์ค์ , ๋น -๋ณต์กํ ๊ฐ).
[์ด๋ฒ ํธ๋ ฯโ ํธ ์๋ฆฌ์ฆ์ ๋ ๋ฒ์งธ์ ๋๋ค.]
์ด์ ํธ์ ๋ ผ๋ฆฌ์ ํ๊ณ์ ... ๐
๋ฐฐ์ด์์ ์์ ๋จ์๋ก ์๋ํ๋ 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 , ๋น์ ์ ์ฐฉ๊ฐ์ ๋๋ค. adjoint์์ด ๋ฒกํฐ ๊ณต๊ฐ์์ ๋ณต์กํ conjugation์ ๊ฐ์ง ์ ์์ต๋๋ค. adjoint๋ ๋ณต์กํ ๋ฒกํฐ ๊ณต๊ฐ์ด ์๋ ํ๋ฒ ๋ฅดํธ ๊ณต๊ฐ ๋ฑ์ ํ์๋กํ๋ ๊ฐ๋ ์ ๋๋ค.
๋ํ Hilbert ๊ณต๊ฐ์ด ์๋๋ผ๋ ๋ณตํฉ ์ผค๋ ๋ ์ธ์ ๊ณผ ๊ตฌ๋ณ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด โโฟ์์๋ ๋ณต์ ์ด ๋ฒกํฐ์ ์ผค๋ ๋ ๋ ๋ค๋ฅธ ๋ณต์ ๋ฒกํฐ์ด์ง๋ง adjoint๋ ์ ํ ์ฐ์ฐ์ ( "ํ ๋ฒกํฐ")์ ๋๋ค.
(๋ณต์กํ ํ์ฉ์ conj(v)*v
๊ณฑํ ์ ์์์ ์๋ฏธํ์ง ์์ต๋๋ค !)
๋ฒกํฐํ ๋ conj
์ค๋จ์ ๋๋จธ์ง ์ ์๊ณผ ๋ฌด๊ดํฉ๋๋ค. ๋ฒกํฐ ๊ณต๊ฐ์์ ๋ณต์กํ ์ผค๋ ์ ์ ์์ ๋ํ ๋ช ๊ฐ์ง ์ฐธ์กฐ๋ฅผ ์ ๊ณต ํ ์ ์์ต๋๊น?
https://en.wikipedia.org/wiki/Complexification#Complex_conjugation
(์ด ์น๋ฃ๋ฒ์ ๋ค์ ๊ณต์์ ์ด์ง๋ง "๋ณตํฉ ์ผค๋ ํ๋ ฌ"๋๋ "๋ณตํฉ ์ผค๋ ๋ฒกํฐ"๋ฅผ ๊ฒ์ํ๋ฉด ์๋ง์ ์ฉ๋๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.)
๋ณตํฉ ๋ฒกํฐ๋ฅผ ์ผค๋ ๋ฒกํฐ์ ๋งคํํ๋ ๊ฒ์ด (์ง๊ธ conj
๊ฐํ๋ ์ผ) ์ผค๋ ์ฝ ๋ฒกํฐ ( '
๊ฐํ๋ ์ผ)์ ๋ค๋ฅธ ์ค์ํ ์์
์ด๋ผ๋ฉด ํ์คํ conj
์ ์งํ ์ ์์ต๋๋ค conj
์ adjoint
๋ ์ค์นผ๋ผ์์๋ ๋์ํ์ง๋ง ๋ฐฐ์ด์์๋ ๋ค๋ฅด๊ฒ ๋์ํ๊ธฐ ๋๋ฌธ์ ๊ตฌ๋ณ๋ฉ๋๋ค.
์ด ๊ฒฝ์ฐ conj(A)
conj
๋ ๊ฐ ์์์ ๋ํด adjoint
ํธ์ถํด์ผํฉ๋๊น? ๋ณต์์๋ฅผ 2x2 ํ๋ ฌ ์์ ๋ก ํํํ๋ฉด conj(A)
๋ conj
ํธ์ถํ๋ ๋์ ์ค์ ๋ก ๊ฐ ์์์์ adjoint
๋ฅผ ํธ์ถํด์ผ ํจ์ ์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด adjoint
, conj
๋ฐ conj.
๋ชจ๋ ๋ค๋ฅธ ์์
์ด ์ํ๋ฉ๋๋ค.
adjoint
: i
๋ฐ j
์ธ๋ฑ์ค๋ฅผ ๊ต์ฒดํ๊ณ ์์์ ๋ํด adjoint
์ ์ฌ๊ท ์ ์ผ๋ก ๋งคํํฉ๋๋ค.conj
: ์์ ์์ adjoint
๋งคํ.conj.
: ์์ ์์ conj
๋งคํํฉ๋๋ค.conj(A)
๋ ๊ฐ ์์์์ conj
๋ฅผ ํธ์ถํด์ผํฉ๋๋ค. 2x2 ํ๋ ฌ๋ก ๋ณต์์๋ฅผ ํํํ๋ ๊ฒฝ์ฐ ๋ณต์กํ ๋ฒกํฐ ๊ณต๊ฐ์ด ๋ค๋ฆ
๋๋ค.
์๋ฅผ ๋ค์ด, ๋ฒกํฐ ์ ํฉ์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ์ ์ค์ ํ๋ ฌ์ ๊ณ ์ ๊ฐ ๋ถ์์ ์์ต๋๋ค. ๊ณ ์ ๊ฐ ๊ณผ ๊ณ ์ ๋ฒกํฐ ๋ ๋ณต์ ์ ํฉ ์์ผ๋ก ์ ๊ณต๋ฉ๋๋ค. ์ด์ 2 ์ฐจ์ ๋ฐฐ์ด๋ก ํํ๋๋ ๋ธ๋ก ํ๋ ฌ์ด A
์ด๊ณ , 2 ์ฑ๋ถ ๋ฒกํฐ์ 1 ์ฐจ์ ๋ฐฐ์ด๋ก ํํ๋๋ ์ฐจ๋จ ๋ฒกํฐ v
์ ์์ฉํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ ๋ํ ๊ณ ์ ฮป
์ A
๊ณ ์ ๋ฒกํฐ์ v
, ์ฐ๋ฆฌ๊ฐ ๊ธฐ๋ํ๋ ๋ ๋ฒ์งธ ๊ณ ์ ์น conj(ฮป)
๊ณ ์ ๋ฒกํฐ์ conj(v)
. conj
adjoint
์ฌ๊ท ์ ์ผ๋ก ํธ์ถํ๋ฉด ์๋ํ์ง ์์ต๋๋ค.
(ํ๋ ฌ์ ๊ฒฝ์ฐ์๋ adjoint๋ conjugate-transpose์ ๋ค๋ฅผ ์ ์์ต๋๋ค. ์๋ํ๋ฉด ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ์์ผ๋ก ์ ์ ๋ ์ ํ ์ฐ์ฐ์ ์ Matrix
๊ฐ ์ฃผ์ด์ง๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฃผ์ด์ง ํ์ค ๋ด๋ถ ๊ณฑ์ ํด๋นํ๋ adjoint๋ฅผ ์ทจํด์ผํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. dot(::Vector,::Vector)
. ๊ทธ๋ฌ๋ ์ผ๋ถ AbstractMatrix
(๋๋ ๊ธฐํ ์ ํ ์ฐ์ฐ์) ์ ํ์ด adjoint
๋ฅผ ์ฌ์ ์ํ์ฌ ๋ค๋ฅธ ์์
์ ์ํ ํ ์๋ ์์ต๋๋ค.)
๋ฐ๋ผ์ 3d ๋ฐฐ์ด์ ์ ํ ์ฐ์ฐ์๋ก ์ ์ํ์ง ์์๊ธฐ ๋๋ฌธ์ ๋์์ ์ผ๋ก ํฉ๋ฆฌ์ ์ธ adjoint(A)
๋ฅผ ์ ์ํ๋ ๋ฐ ์ด๋ ค์์ด ์์ต๋๋ค (์ : ๋ด์ฅ ๋ array3d * array2d
์ฐ์ฐ์ด ์์). . adjoint
๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์นผ๋ผ, 1d ๋ฐ 2d ๋ฐฐ์ด์๋ง ์ ์๋์ด์ผํฉ๋๊น?
์
๋ฐ์ดํธ : ์ค, ์ข์์ : 3D ๋ฐฐ์ด์ ๋ํด์๋ ctranspose
์ ์ํ์ง ์์ต๋๋ค. ๊ณ์ํด.
(OT : ์ ๋ ์ด๋ฏธ ์ฑ๊ณตํ 6 ๋ถ์ ๋ฏธ๋ ์๋ฆฌ์ฆ์ ๋ค์ ํธ์ธ "7- ํ ์ ์ง์งํ๊ฒ ๋ฐ์๋ค์ด ๊ธฐ"๋ฅผ ๊ณ ๋ํ๊ณ ์์ต๋๋ค ...)
2x2 ํ๋ ฌ๋ก ๋ณต์์๋ฅผ ํํํ๋ ๊ฒฝ์ฐ ๋ณต์กํ ๋ฒกํฐ ๊ณต๊ฐ์ด ๋ค๋ฆ ๋๋ค.
๋๋ ์ด๊ฒ์ ๋ฐ๋ฅด์ง ์๋๋ค โ ๋ณต์์์ 2x2 ํ๋ ฌ ํํ์ ๋ณต์กํ ์ค์นผ๋ผ๋ฅผ ์์๋ก ๊ฐ๋ ๊ฒ๊ณผ ๋๊ฐ์ด ๋์ํด์ผํ๋ค. ์๋ฅผ ๋ค์ด ์ฐ๋ฆฌ๊ฐ ์ ์ํ๋ค๋ฉด
m(z::Complex) = [z.re -z.im; z.im z.re]
๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์์์ ๋ณต์กํ ๋ฒกํฐ v
๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ฉด์ด ์ ์์ด ์ ์ง๋๊ธฐ๋ฅผ ์ํฉ๋๋ค :
conj(m.(v)) == m.(conj(v))
์๋ฅผ ๋ ์์ธํ ์ค๋ช
ํ๊ณ ์ด๋ฏธ m
์ (๊ณผ) ํต๊ทผ ํด์ผํ๋ '
์ (๊ณผ) ๋น๊ตํ์ง๋ง https://github.com/JuliaLang/julia/ ๋๋ฌธ์ ํ ์ ์์ต๋๋ค. 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)
ํธ๋ฆญ์ด ๋ณต์กํ ํ๋ ฌ๋ก ํ์ฅ ๋ ๋, ์คํํธ๋ผ์ ๋ฐฐ๊ฐ๋ ์๋ฅผ ๋ค์ด ๋ฐ๋ณต์ ์ธ ๋ฐฉ๋ฒ์ ๋ํด ๊น๋ค๋ก์ด ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ต๋๋ค (์ : ์ด ๋ฌธ์ ์ฐธ์กฐ).
๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ 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
์ ๋ฐฐ์ด์ ๋ํ ๋ฉ์๋๊ฐ ์๋์ง ๋๋ ์ค์นผ๋ผ์ ๋ํด์๋ง ๋ฉ์๋๊ฐ ์๋์ง ์ฌ๋ถ๋ ๋์์ธ ์ ํ์
๋๋ค. ๊ด์ฐฎ์ ๋ณด์ฌ? (๋ณต์์ -as-2x2- ํ๋ ฌ ์์ ์ ๋ํ ์คํฐ๋ธ์ ์์ ์ ์ด๊ฒ์ด ๊ณ์๊ฐ ๊ณต์์ ์ผ๋ก / ์ค์ ๋ก ์ค์ ์ธ ๋ฒกํฐ ๊ณต๊ฐ์ด๋ฏ๋ก ์ฌ๊ธฐ์์๋ ์ผค๋ ๊ฐ ํจ๊ณผ๊ฐ ์๋ค๋ ๊ฒ์
๋๋ค.)adjoint
์ ์ ํ ๋์๋ฅผ ๋ฐ์ ํ๊ฒ ํฌํจํ๋ ๋ง์ ์ค์ํ ์์ญ์์ ๊ธฐ๋ณธ์ด๋๋ ๋์์ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค (๋ฌผ๋ฆฌํ์์ ํฐ ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ํจ๊ป ๋ชจ๋ 1 ๊ณผ 2 ๋ฐ 3 ์ฐธ์กฐ). adjoint
๊ฐ ์ถ๊ฐ๋๋ฉด ๊ณ ๋ ค์ค์ธ ์์
์ ๋ํ ํค์๋ ์ธ์๋ฅผ ํ์ฉํด์ผํฉ๋๋ค. ๋ฒกํฐ ๊ณต๊ฐ / ๊ธฐ๋ฅ ๋ถ์์์์ด ์์
์ ์ผ๋ฐ์ ์ผ๋ก ๋ด๋ถ ๊ณฑ์ ์ํด ์ ๋๋๋ฏ๋ก ๋์ ํค์๋ ์ธ์๊ฐ ํ์์ด ๋ ์ ์์ต๋๋ค. Julia์ ์กฐ์ฎ๊น์ ์ํด ์ค๊ณ๋ ๊ฒ์ด ๋ฌด์์ด๋ ์ด๋ฌํ ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ์ ์ถฉ๋์ ํผํด์ผํฉ๋๋ค. ๊ทธ๋์ adjoint
๋ ์ฝ๊ฐ ๋์ @felixrehren , ํค์๋ ์ธ์๋ฅผ ์ฌ์ฉํ์ฌ adjoint๋ฅผ ์ ๋ํ๋ ๋ด๋ถ ์ ํ์ ์ง์ ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ฒกํฐ์ ๋ํด dot
์ ์๋ฏธ๋ฅผ ๋ณ๊ฒฝํ๋ ค๋ ๊ฒฝ์ฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค๋ฅธ ์ ํ์ ๋์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ด ์ ํธ๋๋ ์กฐ๊ธ ๋ ๊ฐ๋จํฉ๋๋ค.
conj
๊ทธ๋๋ก (์์ ๋ณ) ์ ์งํฉ๋๋ค.a'
๋ฅผ adjoint(a)
a'
ํด๋นํ๋๋ก ๋ง๋ค๊ณ ํญ์ ์ฌ๊ท ์ ์ผ๋ก ๋ง๋ญ๋๋ค (๋ฐ๋ผ์ adjoint
๊ฐ ์์์ ๋ํด ์ ์๋์ง ์์ ๋ฌธ์์ด ๋ฐฐ์ด ๋ฑ์์๋ ์คํจํฉ๋๋ค).a.'
๋ฅผ transpose(a)
์ ๋์์ํค๊ณ ์ ๋ ์ฌ๊ท ์ ์ด ์ง ์๊ฒ ๋ง๋ค๊ณ (๋จ์ง permutedims
), ๋ฐ๋ผ์ ์์์ ์ ํ์ ๋ฌด์ํ์ญ์์ค.๋น ์ฌ๊ท adjoint
๋ํ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์ค์ ๋ก ๋ณด์ด์ง ์์ต๋๋ค. ์คํธ๋ ์นญ์ผ๋ก ์ฌ๊ท transpose
๋ํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์์ํ ์ ์์ง๋ง a.'
์ transpose(a, recur=true)
๋ก ๋ณ๊ฒฝํด์ผํ๋ ๋ชจ๋ ์์ฉ ํ๋ก๊ทธ๋จ์์ ๋ค๋ฅธ ํจ์ transposerecursive(a)
ํธ์ถํ์ญ์์ค. ์ฐ๋ฆฌ๋ Base์์ transposerecursive
๋ฅผ ์ ์ ํ ์ ์์ง๋ง, ์ด๊ฒ์ด ์ค์ ๋ก ํ์ํ์ง ๊ธฐ๋ค๋ ค์ผ ํ ์ ๋๋ก ๋๋ฌผ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์ด๊ฒ์ ๋จ์ํ๊ฒ ์ ์งํ๋ ๊ฒ์ด ์ฌ์ฉ์ (๋ฐ ๊ตฌํ)์๊ฒ ๊ฐ์ฅ ๊ฐ๋จํ๊ณ ์ ํ ๋์ ์ธก๋ฉด์์ ์ฌ์ ํ ๋ฐฉ์ด ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ง๊ธ๊น์ง (๋๋ถ๋ถ์) ์ ํ ๋์ ๋ฃจํด์ ํ์ค ๋ฐฐ์ด ๊ตฌ์กฐ์ ํ์ค ๋ด๋ถ ๊ณฑ์ ์๋นํ ๋ฟ๋ฆฌ๋ฅผ๋๊ณ ์์ต๋๋ค. ํ๋ ฌ์ด๋ ๋ฒกํฐ์ ๊ฐ ์ฌ๋กฏ์ "ํ๋"์ ์์๋ฅผ ๋ฃ์ต๋๋ค. ํ๋ ์์์ ๊ฒฝ์ฐ +
, *
๋ฑ ๋ฐ conj
์๋ ์ ๊ฒฝ ์ฐ์ง๋ง transpose
๋ ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค . ๋น์ ์ ํ๋๋ 2 ร ์ค์ ๋งคํธ๋ฆญ์ค์ฒ๋ผ ์กฐ๊ธ ๋ณด์ด์ง๋ง์์ ๋ณ๊ฒฝํ๋ ํน๋ณํ ๋ณต์กํ ํํ ์ธ ๊ฒฝ์ฐ conj
๊ฐ์ ์์ฑ์ด๋ค -์ OK ๊ฒ์ ๋ค์, conj
. conj
์๋์์ ๋ณ๊ฒฝ๋์ง ์๋ 2x2 ์ค์ AbstractMatrix
์ผ ๊ฒฝ์ฐ, ํ๋ ฌ์ ๊ทธ๋ฌํ ์์๋ adjoint ์๋์์ ๋ณ๊ฒฝ ๋์ง ์์์ผํฉ๋๋ค ( @stevengj ๋ ์ค๋ช
ํ ์์๋ ๊ฒ๋ณด๋ค
์ด์จ๋ , 2x2 ๋ณต์กํ ์์ ๋ ๋์๊ฒ ์ฝ๊ฐ์ ๋ถ์ ์ฒญ์ด๋ฅผ ๋๋๋๋ค. ์ฌ๊ท ํ๋ ฌ ๋์์ ์ค์ ์์ธ์ ๋ธ๋ก ํ๋ ฌ์์ ์ ํ ๋์๋ฅผ ์ํํ๋ ์ง๋ฆ๊ธธ์ด์์ต๋๋ค. ์ด ํน๋ณํ ๊ฒฝ์ฐ๋ฅผ ์ ์ ํ๊ฒ ๊ด๋ฆฌํ๊ณ ๊ธฐ๋ณธ ์์คํ ์ ๋จ์ํํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
๊ทธ๋์ ๋ด "๊ฐ๋จํ"์ ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
conj
๊ทธ๋๋ก ์ ์ง (๋๋ AbstractArray
s์ ๋ํ๋ณด๊ธฐ๋ก ์ค์ )a'
๋ฅผ (a')[i,j] == conj(a[j,i])
์ ๊ฐ์ ๋น์ฌ ๊ท์ ๋ทฐ๋ก ๋ง๋ญ๋๋ค.a.'
๋ฅผ (a.')[i,j] == a[j,i]
์ ๊ฐ์ ๋น์ฌ ๊ท์ ๋ทฐ๋ก ๋ง๋ญ๋๋ค.BlockArray
์ ํ์ ๋์
ํ์ญ์์ค ( Base
์์ ๋๋ ์ ์ง์๋๋ ํจํค์ง์์). ์ด ๋ชฉ์ ์ ์ํด Matrix{Matrix}
๋ณด๋ค ํจ์ฌ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ์ง๋ง ๋๊ฐ์ด ํจ์จ์ ์
๋๋ค.์ด๋ฌํ ๊ท์น์ ์ฌ์ฉ์๊ฐ ์์ฉํ๊ณ ๊ตฌ์ถ ํ ์์์๋งํผ ๊ฐ๋จ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ถ์ - @StefanKarpinski ์ค์ฉ์ ์ธ ์ด์ ๋ก ์ฌ๊ท์ ๋ํ ๋ถ์ธ ํค์๋ ์ธ์๋ ์ ์น์ ๋ํ ๋ทฐ์ ํจ๊ป ์๋ํ์ง ์์ต๋๋ค. ๋ทฐ ์ ํ์ ๋ถ์ธ ๊ฐ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
๋ํ ๋ค๋ฅธ ๊ณณ์์ ์ธ๊ธํ์ง๋ง ์์ ์ฑ์ ์ํด ์ฌ๊ธฐ์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค. ์ฌ๊ท ์ ์น ๋ทฐ์๋ ๋ํํ๋ ๋ฐฐ์ด๊ณผ ๋น๊ตํ์ฌ ์์ ์ ํ์ด ๋ณ๊ฒฝ ๋ ์ ์๋ค๋ ์ฑ๊ฐ์ ์์ฑ์ด ์์ต๋๋ค. ์ : transpose(Vector{Vector}) -> RowVector{RowVector}
. ๋ฐํ์ ํจ๋ํฐ์์ด RowVector
๋ํด์ด ์์ ์ ํ์ ๊ฐ์ ธ ์ค๊ฑฐ๋ ์ถ๋ก ์ ํธ์ถํ์ฌ ์ถ๋ ฅ ์ ํ์ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ์ง ๋ชปํ์ต๋๋ค. ํ์ฌ ๋์ (์ถ๋ก ํธ์ถ)์ด ์ธ์ด ๊ด์ ์์ ๋ฐ๋์งํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฃผ์ : ์ฌ์ฉ์๊ฐ conj
๋ฅผ ์ ์ํ์ฌ ๋ค๋ฅธ ์ ํ์ ๋ฐํํ๋ ๊ฒ์ ๋ง์ ์์๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ConjArray
๋ทฐ๋ ์ ์น๊ฐ ์ฌ๊ท ์ ์ด๋ ์๋๋ ์ด ๋ฌธ์ ๋ฅผ ๊ฒช์ต๋๋ค.
@stevengj โ "๋ณต์กํ"2x2 ํ๋ ฌ์ด ๋ณต์กํ ๋ฒกํฐ ๊ณต๊ฐ์ด ์๋๋ผ ๊ณต์์ ์ผ๋ก ์ค์ ๋ฒกํฐ ๊ณต๊ฐ์ด๋ผ๋ ์ ์ ์ง์ ํ๋ ๊ฒ์ ๋์๊ฒ ์๋ฏธ๊ฐ ์์ง๋ง, ๊ทธ ์ ์ ์ฌ๊ท ์ ์ธ์ ์ ๋ํ ์๋์ ๋๊ธฐ๊ฐ ๋ฌด์์ธ์ง ์๋ฌธ์ ๋ถ๋ฌ @andyferris ์ ์ ์์ ๋ ์ข์ง ์์ ๊ฒ์ ๋๋ค (๋น ์ฌ๊ท ์ ์น ๋ฐ ์ธ์ ). ๋ณต์กํ 2x2 ์์ ์ ๋ธ๋ก ํ๋ ฌ ํํ "์ํ๋ค"๊ฐ ์ฌ๊ท ์ ์ด๊ธฐ๋ฅผ ์ํ๋ค๋ ์ฌ์ค์ ์์ ์ ์ด์ง๋ง ์ฒซ ๋ฒ์งธ ์์ ์ ๋ํ ๊ทํ์ ์๊ฒฌ์ ๊ฐ์ํ ๋ ๋น์ฌ ๊ท์ ์ธ์ ํ๋ ๋ค๋ฅธ ๊ฒฝ์ฐ๊ฐ ์๋์ง ๊ถ๊ธํฉ๋๋ค. ๋ ์ ํํ๊ณ ํธ๋ฆฌํฉ๋๋ค.
adjoint๊ฐ ์ฌ๊ท ์ ์ด ์ง ์์ผ๋ฉด adjoint๊ฐ ์๋๋๋ค. ๊ทธ๊ฑด ํ๋ ธ์ด์.
์ ์ ์๊ฐ์๋ด์ด ์ด์ ๋ํ ์ ๋น์ฑ์ ์กฐ๊ธ ๋ ๋ง์ํด ์ฃผ์๊ฒ ์ต๋๊น?
๋ฒกํฐ์ adjoint๋ ๋ฒกํฐ๋ฅผ ์ค์นผ๋ผ์ ๋งคํํ๋ ์ ํ ์ฐ์ฐ์ ์ฌ์ผํฉ๋๋ค. ์ฆ, a'*a
a
๊ฐ ๋ฒกํฐ ์ธ ๊ฒฝ์ฐ a'*a
๋ ์ค์นผ๋ผ ์ฌ์ผํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ ์ ์์ฑ์ด a'*A*a == (A'*a)'*a
์ด๋ฏ๋ก ํ๋ ฌ์ ๋์ํ๋ adjoint๋ฅผ ์ ๋ํฉ๋๋ค.
a
์ด ๋ฒกํฐ๋ก ๊ตฌ์ฑ๋ ๋ฒกํฐ ์ธ ๊ฒฝ์ฐ ์ด๋ a' == adjoint(a)
์ด ์ฌ๊ท ์ ์ด์ด์ผ ํจ์ ์๋ฏธํฉ๋๋ค.
์ข์, ๋๋ ์ด๊ฒ์ ๋ฐ๋ฅด๋ ๊ฒ ๊ฐ๋ค.
์ฌ๊ท ์ ๋ด๋ถ ์ ํ๋ ์์ต๋๋ค.
julia> norm([[3,4]])
5.0
julia> dot([[3,4]], [[3,4]])
25
๋ถ๋ช ํ "adjoint"๋๋ "dual"๋๋ ์ ์ฌํ๊ฒ ์ฌ๊ท ์ ์ด์ด์ผํฉ๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐํด์ผ ํ , ์ค์ ๋ฌธ์ ๋ ๋ค์ ์๊ฐ a' * b == dot(a,b)
๋ชจ๋ ๋ฒกํฐ์ ๋ํ a
, b
?
๋์์ '
๊ฐ ๋ฐ๋์ adjoint๋ฅผ ๋ฐํํ๋ ๊ฒ์ด ์๋๋ผ ์์๋ฅผ ์ ์นํ๊ณ conj
ํตํด ์ ๋ฌํ๋ ๋ฐฐ์ด ์ฐ์ฐ ์ผ ๋ฟ์ด๋ผ๊ณ ๋งํ๋ ๊ฒ์
๋๋ค. ์ด๊ฒ์ ์ค์ ๋๋ ๋ณต์กํ ์์์ ๋ํ ์ธ์ ์์ ์ผ๋ฟ์
๋๋ค.
์ ํ ๋์์์ adjoint์ ๋ํ ํน๋ณํ ์ด๋ฆ๊ณผ ํน์ ๊ธฐํธ๊ฐ์๋ ์ ์ผํ ์ด์ ๋ ๋ด์ ๊ณผ์ ๊ด๊ณ์ ๋๋ค. ์ด๊ฒ์ด "conjugate transpose"๊ฐ ์ค์ํ ์์ ์ด๊ณ "conjugate rotation of matrix by 90๋"๊ฐ ์๋ ์ด์ ์ ๋๋ค. ๋ฌด์ธ๊ฐ๋ฅผ ๊ฐ์ง ์๋ฌด ์์ฉ ์๋ค "๋จ์ง ๋ฐฐ์ด ์์ ์ ์ค์ ํ๊ณผ ์ด ๋ฐ ์ ํฉ์ฒด"์ด ์ ์ ํ์ ์ฐ๊ฒฐ๋์ด ์์ง ์์ ๊ฒฝ์ฐ.
transpose
์ ๋น๊ณต ์ก "๋ด์ "์ฌ์ด์ ์ ์ฌํ ๊ด๊ณ๋ฅผ ์ ์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ๋ก ๋ด์ ์ด ์๋ ๋ณต์กํ ๋ฐ์ดํฐ์ ๋ํ ๊ฒฐํฉ๋์ง ์์ "๋ด์ "์ ์ค์ ๋ด์ ๋งํผ ์์ฃผ ๋ํ๋์ง ์์ต๋๋ค. ์ฐ์ฐ์๊ฐ ๋ณต์กํ ํํ๋ก ์์ฑ ๋ ๋ ์ ์ง๊ต ๊ด๊ณ์์ ๋ฐ์ํฉ๋๋ค. ๋์นญ (Hermitian์ด ์๋) ํ์ โ ๋ด์ฅ Julia ํจ์ ๋ ์ ํ ๋์ํ์ ๊ณตํต ์ฉ์ด์กฐ์ฐจ์๋ ๋ฐ๋ฉด ์์์ ๋น ์ซ์ ๋ฐฐ์ด์ ํ๊ณผ ์ด์ ๋ฐ๊พธ๋ ค๋ ๊ฒ์ ํนํ ๋ฐฉ์ก์์ ํจ์ฌ ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ณด์
๋๋ค. ๋ด๊ฐ ๋ง๋๋ ์ง์ํ ์์๋ ์ด์ ์
๋๋ค transpose
๋จ๊ธฐ๋ฉด์ ๋น ์ฌ๊ท๋ฅผ adjoint
์ฌ๊ท.
๋ด๊ฐ ์ฐธ์กฐ. ๋ฐ๋ผ์ '
์ 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 ํ๋ ฌ์ด ์์ต๋๋ค. ์ด๋ค์ ๋ณต์์์ ์ค์นผ๋ผ ํ๋์ ๋ํ ๋ฒกํฐ์ ๋๋ค. ์ด๋ค ์๋ฏธ์์ ์ถฉ๋ถํ ๋๋ฆด ๋ค์ดํ๋ฉด ๋ฒกํฐ์ "์์"๋ ๋ณต์์ (๊ณต๊ฐ์ ๊ฐ๋ณ ์ง์ ์์๋ ํ๋์ ๊ฐ๋ณ ๊ตฌ์ฑ ์์)์ด์ง๋ง ๋ค์ ๋ชจํธํฉ๋๋ค.
์๋๋ฉด ๋ ์ ํํ๊ฒ๋ ๋ฒกํฐ์ ๊ณ์๋ฅผ ์ด๋ค ๊ธฐ์ค์ผ๋ก ์ค๋ช ํ๊ธฐ ์ํด ํญ์ ๋ง์ ์ฌ์ฉํ ์ ์์ต๋๊น?
์ด์จ๋ ๊ฒฐ๊ณผ๋ ์ฌ์ ํ adjoint๊ฐ ์ฌ๊ท ์ ์ด์ด์ผํ๋ค๋ ๊ฒ์ ๋๋ค. ๋๋ ๋น์ ์ด ์ด๋ค ์ง์ ์ ๋๋ฌํ๊ณ ์๋์ง ์ดํดํ์ง ๋ชปํฉ๋๋ค.
(๊ฐ์ฒด ๋๋ ๋ฐฐ์ด์ ์์๋ SymPy ๋๋ ์ถ์์ ์ธ ์ํ์ ๊ฐ์ฒด๋ฅผ ๋ํ๋ด๋ ๋ค๋ฅธ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ๋ ์ ์๊ณ , ๊ณฑ์ ์ด ๊ณ์ฐ ๋ ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ฐํ ํ ์ ์์ผ๋ฏ๋ก ์๋ฅผ ๋ค์ด ์ ๋ถ.)
๋๋ ํน์ ์์ ์ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ ๋ ์ ์ดํดํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. :)
ํ์คํ ์์ adjoint๋ ์ฌ๊ท ์ ์
๋๋ค. ์์ ์์์ [E, H]
๋ฅผ (๋ฌดํ์ผ๋ก?) ๋ง์ ์์๊ฐ ๋ณต์กํ BlockVector
๋๋ ์์๊ฐ ๋ฒกํฐ ํ๋ ์ธ 2- ๋ฒกํฐ๋ก ์๊ฐํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์์ง ๊ถ๊ธํฉ๋๋ค. ์ด ๊ฒฝ์ฐ 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 ๊ฐ ์ดํด๋ณธ ๊ฒ์ฒ๋ผ ์ค์นผ๋ผ๋ ์ปจํ
์คํธ์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค.
๊ณต์์ ์ผ๋ก ์ฌ๊ท๋ adjoint์ ์ผ๋ถ๊ฐ ์๋๋๋ค. ๋์ ์ค์นผ๋ผ ์์์ ๊ฒฐํฉ์ ์ํ์ ์ผ๋ถ๋ ์์ต๋๋ค - ๊ทธ๋ฆฌ๊ณ ์ข
์ข
์ค์นผ๋ผ ๊ฒฝ์ฐ s
ํ์ฉ์ํค๋, ๋งคํธ๋ฆญ์ค๋ก ํํ s
์ฐ๋ฆฌ๊ฐ ๋ํ๋ด๋ ๋ฐ ์ฌ์ฉํ๋ ํ๋ ฌ์ ์ ์น ํฌํจ ํ ๊ฒ์ด๋ค ๊ทธ๊ฒ. ๊ทธ๋ฌ๋ ํญ์ ๊ทธ๋ฐ ๊ฒ์ ์๋๋ฉฐ ์ฌ์ฉ์๊ฐ ์ค์นผ๋ผ ๋ง์ ๋ํด ๋ถ์ฌํ ๊ตฌ์กฐ์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค.
๋๋ adjoint recursion์ ๊ฐ์ ํ๋ ๊ฒ์ด matlab ์ ํ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ค์ง์ ์ธ ํํ์ด ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ฅผ ์ํด ๊ทธ๊ฒ์ ๋งค์ฐ ์ฌ๊ฐํ๊ฒ ๋ฐ์๋ค์ด๋ ๊ฒ์ ๋น์ฌ ๊ท์ ์ธ์ ์ ์๋ฏธํ๊ณ ์ ํ์ด ์ง์ ๋ ์ค์นผ๋ผ + ๋์คํจ์น๋ฅผ โโ์ฌ์ฉํ์ฌ conj
๊ฐ ๊ธฐ๋ณธ ๋ง์ ๊ตฌ์กฐ๊ฐ ๋ฌด์์ด๋ ํ์ํ ๋ง๋ฒ์ ์๋ํ๋๋กํฉ๋๋ค.
์ด ๊ฒฝ์ฐ [3,3]์ ์ค์นผ๋ผ์ ๋๋ค. ์ค์นผ๋ผ๋ ๊ธฐ๋ณธ ๋ง์ ์์์ ๋๋ค.
์ด๋ฌํ ์ค์นผ๋ผ๋ +
, *
์ ์ ๋ ๋ง์ ์์๊ฐ ์๋๋ผ๋ ์ ์ ์ ์ธํ๊ณ ๋. *
์ง์ํ์ง ์์ต๋๋ค. [3,3] * [3,3]
ํ ์ ์์ต๋๋ค.
๋๋ adjoint recursion์ ๊ฐ์ ํ๋ ๊ฒ์ด matlab ์ ํ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ค์ง์ ์ธ ํํ์ด ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ฅผ ์ํด ๊ทธ๊ฒ์ ๋งค์ฐ ์ฌ๊ฐํ๊ฒ ๋ฐ์๋ค์ด๋ ๊ฒ์ ๋น์ฌ ๊ท์ ์ธ์ ์ ์๋ฏธํ๊ณ ์ ํ์ด ์ง์ ๋ ์ค์นผ๋ผ + ๋์คํจ์น๋ฅผ โโ์ฌ์ฉํ์ฌ
conj
๊ฐ ๊ธฐ๋ณธ ๋ง์ ๊ตฌ์กฐ๊ฐ ๋ฌด์์ด๋ ํ์ํ ๋ง๋ฒ์ ์๋ํ๋๋กํฉ๋๋ค.
์ ๋ ๋์ํฉ๋๋ค. ์ค์ฉ์ ์ธ ๊ตฌ์ฑ์ํ๊ณ ์ถ๋ค๋ฉด ์ด๊ฒ์ ์์ ํ ๊ด์ฐฎ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ง๊ธ๊น์ง ์ฐ๋ฆฌ๊ฐ ํด์ ๋ ๊ฒ์
๋๋ค.ํ์ง๋ง ์ ์๊ฒ๋ ๊ธฐ๋ณธ ์ค์นผ๋ผ๊ฐ ์์ ํ ํํํ ๋ ๋ฐฐ์ด์ ์ค์นผ๋ผ์ด๊ณ ์ด๊ฒ์ด ์ ํ ๋์ํ์ด ์ ์ ๋ ๊ฒ ๊ฐ์ต๋๋ค. . BlockVector
๋ฐ BlockMatrix
(๋ฐ BlockDiagonal
๋ฑ)์ ๋ง๋๋ ๊ธฐ์ ์ด์์ด ์์ ํ ํ์ฅ ๋ ๋ฐฐ์ด์ ํจ์จ์ ์ด๊ณ ํ๋ฉดํ ๋๋ณด๊ธฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. "์ ๊ทผ ๋ฐฉ์์ ์ต์ํ ์คํ ๊ฐ๋ฅํด์ผํฉ๋๋ค. ๋๋ ๋ํ ์ฌ๊ท ์ ์ ๊ทผ ๋ฐฉ์๋งํผ ์ฌ์ฉ์ ์นํ์ ์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค (๋ ์ข์ ์๋ฏธ์ ์ ์ฌ์ ์ผ๋ก ๋ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋ ๊ฐ ๋ BlockMatrix([A B; C D])
๋ฅผ ์
๋ ฅํ๋ ๋ช ๊ฐ์ ์ถ๊ฐ ๋ฌธ์-๋๋ ์ด๊ฒ๋ค์ ํ์ ํฉ๋๋ค ๋
ผ๋์ ์ฌ์ง๊ฐ ์์ต๋๋ค). ๊ทธ๋ฌ๋์ด ๋ชจ๋ ๊ฒ์ ๊ตฌํํ๋ ค๋ฉด ๋ ๋ง์ ์์
์ด ํ์ํฉ๋๋ค.
@andyferris ๋ง์ต๋๋ค. *
๊ฐ ์ ์๋์ง ์์๊ธฐ ๋๋ฌธ์ ๋ฐ์ง๊ฐ ์๋๋๋ค.ํ์ง๋ง *
์ฝ๊ฒ ์ ์ ํ ์์๋ ํ์ด์ง์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ณ ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ต๋๋ค. ๊ทธ๋์ ๋๋ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ ํ์ด์ง์ ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ํ์ดํ์ ์ด๊ฒ์ ํด๊ฒฐํ๋ ๋ ํ์ฅ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์
๋๋ค.
(์ค์นผ๋ผ ์ ๋ณด : ์ค์นผ๋ผ๊ฐ ๋ฐ๋์ ์์ ํ ํํํ ๋ ๊ตฌ์กฐ์ ์์๋ ์๋๋๋ค ! ์ด์ ๋ ์ด๊ฒ์ ๋๋ค. 1 ์ฐจ์ ๋ณต์ ๋ฒกํฐ ๊ณต๊ฐ์ ๋ณต์์์ ๋ํด 1 ์ฐจ์์ด๊ณ ์ค์์ ๋ํด 2 ์ฐจ์์ ๋๋ค. ํน๋ณํฉ๋๋ค. ์ฟผํฐ๋์ธ์ ๋ณต์์๋ณด๋ค 2 ์ฐจ์์ ๋๋ค. ์ฅ ํ ๋ ์ธ์ ์ฟผํฐ๋์ธ๋ณด๋ค 2 ์ฐจ์, ๋ณต์์๋ณด๋ค 4 ์ฐจ์, ์ค์์ ๋ํด์๋ 8 ์ฐจ์์ ๋๋ค.ํ์ง๋ง ๋ ์ด์ 8 ์ฐจ์์ด "8 ์ฐจ์"์ด๋ผ๊ณ ์ฃผ์ฅ ํ ์ด์ ๊ฐ ์์ต๋๋ค. ์ค์นผ๋ผ๊ฐ ๋ณต์กํ์ง ์์ ์ค์๋ผ๊ณ ์ฃผ์ฅํ๋ ๊ฒ๋ณด๋ค, ๊ทธ๊ฒ๋ค์ ๋ ผ๋ฆฌ์ ์ํด ๊ฐ์ ๋์ง ์๋ ์ ํ์ ๋๋ค. ์์ ํ ํํ์ ๋ฌธ์ ์ด๋ฉฐ, ์ ํ ๋์๊ฐ ๊ฐ๊ฐ์ ๊ฒฝ์ฐ์ ๋์ผํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๋ ์ด๋ฌํ ์์ ๋ฅผ ํ์ฉํด์ผํฉ๋๋ค. [์๋ฆฐ] ๋ค์ค ๋คํญ์ ๊ณ ๋ฆฌ ๋๋ ์ซ์ ํ๋์ ๋์์ ํ์ฅ์ด์๋ ์ด๋ฌํ ๊ณต๊ฐ์ ํจ์ฌ ๋ ๊ธด ์ฒด์ธ์ ๋ ๋ค ํ๋ ฌ์ ์ฌ์ฉํ์ฌ ์๋๊ฐ์๊ฒ ์ ์ฉ๋ฉ๋๋ค. Julia๋ ํ ๋ผ ๊ตฌ๋ฉ ์๋๋ก ๋ฉ๋ฆฌ ๊ฐ ํ์๊ฐ ์์ต๋๋ค. ์ฐจ๋จํ์ง ์๋๋ก ์กด์ฌํ๋ค๋ ๊ฒ์ ๊ธฐ์ตํด์ผํฉ๋๋ค. ๋ดํ ์ฃผ์ ์ผ๊น์? :))
@felixrehren , ๋ง R ์์ ๋ฒกํฐ๋ก ๊ตฌ์ฑ๋ ๋ฒกํฐ๋ ์ง์ ํฉ๊ณ ๊ณต๊ฐ์ผ๋ก ๊ฐ์ฅ ์ ์ดํด๋๋ฉฐ R ์์ ๋ฒกํฐ ๊ณต๊ฐ์ด๊ธฐ๋ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฒกํฐ ์์ฒด๋ฅผ "๊ธฐ๋ณธ ๋ง"์ด๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๋ฐ์ง. ๊ทธ ์ถ๋ก ์ [[1,2], [3,4]]
์๋ฒฝํ๊ฒ ์ ์ฉ๋ฉ๋๋ค.
ํ์ฉ๊ณผ ์ธ์ ์ ์ผ๋ฐ์ ์ผ๋ก ๋ณ๊ฐ์ ๊ฐ๋ ์ ๋๋ค. "์ค์นผ๋ผ ์์์ ํ์ฉ"์ด ์ฌ๊ธฐ์ ์์ ์ ์ํํด์ผํ๋ค๋ ๋ง์ ์๋์ ์ธ๊ธ ๋ ํน๋ณํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋ "์ฌ๊ฐํ"์ ๋ฐ๋ ์ธ ๋์๊ฒ๋ ์์ ํ ์๋ชป๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
Dirac ํ๊ธฐ๋ฒ์ผ๋ก ์ผ๋ถ ๋ง (๋ณต์์ โ) ์์ ์ผ๋ถ ํ๋ฒ ๋ฅดํธ ๊ณต๊ฐ H์์ ๋ ์์ | uโฉ ๋ฐ | vโฉ์ "2 ์ฑ๋ถ ์ด ๋ฒกํฐ"(| uโฉ, | vโฉ)์ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํ์ญ์์ค. "๋ฒกํฐ์ ๋ฒกํฐ." ์ด๊ฒ์ ์์ฐ์ ์ธ ๋ด์ โจ(| uโฉ, | vโฉ), (| wโฉ, | zโฉ)โฉ = โจu | wโฉ + โจv | zโฉ๋ฅผ ๊ฐ๋ ์ง์ ํฉ ํ๋ฒ ๋ฅดํธ ๊ณต๊ฐ HโH์ ๋๋ค. ๋ฐ๋ผ์ adjoint๋ ์์ ์์ฒด๊ฐ ์ ํ ์ฐ์ฐ์ ์ธ "ํ ๋ฒกํฐ"(โจu | โจv |)๋ก ๊ตฌ์ฑ๋ ์ ํ ์ฐ์ฐ์๋ฅผ ์์ฑํด์ผํฉ๋๋ค. adjoint ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค."์ฌ๊ท" . ์ด๊ฒ์ ๋ฐ๋ฐ์นจ ๊ณ ๋ฆฌ์ ์ ํฉ์ ์ํด ์ ๋ ๋ ๋์ผํ ํ๋ฒ ๋ฅดํธ ๊ณต๊ฐ HโH์ ์์๋ฅผ ์์ฑํ๋ ๋ณตํฉ ์ ํฉ์ฒด์๋ ์์ ํ ๋ค๋ฆ ๋๋ค.
์ฟผํฐ๋์ธ ๋ฑ์ ๋ฒกํฐ๋ฅผ ์ฐธ์กฐํ์ฌ ๋ฌธ์ ๋ฅผ ํผ๋ํ๊ณ ์์ต๋๋ค. ๋ฒกํฐ์ "์์"๊ฐ ๊ธฐ๋ณธ "๋ณต์กํ"๊ณ ๋ฆฌ์ ์์ ์ด๊ธฐ๋ ํ๋ค๋ฉด, ๋ฌผ๋ก ์ด๋ฌํ ์์์ ๊ฒฐํฉ๊ณผ ์ผค๋ ๋ ๋์ผํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๋ชจ๋ ์ง์ ์ ํ ๊ณต๊ฐ์ ์ ์ฉ๋๋ ๊ฒ์ ์๋๋๋ค.
๋ค์ ๋งํด, ๊ฐ์ฒด ์ ํ์ ๋ ๊ฐ์ง ๋ค๋ฅธ ์ ๋ณด๋ฅผ ๋ํ๋ด์ผํฉ๋๋ค.
Vector{T<:Number}
, ์ค์นผ๋ผ ๋ง์ด T
(๋๋ ๋ณต์กํ ๋ฒกํฐ ๊ณต๊ฐ์ ๊ฒฝ์ฐ complex(T)
)์ด๊ณ ๋ด๋ถ ๊ณฑ์ด ์ผ๋ฐ์ ์ธ ์ ํด๋ฆฌ๋ ๊ณฑ์์ ๋ํ๋ด๋ ๊ฒ์ผ๋ก ์ฝ์ด์ผํฉ๋๋ค. .
๋ฒกํฐ๋ก ๊ตฌ์ฑ๋ ๋ฒกํฐ๊ฐ์๋ ๊ฒฝ์ฐ ์ด๋ Hilbert ๊ณต๊ฐ์ ์ ํฉ์ด๊ณ ๋ง์ ๊ฐ๋ณ ๋ฒกํฐ์ ์ค์นผ๋ผ ๋ง์ ์น๊ฒฉ์ด๋ฉฐ ๋ด์ ์ ์์์ ๋ด์ ์ ํฉ์ ๋๋ค. (์ค์นผ๋ผ๋ฅผ ์น๊ฒฉ ํ ์ ์๊ฑฐ๋ ๋ด์ ์ ํฉํ ์์๋ ๊ฒฝ์ฐ์๋ ๋ฒกํฐ / ํ๋ฒํธ ๊ณต๊ฐ์ด ์๋๋๋ค.)
์ค์นผ๋ผ T<:Number
๊ฐ ์์ผ๋ฉด conj(x::T) == adjoint(x::T)
์
๋๋ค.
๋ฐ๋ผ์ ๋ณต์์ z::Complex{T}
๋ฅผ 2x2 ํ๋ ฌ m(z)::Array{T,2}
๋ํ๋ด๋ ค๊ณ ํ๋ฉด ์ ํ์ z
์ ๋น๊ตํ์ฌ ๋ค๋ฅธ ๋ง T
๊ณผ ๋ค๋ฅธ ๋ด๋ถ ๊ณฑ์ ๋ชจ๋ ๋ํ๋
๋๋ค. z
์ด๋ฏ๋ก conj
๋๋ adjoint
๋๋ฑํ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณต ํ ๊ฒ์ผ๋ก ๊ธฐ ๋ํด์๋ ์๋ฉ๋๋ค.
๋๋ ๋น์ ์ด @felixrehren์ ๋งํ๋ ๊ฒ์ ๋ด
๋๋ค. ์ค์นผ๋ผ๊ฐ ์ค์์ด๋ฉด ์ฅํฐ ๋์์ 8 ์ฐจ์ ๋ฒกํฐ ๊ณต๊ฐ์ผ๋ก ์๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค์นผ๋ผ ๊ณ์๊ฐ 8 ์ง์์ด๋ฉด ๋ชจ๋ 8 ์ง์๋ฅผ ๋ํ๋ด๋ ์ฌ์ํ ์ฐจ์ 1 ๊ธฐ์ ๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ด ๋ด๊ฐ ๋งํ ๊ฒ๊ณผ ๋ค๋ฅธ์ง (๋๋ ๋ด๊ฐ ์๋ฏธํ๋ ๋ฐ : smile :) ํ์คํ์ง ์์ต๋๋ค. AbstractVector{T1}
๊ฐ ์๋ค๋ฉด ๋ค๋ฅธ ์ฐจ์์ AbstractVector{T2}
๊ณผ ๋ํ ์ผ ์ ์์ต๋๋ค ( length
). ๊ทธ๋ฌ๋ T1
๋ฐ T2
๋ ๋ชจ๋ Julia ์ฐ์ฐ์ +
๋ฐ *
์๋์ ๋ง์ด์ด์ผํฉ๋๋ค (๋ํ์ด +
์ ๋์์ ์ ์งํ ์ ์์). ๊ทธ๋ฌ๋ *
๋๋ ๋ด๋ถ ์ ํ ๋๋ adjoint๋ ์ ์ธ).
@stevengj ์ ๋ ํญ์ BlockVector
๊ณผ ์ ํํ ๊ฐ์ ์ง์ ํฉ๊ณ๋ฅผ ์๊ฐํ์ต๋๋ค. ๋ ๊ฐ์ (๋ถ๋ฆฌ ๋) ๋ถ์์ ํ ์ผ๊ธฐ๊ฐ ์์ต๋๋ค. ๊ฐ ๋ฒ ์ด์์ค ๋ด์์ ์ฒซ ๋ฒ์งธ ๋ฒ ์ด์์ค์์ cโ | Xโโฉ + cโ | Xโโฉ ๋๋ ๋ ๋ฒ์งธ ๋ฒ ์ด์์ค์์ cโ | Yโโฉ + cโ | Yโโฉ์ ๊ฐ์ ์ค์ฒฉ์ ํ์ฑ ํ ์ ์์ต๋๋ค. "์ง์ ํฉ"์ (cโ | Xโโฉ + cโ | Xโโฉ) + (cโ | Yโโฉ + cโ | Yโโฉ)์ ๊ฐ์ ์ํ์ ๊ณต๊ฐ์ ๋ํ๋
๋๋ค. ๋ณต์์ (์ฆ, cโ | Xโโฉ + cโ | Xโโฉ + cโ | Yโโฉ + cโ | Yโโฉ์ ๊ฐ์ ์ํ)์ ๋ํ ์ฐจ์ 4์ ๊ธฐ์ค์์ ์ด๊ฒ์ ๋ถ๋ฆฌํ๋ ์ ์ผํ ํน๋ณํ ๊ฒ์ ๋๊ดํธ์
๋๋ค. ๋์๊ฒ ๊ทธ๊ฒ์ ํ๊ธฐ๋ฒ์ฒ๋ผ ๋ณด์ธ๋ค. ์ง์ ํฉ๊ณ๋์ด๋ฅผ ์ข
์ด์ ๋๋ ์ปดํจํฐ์ ๋ฐฐ์ด๋ก ์์ฑํ๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ ์ผ๋ฟ์
๋๋ค (์๋ฅผ ๋ค์ด ๋์นญ์ ์นดํ๋ก๊ทธ ํํ๊ณ ํ์ฉํ๊ฑฐ๋ ๋ฌธ์ ๋ฅผ ๋ถํ (์๋ง๋ ๋ณ๋ ฌํ)ํ๋ ๋ฐ ์ ์ฉ ํ ์ ์์ต๋๋ค). ). ์ด ์์์ XโY๋ ์ฌ์ ํ ์ค์นผ๋ผ๊ฐ ๋ณต์กํ 4 ์ฐจ์ ๋ฒกํฐ ๊ณต๊ฐ์
๋๋ค.
์ด๊ฒ์ด ๋ด๊ฐ eltype(v) == Vector{Complex{...}}
๋ฐ length(v) == 2
๋์ eltype(v) == Complex{...}
๋ฐ length(v) == 4
์ํ๊ฒ ๋ง๋๋ ์ด์ ์
๋๋ค. ๊ธฐ๋ณธ ๋ง๊ณผ ๋ฒกํฐ ๊ณต๊ฐ์๋ณด๊ณ ์ถ๋ก ํ๋ ๋ฐ ๋์์ด๋ฉ๋๋ค. adjoint๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด "์ ์ญ"์ ์น ๋ฐ ์์ ๋ณ conj
๋ฅผ ์ํ ํ ์์๋ "ํํํ ๋"๊ณต๊ฐ๋ ์๋๋๊น?
(๋ด๊ฐ ๊ธ์ ์ฐ๋ ๋์ @stevengj : smile :)
๋ฌผ๋ก , BlockArray
๋์ ์ค์ฒฉ ๋ฐฐ์ด์ ์ง์ ํฉ๊ณ์ ๋ํ ๊ท์น ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์ ํธํ๋ค๋ฉด (์ง๊ธ์ฒ๋ผ)์ด ๋ฐฉ๋ฒ๋ ํ๋ฅญํ๊ณ ์ผ๊ด์ฑ์ด ์์ต๋๋ค! ์ค์นผ๋ผ ํ๋ (์ผ์ข
์ ์ฌ๊ท eltype)๋ฅผ ๊ฒฐ์ ํ๊ณ ํจ๊ณผ์ ์ธ ํ๋ฉดํ ๋ ์ฐจ์ (์ผ์ข
์ ์ฌ๊ท ํฌ๊ธฐ)์ ๊ฒฐ์ ํ๋ ๋ช ๊ฐ์ง ์ถ๊ฐ ํจ์๋ฅผ ํตํด ์ฐ๋ฆฌ๊ฐ ์ํํ๋ ์ ํ ๋์์ ๋ํด ์ถ๋ก ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
๋ถ๋ช ํ ๋งํ๋ฉด, ์ ๋ ๋ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์์ ๋ง์กฑํ๋ฉฐ์ด ํ ๋ก ์์ ๋ง์ ๊ฒ์ ๋ฐฐ์ ์ต๋๋ค. ๊ฐ์ฌ.
@andyferris , ๋จ์ง ๋ ๊ฐ์ ๊ณต๊ฐ์ด ๋ํ์ด๋ผ๊ณ ํด์ ๊ทธ๊ฒ์ด "๋์ผํ"๊ณต๊ฐ์ด๋ผ๋ ๊ฒ์ ์๋ฏธํ์ง๋ ์์ผ๋ฉฐ, ๊ทธ ์ค ์ด๋ ๊ฒ์ด ๋ฒกํฐ ๊ณต๊ฐ์ด "์ ๋ง"์ธ์ง (๋๋ "์ ๋ง"๊ฐ์์ง ์ฌ๋ถ) ๋ ผ์์ ํ์ด์ํ ์ ์๋ ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๊ฒฐ์ฝ ํ์ถํ์ง ์์ ๊ฒ์ ๋๋ค. (๊ทธ๋ฌ๋ ๋ฌดํ ์ฐจ์ ๋ฒกํฐ ๊ณต๊ฐ์ ์ง์ ํฉ๊ณ์ ๊ฒฝ์ฐ๋ ์ง์ ํฉ๊ณ์ "ํํํ ๋"๊ฐ๋ ์ด "ํ๋์ ๋ชจ๋ ์์์ ๋ค๋ฅธ ์์์ ๋ชจ๋ ์์"๋ผ๋ ํ๊ณ๋ฅผ ๋ณด์ฌ์ค๋๋ค.)
๋ค์ ๋ง์ ๋๋ฆฌ์ง๋ง, ๊ทํ์ ์์ ์ด ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. Julia์ eltype(::Vector{Vector{Complex}})
๋ Complex
์ด์ด์ผํ๋ค๊ณ ์ง์งํ๊ฒ ์ ์ํ๊ณ ์์ต๋๊น? ์๋๋ฉด length
๊ฐ ๊ธธ์ด์ ํฉ๊ณ๋ฅผ ๋ฐํํด์ผํ๋ค๊ณ ์ง์งํ๊ฒ ์ ์ํ๊ณ ์์ต๋๊น? ์ค๋ฆฌ์์ ๋ชจ๋ ์ฌ๋๋ค์ด ์ง์ ํฉ๊ณ ๊ณต๊ฐ์ ๋ํด "ํํํ ๋"๋ํ์ ์ฑํํ๋๋ก ๊ฐ์ํด์ผํฉ๋๊น? ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ adjoint๋ ์ฌ๊ท ์ ์ด์ด์ผํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ "ํน์ ์์ ์ ๋งํ์ง ์๊ณ ๋ ์ ์ดํดํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ ์ค"์ด๋ผ๋ฉด ๋ค๋ฅธ ํฌ๋ผ์ผ๋ก ์ด๋ํ ์ ์์ต๋๊น? ์ด ๋ฌธ์ ๋ ์ง์ ํฉ ๊ณต๊ฐ์ ์๋ฏธ์ ๋ํ ํ์ด์ํ ์ ์ฃผ์ฅ ์์ด๋ ์ถฉ๋ถํ ํผ๋ ์ค๋ฝ์ต๋๋ค.
๋ ๊ฐ์ ๊ณต๋ฐฑ์ด ๋ํ์ด๋ผ๊ณ ํด์ "๋์ผํ"๊ณต๊ฐ์ด๋ผ๋ ์๋ฏธ๋ ์๋๋๋ค.
๋๋ ๊ทธ๊ฒ์ ์ ํ ์ ์ํ์ง ์์๋ค.
๋ค์ ๋งํ์ง๋ง ๋น์ ์ ์์ ์ด ๋ฌด์์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ ๋ AbstractArray
์ ํ ๋์๋ฅผํ๊ณ ์ถ๋ค๋ฉด eltype
๊ฐ ๋ง์ด๋๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค ( +
, *
๋ฐ conj
) ์๋ฅผ ๋ค์ด [1,2] * [3,4]
๊ฐ ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์ Vector
eltypes๋ฅผ ๋ฐฐ์ ํฉ๋๋ค. ๋ฒกํฐ์ length
๋ ์ค์ ๋ก ์ ํ ๋์์ ์ฐจ์์ ๋ํ๋
๋๋ค. ์, ์ด๊ฒ์ ๋ฌดํ ์ฐจ์ ๋ฒกํฐ ๊ณต๊ฐ์ ๋ฐฐ์ ํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก Julia์์๋ AbstractVector
ํฌ๊ธฐ๋ฅผ ๋ฌดํ๋๋ก ์กฐ์ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒํ๋ฉด Julia์์ ์ ํ ๋์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ฝ๊ฒ ์ถ๋ก ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ์ฉ์๋ ์ค์ฒฉ ๋ฐฐ์ด ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๋์ BlockArray
๋๋ ์ด์ ์ ์ฌํ ๋ฐฉ์์ ํตํด ์ง์ ํฉ๊ณ๋ฅผ ๋ช
์ ์ ์ผ๋ก ํ์ํด์ผํฉ๋๋ค.
์ด๊ฒ์ ์๋นํ ํ๊ดด์ ์ธ ์ ์์ด๋ฉฐ ๋์ ๋๋ ๋จ์ ์ด ์์ต๋๋ค (์ฌ๋ฌ๋ถ์ด ์ธ๊ธ ํ ์ผ๋ถ). ๋ฐ๋ผ์ "์ข์ ์๊ฐ์ด์ง๋ง ์ค์ฉ์ ์ด์ง ์์ ๊ฒ"์ด๋ผ๊ณ ๋งํ๋ฉด ๋ถํํ์ง ์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ค์ฒฉ ๋ฐฐ์ด ์ ๊ทผ ๋ฐฉ์์ด ๊ธฐ๋ณธ ์ ํ ๋์์ ๋ํ ๋ช ๊ฐ์ง ์ฌํญ์ ์ข ๋ ๋ถํฌ๋ช ํ๊ฒ ๋ง๋ ๋ค๋ ์ ๋ ์ง์ ํ๋ ค๊ณ ํ์ต๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ด OP์ ์ง์ ์ ์ผ๋ก ๊ด๋ จ์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฐ์ ํธ ํํ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ์ฌ๊ท ์ ์น / ์ธ์ ์ ๋ฒ๋ฆฌ๊ณ , ์ฌ๊ท ์ ์น / ์ธ์ ์ ๋ฒ๋ฆฌ๋ฉด ์ ํ ๋์๋ฅผ ์ํด ํ๋ฉดํ ๋ ๊ตฌ์กฐ ๋ง ์คํ ๊ฐ๋ฅํ ์ ์์ต๋๋ค. ํ๋ฉดํ ๋ ์ ๊ทผ ๋ฐฉ์์ ์ ์ฉํ์ง ์์ผ๋ฉด ์ฌ๊ท ์ ์ธ์ ์ ์ ์ง ํด์ผํฉ๋๋ค . ๋์๊ฒ ๊ทธ๊ฒ์ ์ฐ๊ฒฐ๋ ๊ฒฐ์ ์ฒ๋ผ ๋ณด์๋ค.
Julia์
eltype(::Vector{Vector{Complex}})
๋Complex
์ด์ด์ผํ๋ค๊ณ ์ง์งํ๊ฒ ์ ์ํ๊ณ ์์ต๋๊น? ์๋๋ฉดlength
๊ฐ ๊ธธ์ด์ ํฉ๊ณ๋ฅผ ๋ฐํํด์ผํ๋ค๊ณ ์ง์งํ๊ฒ ์ ์ํ๊ณ ์์ต๋๊น?
์๋์, ์ฃ์กํฉ๋๋ค. ์ ๊ฐ ์์ฑํ ๋ด์ฉ์ด ๋ช
ํํ์ง ์์ ์๋ ์์ต๋๋ค.์ด ๋ชฉ์ ์์ํ ๋ ๊ฐ์ง ์๋ก์ด ํธ์ ๊ธฐ๋ฅ์ด ํน์ ์ํฉ์์ ์ ์ฉ ํ ์ ์๋ค๊ณ ์ ์ํ ๊ฒ๋ฟ์
๋๋ค. ์๋ฅผ ๋ค์ด zero
๋๋ one
๋ฅผ ์ํ ์๋ ์์ต๋๋ค.
์ค๋ฆฌ์์ ๋ชจ๋ ์ฌ๋๋ค์ด ์ง์ ํฉ๊ณ ๊ณต๊ฐ์ ๋ํด "ํํํ ๋"๋ํ์ ์ฑํํด์ผํ๋ค๋ ๋ง์ ๋๊น?
๋๋ ๊ทธ๊ฒ์ ๊ฐ๋ฅ์ฑ์ผ๋ก ์ ์ ํ์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ์ต์ ์ ์์ด๋์ด๋ผ๊ณ 100 % ํ์ ํ์ง๋ ๋ชปํ์ง๋ง ๋ช ๊ฐ์ง ์ฅ์ (๊ทธ๋ฆฌ๊ณ ๋ช ๊ฐ์ง ๋จ์ )์ด ์๋ค๊ณ ๋๋๋๋ค.
์ฌ๊ธฐ์ ์คํ ๊ฐ๋ฅํ ๋ณ๊ฒฝ ์์ญ์ ๋ฐํํ๋ฉด @stevengj ์ ๋ด ์ ์์ ๋ํ ๋จ์ํ ๋ ๋ฒ์ ์ด ์ฌ๊ธฐ๋ก ์ด๋ํ๋ ๋ฐฉ๋ฒ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
conj
๊ทธ๋๋ก (์์ ๋ณ) ์ ์งํฉ๋๋ค.a'
์adjoint(a)
a'
ํด๋นํ๋๋ก ๋ง๋ค๊ณ ํญ์ ์ฌ๊ท ์ ์ผ๋ก ๋ง๋ญ๋๋ค (๋ฐ๋ผ์ ์์์ ๋ํด adjoint๊ฐ ์ ์๋์ง ์์ ๋ฌธ์์ด ๋ฐฐ์ด ๋ฑ์์๋ ์คํจํฉ๋๋ค).a.'
๋ฅผtranspose(a)
์ ๋์์ํค๊ณ ์ ๋ ์ฌ๊ท ์ ์ด ์ง ์๊ฒ ๋ง๋ค๊ณ (๋จ์งpermutedims
), ๋ฐ๋ผ์ ์์์ ์ ํ์ ๋ฌด์ํ์ญ์์ค.
์ฌ๊ธฐ์์ ์ถ์ถ ํ ์์๋ ์ฃผ์ ์ค์ "ํ ์ผ"์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ctranspose
์ adjoint
.transpose
๋ฅผ ๋น ์ฌ๊ท๋ก ๋ณ๊ฒฝํฉ๋๋ค.๋๋ ์ฌ๊ท ์ ์น์ ์์กดํ๋ ๊ฒ์ด ์ถฉ๋ถํ ๋๋ฌผ ์ด์ 1.0์์ ์ด๊ฒ์ ๋ณ๊ฒฝํ๊ณ NEWS์์ ์ค๋จ์ผ๋ก ๋์ด ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ctranspose
๋ฅผ adjoint
๋ก ๋ณ๊ฒฝํ๋ฉด ์ผ๋ฐ ์ง์ ์ค๋จ์ ๊ฒช์ ์ ์์ต๋๋ค (ํ์ง๋ง 1.0์์๋์ด ์์
์ ์ํํจ). ๋ค๋ฅธ ์กฐ์น๊ฐ ํ์ํฉ๋๊น?
@StefanKarpinski , RowVector
ํด๋นํ๋ ๋ณ๊ฒฝ๋ํด์ผํฉ๋๋ค. ํ ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ lazy non-recursive transpose
๋ฐ lazy recursive adjoint
๊ฐ๊ฐ์ ๋ํด RowVector
๋ฅผ Transpose
๋ฐ Adjoint
์ ํ์ผ๋ก ๋ถํ ํ๋ ๊ฒ์
๋๋ค. Conj
(๊ฒ์ผ๋ฅธ conj
)๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
์ ์ด๋ ์ ์ ์ ์ผ๋ก ๊ด๋ จ๋ ๋ช ๊ฐ์ง ๋ณ๊ฒฝ ์ฌํญ
transpose
๋ฐ adjoint
/ AbstractMatrix
๋ํ ์ผ๋ถ๋ณด๊ธฐ ์ ํadjoint(::Diagonal)
์ฌ๊ท (ํ๋ฆผ์์ด ์ฐ๋ฆฌ๋์ด "๋ฒ๊ทธ"์์ ํด์ผ Diagonal
์ ๋ํด transpose
๋ฐ ctranspose
์ค๋ฆฌ์ v0.6.0 ์ด์ ์)v = Vector{Vector{Float64}}(); dot(v,v)
(ํ์ฌ ์ค๋ฅ- zero(Vector{Float64})
๋ฐํ ์๋)์ข์, ๋๋ ์ฌ๊ท ๋ธ๋ก ํ๋ ฌ์ ๋ ์ง์งํ๊ฒ ๋ฐ์๋ค์ด๋ ค๊ณ ๋
ธ๋ ฅํด ์์ผ๋ฉฐ ์ด๊ฒ์ ๋ท๋ฐ์นจํ๊ธฐ ์ํด ์ฌ๊ธฐ์ Diagonal
์ ๋์์ ๊ฐ์ ํ๋ ค๊ณ ๋
ธ๋ ฅํ๊ณ ์์ต๋๋ค (์ด๋ฏธ ๋ธ๋ก ๋๊ฐ์ ์ ์์ํ๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค ๊ตฌ์กฐ (์ : getindex
)์ด๋ฏ๋ก์ด ๊ฒฝ์ฐ ์ ์น ์ฌ๊ท ์ ์ผ๋ก ๋ง๋๋ ๊ฒ์ด ์์ฐ์ค๋ฌ์ ๋ณด์
๋๋ค).
๋ด๊ฐ ๋งํ ๋ถ๋ถ๊ณผ ์์ ๋ชจ๋ ๋
ผ์ ํฌ์ธํธ์ ์ง์ ์ ์ผ๋ก ๋๊ธฐ๋ฅผ ๋ถ์ฌํ ๊ฒ์ inv
, det
, expm
ํฌํจํ์ฌ ์ด๋ฌํ ๊ตฌ์กฐ์์ ์ ํ ๋์ ์ฐ์ฐ์ ์ํํ๋ ๋ฐฉ๋ฒ์
๋๋ค. eig
๋ฑ. ์๋ฅผ ๋ค์ด, ๋ชจ๋ ๋๊ฐ์ ์์์ ๊ณฑ๋ง ์ทจํ๋ det(::Diagonal{T}) where T
๋ฉ์๋๊ฐ ์์ต๋๋ค. T <: Number
์์ ํ๋ฅญํ๊ฒ ์๋ํ๋ฉฐ ๋ชจ๋ ์์๊ฐ ๋์ผํ ํฌ๊ธฐ์ ์ ์ฌ๊ฐํ ํ๋ ฌ ๋ํ ์ฌ๊ท ์ ์น (ํธ์ง : adjoint)๊ฐ ์ฌ๋ฐ๋ฅธ ๊ฒ์
๋๋ค).
๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ธ ๋ธ๋ก ๋๊ฐ์ ํ๋ ฌ Diagonal{Matrix{T}}
๋๋ ์์์ ๋ธ๋ก ํ๋ ฌ Matrix{Matrix{T}}
๋ฅผ ์๊ฐํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๊ทธ ํ๋ ฌ์์ ์ค์นผ๋ผ T
๋ก ๋งํ ์ ์์ต๋๋ค. ์ฆ, ํฌ๊ธฐ๊ฐ (3 โ 4) ร (3 โ 4)
(3x3, 4x4 ์ฐจ์์ ํ๋ ฌ ์ธ ๋๊ฐ์ ์์๊ฐ ์๊ณ ๋๊ฐ์ ์ ๋ฒ์ด๋ ์์์ ์ผ์นํ๋ 2x2 ํ๋ ฌ)์ด๋ฉด det
"ํํํ ๋"7x7 ๊ตฌ์กฐ์ ๊ฒฐ์ ์ธ์์
๋๊น, ์๋๋ฉด ๋จ์ํ 2x2์ ์์๋ฅผ ๊ทธ๋๋ก ๊ณฑํด์ผํฉ๋๊น (์ด ๊ฒฝ์ฐ์๋ ์ค๋ฅ๊ฐ ๋ฐ์ ํจ)?
(ํธ์ง : ์์ ์น์๋ฅผ ๋ชจ๋ ๋ค๋ฅด๊ฒ ๋ณ๊ฒฝํ์ฌ ๋ชจํธํ ์ธ์ด๋ฅผ ํผํด์ผ ํจ)
๋๋ a'
์ด ์ฌ๊ท ์ ์ด๋ผ๋ ๋ฌธ์ ๋ ์์ง๋ง ๊ฐ์ธ์ ์ผ๋ก ์๋ก์ด a.'
ํ๊ธฐ๋ฒ์ด ๋งค์ฐ ํผ๋ ์ค๋ฝ๋ค๋ ๊ฒ์ ์๊ฒ ๋ ๊ฒ์
๋๋ค. a.'
๊ตฌ๋ฌธ์ ๋ณด์ฌ ์ฃผ๋ฉด Julia์ ๋ฉํ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก transpose.(a)
์ฆ, a
์ ์์ ๋ณ ์กฐ์ฎ๊น์ ์ํํ๋ค๊ณ ๋ง์ ๋๋ฆฌ๊ณ ์ถ์ต๋๋ค. ์๋ชป๋. ๋๋ a'
๋ฐ a.'
๊ฐ ๋ ๋ค ์ ์น ์ต์
์ด๊ณ ๋ ์ค ํ๋๋ ์์๋ณ๋ก ๋ฐ๋ณต๋๋ค๋ ๊ฒ์ ๋ณด์ฌ ์ฃผ๋ฉด a.'
์ ์์ ๋ณ ์ฌ๊ท, ๊ทธ๋ฆฌ๊ณ ๋๋ ๋ค์ ํ๋ฆด ๊ฒ์
๋๋ค.
๋ฌผ๋ก , .
์๋ฏธํ๋ ๋ฐ์ ๋ํ ์ ์ ์ ์ ์ ๋ชจ๋ธ์์ด ๊ฒฝ์ฐ์ ์๋ชป๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๊ทธ ๊ตฌ๋ฌธ์ ์ ํํ๊ฒ ์๋ชป๋ ๋ฐฉ์์ผ๋ก ํด์ํ๋ ์ ์ผํ ์ฌ๋์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ฅผ ์ํด ๋น ์ฌ๊ท ์ ์น์ .'
์ด์ธ์ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
@rdeits ์ด ๊ตฌ๋ฌธ์ MATLAB์์ ํ์ ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๊ฒ์ (์์ฃผ ๋ฉ์ง) dot-call ๋ธ๋ก๋ ์บ์คํธ ๊ตฌ๋ฌธ์ด v0.5์ ๋์ ๋ ํ ์กฐ๊ธ ๋ถํ ํด์ก์ต๋๋ค.
์ฐ๋ฆฌ๋ MATLAB๊ณผ๋ ๋ณ๊ฐ๋ก ์ฐ๋ฆฌ ์์ ์ ๊ธธ์ ๋ง๋ค์ด์ ์ด๊ฒ์ ๋ฐ๊ฟ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ ๋ ๊ทธ๊ฒ์ ๋ํด ์ด๋๊ฐ์ ๋ณ๋์ ๋ ผ์๊ฐ ์์๋ค๊ณ ๋ฏฟ์ต๋๋ค (๋๊ตฌ๋ ์ง ์ด๋์ ๊ธฐ์ตํฉ๋๊น?).
์, ์ํ๊น ๋ค์. ๊ฐ์ฌ!
๋ ๋ค๋ฅธ ํ ์ผ :
transpose
๋ฐ adjoint
์ ์ผ์นํ๋๋ก issymmetric
๋ฐ ishermitian
adjoint
โ ๊ฐ ์์ ์ ์๋ ๋น ์ฌ๊ท์ด๊ณ ํ์๋ ์ฌ๊ท์
๋๋ค.Matlab .'
๊ตฌ๋ฌธ์ ์๋ก์ด .
๊ตฌ๋ฌธ์ ๋งฅ๋ฝ์์ ํ์คํ ๋งค์ฐ ๋ถํํฉ๋๋ค. ๋๋ ์ด๊ฒ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋ฐ๋ํ์ง ์์ ๊ฒ์ด์ง๋ง, ์ฐ๋ฆฌ๋ ์ ์น์ ๋ํ ์๋ก์ด ๊ตฌ๋ฌธ์ด ํ์ํ๊ณ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์ ์๋์ง ํ์ ํ์ง ๋ชปํฉ๋๋ค. ๋๊ตฌ๋ ์ง ์กฐ์ฎ๊น์ ๋ํ ์ ์์ด ์์ต๋๊น?
์ ์น ๊ตฌ๋ฌธ ํ ๋ก ์ ์ฌ๊ธฐ๋ก ์ด๋ํด ๋ณด๊ฒ ์ต๋๋ค : https://github.com/JuliaLang/julia/issues/21037.
transpose
/ ctranspose
/ adjoint
/ A::Matrix{Matrix{T}}
๋ธ๋ก ํ๋ ฌ์ฒ๋ผ ์ทจ๊ธํ์ง ์์ต๋๋ค. @andyferris ๊ฐ ์ ์ด๋ ๋ถ๋ถ์ ์ผ๋ก ์์ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๊ฒ์ผ๋ฅธ hvcat
๊ฐ๊ฐ. ์ฆ, 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
๋ ๊ฐ์ง ์ต์
์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ ๋ค์์ transpose
๋ ๋น ์ฌ๊ท ์ ์ด๋ฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด :
ctranspose
.ctranspose
.@stevengj , @jiahao , @andreasnoack โ ์ฌ๊ธฐ์ ์ ํธํ๋ ๊ฒ์ ๋ฌด์์ ๋๊น? ๊ธฐํ?
@jiahao ์ JuliaCon 2017 ํ ํฌ ์ดํ๋ก
๋์๊ฒ ์ฌ์ ํ ์ ํ ๋์๋ "์ค์นผ๋ผ"ํ๋์ ๊ด๋ จํ์ฌ T
์์ ์ ํ์ผ๋ก ์ ์๋์ด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. T
๊ฐ ํ๋ ์ธ ๊ฒฝ์ฐ ( +
, *
๋ฐ conj
( -
, /
, .. .)) ๊ทธ๋ฌ๋ฉด Base.LinAlg
๋ฉ์๋๊ฐ ์คํจํด์ผํ๋ ์ด์ ๋ฅผ ์ ์ ์์ต๋๋ค.
OTOH ์๋ฅผ ๋ค์ด ๋ธ๋ก ํ๋ ฌ์ ์ ์น์ ๋ํด ์ด์ผ๊ธฐํ๋ ๊ฒ์ ๋งค์ฐ ์ผ๋ฐ์ ์ด๋ฉฐ ์ ํจํฉ๋๋ค. ์๋ฅผ ๋ค์ด, "1 ์ฐจ"์ค์นผ๋ผ ์ธํธ, "2 ์ฐจ"์ค์นผ๋ผ ์ธํธ, "3 ์ฐจ"์ธํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ธํธ ์ธํธ๋ฅผ ๋ ผ์ ํ ๋ ๋ฐ์ํ๋ ์ด์ํ ์ง์ ์ ๋ค๋ฃจ๋ "์ํ์ "์ ํ ์ด๋ก ์์ ๋ฐฐ์ธ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฃผ๋ฌธ "์ค์นผ๋ผ ์ธํธ ์ธํธ ๋ฑ์ด ์์ต๋๋ค. ๋ฐฐ์ด ๋ฐฐ์ด์ ๋ค๋ฃฐ ๋๋ ์ฌ๊ธฐ์ ๋์ผํ ๋ฌธ์ (๋ฐ ๊ธฐํ)๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. Julia์ ์ ํ ์์คํ ์ ์ฌ์ฉํ์ฌ "์ง์ ํ"์ค์นผ๋ผ์ "1 ์ฐจ"๋ฐฐ์ด, ์ค์นผ๋ผ ๋ฐฐ์ด์ "2 ์ฐจ"๋ฐฐ์ด ๋ฑ์ ์ค๋ช ํ ์ ์์ต๋๋ค. . ์ ๋ @stevengj , ์ ์ ๋ค๋ฅธ ์ฌ๋๋ค ์ฌ์ด์ ๊ธด ํ ๋ก ์ด ์, ์์์ "์์"์ ๋ฐฐ์ด๊ณผ์ด ํ๋ ์ ์ํฌ์์ ์ผ๊ด๋ ์ฐ์ฐ ์งํฉ์ ์๊ฐ ๋น๋กฏ ๋์๋ค๊ณ ์๊ฐํฉ๋๋ค. (c) transpose๋ ๋ช ํํ๊ณ ์ ํํ๊ฒ ์ฌ๊ท ์ ์ด์ง๋ง ๊ทธ๋ ๊ฒ ํ ํ์๋ ์์ต๋๋ค. Jiahao์ ๊ฐ์ฐ์ด ๋ช ํํ๊ฒ ์ง์ ํ๋ฏ์ด, ํ๋ก๊ทธ๋๋ฐ ์ธ์ด / ํ๋ ์ ์ํฌ๋ ์ค์นผ๋ผ๋ฅผ ๋ฐฐ์ด (๋๋ ์๋)๊ณผ ๊ตฌ๋ณํ๊ณ ๋ฒกํฐ๋ฅผ ํ๋ ฌ (๋๋ ์๋)๊ณผ ๊ตฌ๋ณํ๋ ๊ฒ์ ๋ํ ์๋ฏธ ๋ก ์ ์ ํ์ํ๋ฉฐ, ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ํ ์์๋ ๊ด๋ จ ์ ํ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋์๊ฒ ์ค์ํ ์ ์ "์์์ ์์"๋ฐฐ์ด์ด ์๋ํ๋๋กํ๋ ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก ๋ฒกํฐ์ ํ๋ ฌ์์๋ง ์ ์๋๋ ์ผ๋ถ ์ฐ์ฐ์ "์ค์นผ๋ผ"์ ๊ฐ๋ฅด์ณ์ผํ๋ค๋ ๊ฒ์
๋๋ค. ์ด๋ฅผ ์ํํ๋ ํ์ฌ Julia ๋ฉ์๋๋ transpose(x::Number) = x
์
๋๋ค. ๊ทธ๋ฌ๋์ด ๋ฐฉ๋ฒ์ ์ ๊ฑฐํ์ฌ ๋ฐฐ์ด๊ณผ ์ค์นผ๋ผ ์ฌ์ด์ ์๋ฏธ ๊ตฌ๋ถ์ ํ์ฅํ๋ ๊ฒ์ด ์ ๋ง ๋ ์ข์ ๊ฒ์
๋๋ค.
๋ค์ ๋จ๊ณ๋ Base.LinAlg
์ 1 ์ฐจ ํ๋ ฌ๊ณผ 2 ์ฐจ ํ๋ ฌ์ ์ฐจ์ด๋ฅผ ๊ฐ๋ฅด์น๋ ๊ฒ์
๋๋ค. ๋๋ ๋ ๊ฐ์ง ์คํ ๊ฐ๋ฅํ ์ต์
์ ์๊ฐํ์ต๋๋ค. ๋ ๋ง์ ๊ฒ์ด์์ ์ ์์ต๋๋ค. ์ ๋ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
T
์ด AbstractMatOrVec
์ผ ๋ transpose(::AbstractMatrix{T})
์ด ์ฌ๊ท ์ ์ด๋ฉฐ T
๊ฐ a Number
, ๊ทธ๋ ์ง ์์ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ๊ฒ ๋ง๋ญ๋๋ค (์ตํธ ์ธ, ์ตํธ ์์ ๋ฑ). (์ด๋ค๋ฉด์์ ์ด๊ฒ์ ์์์ ๋ํ transpose
๋ฉ์๋์ ๋์์ ์ ์ดํ์ฌ ํ์ฌ ์ํ๋๊ณ ์์ง๋ง, (outer)์ transpose
๋ฉ์๋ ๋์์ ์ ์ดํ๋ โโ๊ฒ์ด ๋ ๊น๋ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ) ๋ฐฐ์ด).Array
ํฌํจํ์ฌ ๋๋ถ๋ถ์ AbstractArray
๊ฐ ์ฒซ ๋ฒ์งธ ์์๋ผ๊ณ ์ฃผ์ฅํ๊ณ (์์ ๊ฐ ์ค์นผ๋ผ ํ๋ ์) ๋ค๋ฅธ AbstractArray
์ ํ (์ NestedArray
)์ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด์ ๋ํํ๊ณ ํด๋น ์์๊ฐ ์ค์นผ๋ผ๊ฐ ์๋ ๋ฐฐ์ด๋ก ์ฒ๋ฆฌ๋จ์ "ํ์"ํฉ๋๋ค. ๋๋ ์ด๊ฒ์ ์กฐ๊ธ ๊ฐ์ง๊ณ ๋์ ๋ณด์์ง๋ง ์์ ์ต์
์ ์๋ง๋ ์ฌ์ฉ์์๊ฒ ๋ถ๋ด์ด ๋ํ ๊ฒ ๊ฐ์ต๋๋ค.์ค๋ฆฌ์๊ฐ ๋ฐฐ์ด๊ณผ ์ค์นผ๋ผ ์ฌ์ด์ ๊ฐ๋ ฅํ ์๋ฏธ ๋ก ์ ๋ถ๋ฆฌ๋ฅผํ๊ณ ์์ผ๋ฉฐ, ์ค์นผ๋ผ๊ฐ ๋ฐฐ์ด ์์ฑ 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 ํ๋ ฌ๋ก ์ฌ๊ตฌ์ฑ ํ ๋ Vector{String}
. ํ์
๋ณ๋ก ์์ ํ๊ธฐ๋ ์ฝ์ง๋ง ์ฑ๊ฐ์ ๊ฒ์ ์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๊ท ์ ์ ์๋ ์ํ์ ์ผ๋ก ์ณ๊ณ "์ ํํ์ง๋ง ๋ง์ ๊ฒฝ์ฐ์ ์ฑ๊ฐ์๋ค"๋ ๊ฒ์ด "ํธ๋ฆฌํ์ง๋ง ๋๋ฌผ๊ฒ ์๋ชป๋ ๊ฒฝ์ฐ"๋ณด๋ค ๋ซ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
๊ฐ๋ฅํ ํด๊ฒฐ์ฑ
์ ์ฒซ ๋ฒ์งธ ๊ธ ๋จธ๋ฆฌ ๊ธฐํธ์์ ์ ์ ํ ์ ์์ต๋๋ค. ์ฆ, ๋ฐฐ์ด๊ณผ ๊ฐ์ ์์์ ๋ํ ์ฌ๊ท ์ ์น ๋ง ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ๋๋ T<:AbstractVecOrMat
๊ฐ ์ํ๋ฅผ "ํธ๋ฆฌํ์ง๋ง ๋งค์ฐ ๋๋ฌธ ๊ฒฝ์ฐ์ ์๋ชป๋จ"์ผ๋ก ๋ณ๊ฒฝํ๋ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ๋ฅผ ์ปค๋ฒ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฌ์ ํ ์๋ชป๋ ์ด์ ๋ AbstractArray
์ธํฐํ์ด์ค๊ฐ ์ฃผ๋ก ๋ฐฐ์ด ( getindex
) ์๋ฏธ๋ก ์ ๊ดํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ผ๋ถ ์ฐ์ฐ์์ ์ ์ฌํ ์ ํ์ด AbstractMatrix
๋ฒ์ฃผ์ ๋ง์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค. , ์ ํ ๋์๊ฐ ์๋๋๋ค.
@andyferris , ์ค์นผ๋ผ์ adjoint ๋ฐ dual์ ์๋ฒฝํ๊ฒ ์ ์ ์๋์ด ์์ผ๋ฉฐ ctranspose(x::Number) = conj(x)
๊ฐ ์ ํํฉ๋๋ค.
๋ด ๋๋์ transpose
์ ๋๋ถ๋ถ์ ์ฌ์ฉ์ด "๋น ์ํ"์ด๊ณ ctranspose
์ ๋๋ถ๋ถ์ ์ฌ์ฉ (์ฆ, ํ์ฉ ํ๋์ด ํ์ํ ์ฉ๋)์ ์ํ์ ์ธ ๊ฒ์
๋๋ค (ํ์ฉํ ๋ค๋ฅธ ์ด์ ๊ฐ ์๊ธฐ ๋๋ฌธ) ). ๋ฐ๋ผ์ ๋น ์ฌ๊ท transpose
๋ฐ ์ฌ๊ท ctranspose
์ ํธํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก, ์ค์ฒฉ ๋ Arrays
๋ก ๋ธ๋ก ๋ฐฐ์ด์ ์ดํด ๋ณด๋ ค๊ณ ํ๋ ๊ฒ์ ์ฌ๊ธฐ์ ์ด์ ๋๋ฌธ์ ๋ณต์กํด์ง๋ฉฐ https://github.com/KristofferC/BlockArrays.jl์ ๋ํ ์ ์ฉ ์ ํ์ ๊ฐ๋ ๊ฒ์ด ๋ ์ข์ต๋๋ค. ์ด.
@KristofferC ๋ฉ์ง๋ค์.
@stevengj ๊ฐ ์์์ AbstractArray
์๋ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ๋ค์ ๋ํด ์ฌ๊ท (c) ์ ์น๋ฅผํ๋ ๋ฐฉ๋ฒ์ด ํ์คํ ํ์ํฉ๋๋ค. ๋น์ ์ด ์ด๊ฒ์ ๋ํด ์๊ฐํ๋์ง ์๋์ง๋ ํ์คํ์ง ์์ง๋ง ๋๋ ๊ทธ๊ฒ์ ์ธ๊ธ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
์ด ์ฃผ์ ์ ๋ํ slack / # linalg ๋ํ์ ํ์ด๋ผ์ดํธ. ์์ ์ค๋ ๋ ์ค ์ผ๋ถ๋ฅผ ์์ฝํฉ๋๋ค. ์๋ฏธ๋ก ์ ์ค์ ์๋๊ณ ์ฒ ์๋ฅผ ํผํฉ๋๋ค. (๊ทธ ๋ํ์ ์ฐธ์ฌ ํด์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค! :))
์๋ฏธ ์ ์ผ๋ก ๊ตฌ๋ณ๋๋ ์ธ ๊ฐ์ง ์์
์ด ์์ต๋๋ค.
1) "์ํ์ adjoint"(์ฌ๊ท ๋ฐ ๊ฒ์ผ๋ฅธ)
2) "์ํ์ ์ ์น"(์ด์์ ์ผ๋ก๋ ์ฌ๊ท์ ์ด๊ณ ๊ฒ์ผ๋ฅธ)
3) "๊ตฌ์กฐ์ ์ ์น"(์ด์์ ์ผ๋ก๋ ๋น ์ฌ๊ท์ ์ด๊ณ "์ด์ฌ")
ํ์ฌ ์ํฉ : permutedims(C, (2, 1))
์ฐจ์ C
๊ฒฝ์ฐ "mathematical adjoint"๋ ctranspose
๋งคํ๋๊ณ , "mathematical transpose"๋ transpose
๋งคํ๋๊ณ , "structural transpose"๋ permutedims(C, (2, 1))
์ ๋งคํ๋ฉ๋๋ค transpose
๊ทธ๋ฆฌ๊ณ reshape(C, 1, length(C))
ํ dimesional์ ๋ํ C
. ๋ฌธ์ : "๊ตฌ์กฐ์ ์ ์น"๋ ์ผ๋ฐ์ ์ธ ์์
์ด๋ฉฐ permutedims
/ reshape
์คํ ๋ฆฌ๋ ์ค์ ๋ก ๋ค์ ํผ๋ ์ค๋ฝ๊ฑฐ๋ ๋ถ์์ฐ ์ค๋ฝ๊ฑฐ๋ ์ง์ฆ๋ฉ๋๋ค.
๋ฐ์ ๋ฐฉ๋ฒ : ์ด์ ์ "๊ตฌ์กฐ์ ์ ์น"๋ transpose(x::Any) = x
, ctranspose(x::Any) = conj(x)
๋ฐ conj(x::Any) = x
์ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋ฌด ์์
ํด๋ฐฑ์ ํตํด "์ํ์ adjoint"/ "์ํ์ ์ ์น"์ ๊ฒฐํฉ๋์์ต๋๋ค. ์ด๋ฌํ ๋์ฒด๋ก ์ธํด [c]transpose
๋ฐ ๊ด๋ จ ์ ๋ฏธ์ฌ ์ฐ์ฐ์ '
/ .'
๊ฐ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ "๊ตฌ์กฐ์ ์ ์น"์ ์ฌ์ฉ๋ฉ๋๋ค. ํฐ. ๊ทธ๋ฌ๋ ๊ทธ๋ค์ ๋ํ ์ผ๋ถ ์ฌ์ฉ์ ์ ์ ์ซ์ ์ ํ์ ๋ํ [c]transpose
๊ด๋ จ ์์
์ด ํด๋น ์ ํ์ ๋ํ [c]transpose
์ ๋ฌธํ ์ ์์์ด ์๋์ผ๋ก ์คํจ (์๋ชป๋ ๊ฒฐ๊ณผ ๋ฐํ)ํ๋๋กํ์ต๋๋ค. ์์ผ. ๋ฐ๋ผ์ ์ด๋ฌํ ์ผ๋ฐ์ ์ธ no-op ํด ๋ฐฑ์ด ์ ๊ฑฐ๋์ด ํ์ฌ ์ํฉ์ด ๋ฐ์ํ์ต๋๋ค.
๋ฌธ์ ๋ ์ง๊ธ ๋ฌด์์ํด์ผ ํ๋๊ฐ์ ๋๋ค.
์ด์์ ์ธ ๊ฒฐ๊ณผ : "๊ตฌ์กฐ์ ์ ์น"๋ฅผ ์ํด ํตํฉ๋๊ณ ์์ฐ์ค๋ฝ๊ณ ๊ฐ๊ฒฐํ ์ฃผ๋ฌธ์ ์ ๊ณตํฉ๋๋ค. ์๋ฏธ ๋ก ์ ์ผ๋ก ์ฌ๋ฐ๋ฅธ ์ํ์ adjoint ๋ฐ transpose๋ฅผ ๋์์ ์ง์ํฉ๋๋ค. ์ฌ์ฉ ๋๋ ๊ตฌํ์ ๊น๋ค๋ก์ด ์ฝ๋ ์ผ์ด์ค๋ฅผ ๋์ ํ์ง ๋ง์ญ์์ค.
๋ ๊ฐ์ง ๊ด๋ฒ์ํ ์ ์์ด ์์ต๋๋ค.
(1) ์ํ์ ์ธ์ , ์ํ์ ์ ์น ๋ฐ ๊ตฌ์กฐ ์ ์น๋ฅผ ๊ตฌ๋ฌธ ์ ์ผ๋ก, ์๋ฏธ ์ ์ผ๋ก ๊ตฌ๋ณ๋๋ ์ธ ๊ฐ์ง ์ฐ์ฐ์ผ๋ก ์ ๊ณตํฉ๋๋ค. ์ฅ์ : ๋ชจ๋ ๊ฒ์ด ์๋ํ๋๋กํ๊ณ ๊ฐ๋ ์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ๋ฉฐ ๊น๋ค๋ก์ด ์ฝ๋ ์ผ์ด์ค๋ฅผ ํผํฉ๋๋ค. ๋จ์ : ์ค๋ช ํ๊ณ ๊ตฌํํด์ผํ๋ ์ธ ๊ฐ์ง ์์ .
(2) ๊ตฌ๋ฃ ์ฃผ๊ฑฑ์ ์ธ ๊ฐ์ง ์์ ์ ๋ ๊ฐ๋ก ๋๋๋๋ค. ์ด ์ ์์๋ ์ธ ๊ฐ์ง ํํ๊ฐ ์์ต๋๋ค.
(2a) transpose
์๋ฏธ ์ ์ผ๋ก "๊ตฌ์กฐ์ ์ ์น"๋ก ๋ง๋ค๊ณ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ "์ํ์ ์ ์น"๋ก๋ ์ฌ์ฉํฉ๋๋ค. ์ฅ์ : ๋ ๊ฐ์ง ์์
. ์ค์นผ๋ผ ์์๊ฐ ๋ชจํธํ์ง ์์ ์ปจํ
์ด๋์ ๋ํด ์์๋๋ก ์๋ํฉ๋๋ค. ๋จ์ : "์ํ์ ์ ์น"์๋ฏธ๋ก ์ ๊ธฐ๋ํ๋ ์ฌ๋์ ๋ถ๋ช
ํ ์ค์นผ๋ผ ์์๊ฐ์๋ ์ปจํ
์ด๋๋ณด๋ค ๋ ๋ณต์กํ ๊ฐ์ฒด์ ๋ํด ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ์๋์ผ๋ก ์์ ํฉ๋๋ค. ์ฌ์ฉ์๊ฐ์ด ๋ฌธ์ ๋ฅผ ํฌ์ฐฉํ๋ฉด "์ํ์ ์ ์น"์๋ฏธ ์ฒด๊ณ๋ฅผ ๋ฌ์ฑํ๋ ค๋ฉด ์๋ก์ด ์ ํ ๋ฐ / ๋๋ ๋ฉ์๋๋ฅผ ์ ์ํด์ผํฉ๋๋ค.
(2b) ์ ํ์ "์ํ ์ฑ"์ ๋ํ๋ด๋ ํน์ฑ์ ์๊ฐํฉ๋๋ค. ๊ฐ์ฒด์ adjoint / transpose๋ฅผ ์ ์ฉ ํ ๋ ์ปจํ
์ด๋ / ์์ ์ ํ์ด "mathy"์ด๋ฉด ๋ฐ๋ณต๋ฉ๋๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด ์ฌ๊ทํ์ง ๋ง์ญ์์ค. ์ฅ์ : ๋ ๊ฐ์ง ์์
. ๋ค์ํ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ๋ฅผ ๋ค๋ฃฐ ์ ์์ต๋๋ค. ๋จ์ : ์ผ๋ฐ์ ์ธ no-op [c]transpose
ํด ๋ฐฑ๊ณผ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ฆ, ํ์ํ ํน์ฑ ์ ์๊ฐ์๋ ์ฌ์ฉ์ ์ ์ ์ซ์ ์ ํ์ ๋ํด ์๋์ผ๋ก ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ์์ฑ ํ ์ ์์ต๋๋ค. ๊ตฌ์กฐ ์ ์น๋ฅผ "์ํ"์ ํ์ผ๋ก ์ ์ฉํ๊ฑฐ๋ ์ํ์ ์ ์น๋ฅผ "์ํ์ด ์๋"์ ํ์ผ๋ก ์ ์ฉ ํ ์ ์์ต๋๋ค. ๋ชจ๋ ๊ฒฝ์ฐ์ ๊ฐ์ฒด๊ฐ "์ํ"์ธ์ง ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ์ด ๋ช
ํํ์ง ์์ต๋๋ค. (์ : ์์ ์ ํ์ด ์ถ์์ด๋ฉด ์ด๋ป๊ฒ๋ฉ๋๊น? ์ฌ๊ท / ๋น ์ฌ๊ท ๊ฒฐ์ ์ ๋ฐํ์ ๋ฐ ์์ ๋ณ ๋๋ ๋ฐํ์์ด๋ฉฐ ์งํฉ ์ ํ์ ํ์ธํ๊ธฐ ์ํด ์ปจํ
์ด๋์ ๋ชจ๋ ์์๋ฅผ โโ๋จผ์ ์ค์ํด์ผํฉ๋๊น?)
(2c) adjoint
( ctranspose
) "mathematical adjoint"๋ฐ transpose
"mathematical transpose"๋ฅผ ์ ์งํ๊ณ adjoint
๋ํ ํน์ (์ผ๋ฐ ๋์ฒด ์๋) ๋ฉ์๋๋ฅผ ๋์
ํฉ๋๋ค. / ์ซ์๊ฐ ์๋ ์ค์นผ๋ผ ์ ํ์ ๊ฒฝ์ฐ transpose
(์ : adjoint(s::AbstractString) = s
). ์ฅ์ : ๋ ๊ฐ์ง ์์
. ์ํ์ ์๋ฏธ๋ฅผ ์์ ํฉ๋๋ค. ๋จ์ : ์ซ์๊ฐ ์๋ ์ ํ์ ๋ํด adjoint
/ transpose
๋จํธ์ ์ธ ์ ์๊ฐ ํ์ํ๋ฏ๋ก ์ผ๋ฐ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฉํดํฉ๋๋ค. ๊ตฌ์กฐ ์ ์น๋ฅผ "์ํ"์ ํ์ ์ ์ฉ ํ ์ ์์ต๋๋ค.
์ ์ (1) ๋ฐ (2a)๋ (2b) ๋ฐ (2c)๋ณด๋ค ํจ์ฌ ๋ ๊ด๋ฒ์ํ ์ง์์ ๋ฐ์์ต๋๋ค.
# 19344, # 21037, # 13171 ๋ฐ slack / # linalg์์ ๋ ๋ง์ ํ ๋ก ์ ์ฐพ์ผ์ญ์์ค. ๋ฒ ์คํธ!
๋ฉ์ง ๊ธ์ ์จ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
์ต์
1๊ณผ ์ ์ด์ธ๋ฆฌ๋ ๋ ๋ค๋ฅธ ๊ฐ๋ฅ์ฑ์ ํ์ ์ถ๊ฐํ๊ณ ์ถ์ต๋๋ค. ์ํ์ ํ๋ ฌ๊ณผ ํ ํ์ ๋ฐ์ดํฐ์ ๋ํด ์๋ก ๋ค๋ฅธ ์ปจํ
์ด๋ ์ ํ์ ๊ฐ์ต๋๋ค. ๋ค์์ ์๋ฏธ A'
์ ํ์ ์ํด ๊ฒฐ์ ๋ ์ A
(์ฐธ๊ณ : ์์ ํ ๋ฐ์ ๊ฐ์ด,ํ์ง์ ์์ ์ ํ). ์ฌ๊ธฐ์ ๋จ์ ์ ๋ ์ฌ์ด์ ๋ง์ convert
s๊ฐ ํ์ํ ์ ์์ผ๋ฉฐ ๋ฌผ๋ก ๋งค์ฐ ํ๊ดด์ ์ผ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ๋ฌผ๋ก ํํ์ด ์ด๋ฌํ ์ค๋จ์ ์ ๋นํ ํ ์ ์์์ง ํ์์ ์ด์ง๋ง ์ฌ์ ํ ์ธ๊ธํ๊ณ ์ถ์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค, ํ๋ฅญํ ๊ธ์ ๋๋ค. ๋๋ (1)์ ํฌํํฉ๋๋ค.
์ข์ ๊ธ์ ์ฐ์ธ์. (1)์ ์ฒ ์๋ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค.
a'
(์ฌ๊ท, ์ง์ฐ)conj(a')
(์ฌ๊ท, ๊ฒ์ผ๋ฅธ)a.'
(๋น์ฌ ๊ท์ , ์ด๋ง)๋ฐ๋ผ์ ๋ฐ๋์ ์๋ก์ด ์ฐ์ฐ์๋ฅผ ๋์
ํ ํ์๋ ์์ต๋๋ค. ์ํ์ ์ ์น๋ ๋จ์ง ์ธ์ ๋ฐ ์ผค๋ ์ ๊ตฌ์ฑ (๊ฒ์ผ๋ฅด๊ณ ๋ฐ๋ผ์ ํจ์จ์ ์ธ) ์ผ๋ฟ์
๋๋ค. ๊ฐ์ฅ ํฐ ๋ฌธ์ ๋ ๋ ๊ฐ์ ์ ์ฌํ๊ฒ ๋ณด์ด๋ ์ฐ์ฐ์, ์ฆ ํ์ '
๋ฐ .'
๋ฅผ ์๋ฏธ ์ ์๋นํ ๊ตฌ๋ณ๋๋ค๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ฅ ์ ํํ ์ผ๋ฐ ์ฝ๋์์ ๋๊ตฐ๊ฐ๊ฐ '
๋๋ .'
์ (๋ฅผ) ์ฌ์ฉํ๋์ง ์ฌ๋ถ๋ "์ด๊ฒ์ ์ธ์ ํญ๋ชฉ์ ์ค"๋๋ "์ค์"์ ์๋ฏธํ๋์ง์ ๋ํ 99 % ์ ํํ ์งํ๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค. ์ด ๋ฌผ๊ฑด์ ์ฐจ์ ". ๊ฒ๋ค๊ฐ ๋๊ตฐ๊ฐ๊ฐ '
ํ๊ณ ์ค์ ๋ก "์ด๊ฒ์ ์ฐจ์์ ๋ฐ๊พธ๋ ๊ฒ"์ ์๋ฏธํ๋ ๊ฒฝ์ฐ, ๊ทธ๋ค์ ์ฝ๋๋ ์ค์นผ๋ผ ์ธ์ ์์๊ฐ ์ฌ์ํ์ง ์์ ํ๋ ฌ (์ : ๋ณต์์)์ ๋ํด ์ด๋ฏธ ์๋ชป๋ ๊ฒ์
๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ์ค์ ๋ก "์ด๊ฒ์ ๊ฒฐํฉ์ ์ผค๋ ๋ฅผ ์ค"๋ฅผ ์๋ฏธํ๋ ๋๋จธ์ง ๋ช ๊ฐ์ง ๊ฒฝ์ฐ์์, ๋๋ conj(a')
๋ฅผ ์ฐ๋ ๊ฒ์ด ์ค์ ๋ก ์ฌ๋๋ค์ด ์ค์ ๋ก a.'
๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ทธ ์๋ฏธ๋ฅผ ํจ์ฌ ๋ ๋ช
ํํ๊ฒ ๋ง๋ ๋ค๊ณ ์ฃผ์ฅํฉ๋๋ค. " a
์ ํฌ๊ธฐ ๋ฐ๊พธ๊ธฐ"๋ฅผ ์๋ฏธํฉ๋๋ค.
์ด๋ฅผ ์ํด ํ์ํ ๋ชจ๋ ๊ธฐ๋ณธ ์ ๋ค๋ฆญ ์ ํ์ ์์ ํ๋ ๊ฒ์ ์์ง ๊ฒฐ์ ๋์ง ์์์ง๋ง @andyferris ์ @andreasnoack์ ์ด๋ฏธ ๋ฌธ์ ์ ๋ํด ๋ช ๊ฐ์ง ์๊ฐ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๊ฐ๋ฅํด ๋ณด์ ๋๋ค.
์ด ํ ๋ก ์ ๋ค๋ฅธ ๊ณณ์์ ์งํ๋์์ผ๋ฏ๋ก ๋๋ ์
๋ฐ์ดํธํด์ผํ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ์ด ์ ์์ ๋ํด ๋ด๊ฐ ์์ ํ ๋์น ํ ๊ฐ์ง (๋ถ๋ช
ํ?)๊ฐ ์๋ค๋ ๊ฒ์ ์ธ์ ํฉ๋๋ค. ์ ํ ๋์์ .'
๋ฅผ ๊ณ์ ์ฌ์ฉํ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ์ง๋ง ์ด๊ฒ์ด ์ฌ์ค์ด ์๋์ ๊นจ๋ฌ์์ด์ผํ์ต๋๋ค !
์๋ฅผ ๋ค์ด, vector.'
๋ ๋ ์ด์ RowVector
ํ์๊ฐ ์์ต๋๋ค ( RowVector
๋ ์ ํ ๋์ ๊ฐ๋
์ด๋ฏ๋ก "์ด์ค"๋ฒกํฐ์ ๋ํ ์ฒซ ๋ฒ์งธ ์๋)-๊ฐ๋จํ๊ฒ Matrix
์ด์ด์ผํฉ๋๋ค. ์ ํ ๋์์์ "๋น๊ณต ์ก ์ ์น"๋ฅผ ์ํ ๋ ์ ๊ฐ ์ค์ ๋ก ํ๋ ๊ฒ์ conj(adjoint(a))
์
๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๊ณ ๋ชจ๋ ์ ํ ๋์ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ๋๋ก ๊ถ์ฅํ๋ ๊ฒ์
๋๋ค (์ง๊ธ๊น์ง ๋ด๊ฐ ์ ๋ง๋ก ์ํ๋ ๊ฒ์ด adjoint
์์ ๋ ๋ด๊ฐ ์๊ณ ์๋ ๋ชจ๋ ํ๋ ฌ (๋๋ ๋ฒกํฐ)์ ์ ์นํ๋ ๋ฐ a'
๋์ a.'
์ฌ์ฉํ๋ MATLAB ์ดํ๋ก ์ค๋ซ๋์ "๋์"์ต๊ด์ด์์์ต๋๋ค. adjoint
(๋๋ ์ด์ค)-์ด๋ฆ ๋ณ๊ฒฝ์ ์ฌ๊ธฐ์ ํฐ ๋์์ด ๋ ๊ฒ์
๋๋ค).
๋๋ ๋ํ ์ด๊ฒ์ด ํฅ๋ฏธ๋ก์ด ๊ณต๊ฐ์ ์ด์ด ์ค๋ค๋ ์ ์ ๊ฐ๋จํ ์ง์ ํ ๊ฒ์ด๋ค. ์ด์ ์๋ vector'
๋ฐ vector.'
๊ฐ "๋ฐ์ดํฐ ์ ์น"๋ฅผ ์ํํ๊ณ ์ด์ค ๋ฒกํฐ์ ๊ฐ์ ๊ฒ์ ์ทจํ๋ ์ด์ค ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํด์ผํ์ต๋๋ค. .'
๋ ๋ฐฐ์ด ํฌ๊ธฐ๋ฅผ ์กฐ์ํ๊ธฐ์ํ ๊ฒ์ด๊ณ '
๋ ์ ํ ๋์ ๊ฐ๋
์ด๋ฏ๋ก RowVector
์ 1D DualVector
๋๋ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ ์ ์ผ๋ก. (์๋ง ์ฌ๊ธฐ์ ๋
ผ์ํ์ง ๋ง์์ผ ํ ๊ฒ์
๋๋ค. ๋๊ตฌ๋ ์ง ์ด์ ๋ํ ์์์ด ์๋ค๋ฉด ๋ณ๋์ ๋ฌธ์ ๋ฅผ ๋ง๋ค์ด ๋ณด๊ฒ ์ต๋๋ค.)
๋ง์ง๋ง์ผ๋ก Slack์์ ์ ์ ๋ ์คํ ๊ณํ์ ๋ณต์ฌํฉ๋๋ค.
1) transpose
์ LinAlg
์์ Base
์ฎ๊ธฐ๊ณ ๋ ์ด์ RowVector
๋ง๋ค์ง ์๊ฑฐ๋ ์ฌ๊ท ์ ์ด ์ง ์๋๋ค๋ depwarns (0.7 ๋ง ํด๋น)๋ฅผ ์ถ๊ฐํฉ๋๋ค (๊ฐ๋ฅํ ๊ฒฝ์ฐ).
2) ctranspose
์ adjoint
3) Vector
, ConjVector
๋ฐ RowVector
๊ฐ '
๋ฐ conj
๋ฐ *
์กฐํฉ์์ ์๋ํ๋์ง ํ์ธํ์ญ์์ค '
RowVector
์ด๋ฆ์ ๋ฐ๊ฟ๋๋ค. (์ฌ๊ธฐ์ ์ฐ๋ฆฌ๋ ๋ํ conj(vector)
๊ฒ์ผ๋ฅด๊ฒ ๋ง๋ญ๋๋ค).
4) conj
๋ฐ ConjMatrix
์๋ ์ ์ํธ ์์ฉํ๋ lazy matrix adjoint๋ฅผ ๋์
ํ์ญ์์ค.
5) A_mul_Bc
๋ฑ์ ์ ๊ฑฐํฉ๋๋ค. A_mul_B!
์ mul!
(๋๋ *!
)๋ก ๋ฐ๊ฟ๋๋ค.
6) ์ด์ต
@stevengj ๋ ๋ค์
@andyferris , ์ค์นผ๋ผ์ adjoint ๋ฐ dual์ ์๋ฒฝํ๊ฒ ์ ์ ์๋์ด ์์ผ๋ฉฐ
ctranspose(x::Number) = conj(x)
๊ฐ ์ ํํฉ๋๋ค.
๊ธฐ๋ก์ ์ํด ๋๋ ์ด๊ฒ์ ํ์คํ ๋์ํฉ๋๋ค.
๋ด ๋๋์ ๋๋ถ๋ถ์ transpose ์ฌ์ฉ์ด "non-mathy"์ด๊ณ ctranspose (...)์ ๋๋ถ๋ถ์ ์ฌ์ฉ์ ์ํ์ ์ด๋ผ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋์ ์์ด๋์ด๋ ์ด๊ฒ์ ๊ณต์ํํ๋ ๊ฒ์
๋๋ค : transpose
์ ๋ชจ๋ ์ฌ์ฉ์ "non-mathy"๊ฐ๋๊ณ adjoint
์ ์ ์ผํ ์ฌ์ฉ์ "mathy"๊ฐ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด,
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')
์ ๊ฐ์ ๋์์ ๊ตฌํํฉ๋๋ค.
๋์๊ฒ ์ฌ๋ฐ๋ฅธ ์๋ฃจ์
์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ ๋ฐ์ดํธ : ๋ด ๋ง์์ด ๋ฐ๋ ์์ต๋๋ค. ๋์นญ์ ์๋ง๋ ์ฃผ๋ก ์ ํ ๋์๋ฅผ์ํ ๊ฒ์ ๋๋ค.
์์ ์ ์ : ๋ ๋ฒกํฐ์ ๊ณฑ ( dotu
)์ ๋ํ ํฉ๊ณ๋ฅผ ๊ณ์ฐํ๋ ๊ฒ์ด ์ข
์ข
์ ์ฉํ๋ฉฐ, ์ค์นผ๋ผ๋ฅผ ๋ฐํํ๋ x.โy
๋์ด๋ฅผ ์ํํ๋ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์
๋๋ค. ๋ฐ๋ผ์ Matrix
์์ transpose(::Vector)
Matrix
๋ฅผ ๋ฐํํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
์, RowVector
์ด๋ฏ๋ก ์ค์นผ๋ผ๋ฅผ ๊ฐ์ ธ์์ผํฉ๋๋ค. (์กฐ์ฎ๊น์ ์ฌ๊ท ์ ์ด ์ง ์์ต๋๋ค).
์ ์ ์ ์ธ ์ฝ๋ฉํธ์ ๋ํด ๋ฏธ์ํ์ง๋ง์ด ์ค๋ ๋์ ๋ง์ ์ฌ๋๋ค์ด "๋ฒกํฐ ๊ณต๊ฐ์ ์ค์นผ๋ผ ๋ง"์ ๋ํด ๊ณ์ ์ด์ผ๊ธฐํฉ๋๋ค. ์ ์์ ๋ฐ๋ผ ๋ฒกํฐ ๊ณต๊ฐ์ ์ค์นผ๋ผ๋ ๋ง๋ฟ๋ง ์๋๋ผ ํ๋๋ฅผ ํ์ฑํด์ผํฉ๋๋ค. ๋ฒกํฐ ๊ณต๊ฐ๊ณผ ๋งค์ฐ ์ ์ฌํ์ง๋ง ์ค์นผ๋ผ๊ฐ ํ๋๊ฐ ์๋ ๋ง๋ง ํ์ฑํ๋ ๋์ ๊ตฌ์กฐ๋ฅผ "๋ชจ๋"์ด๋ผ๊ณ ํฉ๋๋ค.ํ์ง๋ง ๋ชจ๋์๋ฒ ์ด์ค์์ ์ฒ๋ฆฌํ๊ธฐ์๋ ๋๋ฌด ๋ํดํ๋ค๊ณ ์๊ฐํฉ๋๋ค. .. ๋ชจ๋.
์ ์ ๋ฐฐ์ด์ ์ง์ํ๋ฏ๋ก ๋ฒกํฐ ๊ณต๊ฐ๋ฟ๋ง ์๋๋ผ ๋ชจ๋๋ ํจ๊ณผ์ ์ผ๋ก ์ง์ํฉ๋๋ค. ๋ฌผ๋ก ์ ์ ๋ฐฐ์ด์ ๋ถ๋ ์์์ ๋ฐฐ์ด์ ํฌํจ ๋ ๊ฒ์ผ๋ก ๋์ ์ ์ผ๋ก ๋ณผ ์๋ ์์ผ๋ฏ๋ก ๋ฒกํฐ ๊ณต๊ฐ์ ๋ถ๋ถ ํํ์
๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๋ชจ๋ ํ ์ ์ ๋ฐฐ์ด์ ๋ง๋ค ์๋ ์์ต๋๋ค (์๋ฅผ ๋ค์ด). ๋น ํ๋ผ์ ๋ชจ๋๋ฌ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ค ํ๋์๋ ์์ฐ์ค๋ฝ๊ฒ ํฌํจ๋์ง ์๋ ๋ง์ผ๋ก ์์
ํ ๊ฒ์
๋๋ค. ๊ฐ๋จํ ๋งํด์, ์ฐ๋ฆฌ๋ ์ค์ ๋ก ๋จ์ํ ๋ฒกํฐ ๊ณต๊ฐ๋ณด๋ค๋ ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋์ ๊ณ ๋ คํ๊ณ ์ถ์ง๋ง, ์ฐ๋ฆฌ์ ๋ชฉ์ ์ ํฐ ์ฐจ์ด๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค (์ผ๋ฐ์ ์ผ๋ก +
์ *
๋ํด์๋ง ์ด์ผ๊ธฐํฉ๋๋ค).
์, Julia๋ ์ค์ ๋ฒกํฐ ๊ณต๊ฐ๋ฟ๋ง ์๋๋ผ ์ผ๋ฐ ๋ชจ๋์์ ๋์ ์ฐ์ฐ์ ํ์คํ ์ง์ํฉ๋๋ค. ํ์ง๋ง ๋ด๊ฐ ์ดํดํ๋ ๋ฐ์ ๊ฐ์ด ์ปค๋ฎค๋ํฐ์ ์ผ๋ฐ์ ์ธ ์ฒ ํ์ Base
ํจ์๋ " '์ผ๋ฐ์ ์ธ'์ผ๋ฐ ์ ํ ๋์ ๋ฃจํด"์ ์ผ๋์๋๊ณ ์ค๊ณ๋์ด์ผํ๋ค๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด ์ ์ ํ๋ ฌ์ ๋ํ ์ ํํ ์ ํ ๋์ ๊ณ์ฐ์ ' Base
์ ์ํ์ง ์์ -๋ฐ๋ผ์ ๊ธฐ๋ณธ์ ์ธ ๋์์ธ ๊ฒฐ์ ์ ๋ด๋ฆด ๋ ์ค์นผ๋ผ๊ฐ ํ๋๋ฅผ ํ์ฑํ๋ค๊ณ ๊ฐ์ ํด์ผํฉ๋๋ค. (๋น์ ์ด ๋งํ๋ฏ์ด, ์ค์ง์ ์ผ๋ก ๋งํ์๋ฉด, ๊ทธ๊ฒ์ ๊ทธ๋ค์ง ์ค์ํ์ง ์์ต๋๋ค.)
ํฌ๋ก์ค ํฌ์คํ https://github.com/JuliaLang/julia/pull/23424#issuecomment -346678279
์ด pull ์์ฒญ์ด ๋ํ๋ด๋ # 5332 ๋ฐ # 20978์ ์์ผ๋ก ์ด๋ํ๋ ค๋ ๋ ธ๋ ฅ์ ๊ฐ์ฌ ๋๋ฆฌ๋ฉฐ, ๋๋ถ๋ถ์ ๊ด๋ จ ๊ณํ์ ์ฐธ์ฌํ๊ณ ์์ต๋๋ค. ๋๋ ๋ํ์ด ํ ๋ฆฌํ์คํธ๊ฐ ๋ฐ์ ํ๋ ์ฉ์ด ์ ํ๊ณผ ๋ค์ด ์คํธ๋ฆผ ์ํฅ์ ๋์ฐธํ๊ณ ์ถ๊ณ , ๊ทธ๋ฌํ ์ ํ์ด ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์์ ํธ๋ ์ด๋ ์คํ ์ธํธ๋ฅผ ์ฐ์ถํ๋ค๋ ๊ฒ์ ์ ๊ธฐ์ ์ผ๋ก ์ค์ค๋ก ํ์ ์ํค๋ ค๊ณ ๋ ธ๋ ฅํฉ๋๋ค.
๋ด๊ฐ ๊ทธ ์ ์ฅ์ ํ์ ํ๋ ค๊ณ ํ ๋๋ง๋ค ๋๋ ๋๊ฐ์ ์ผ๋ จ์ ๋ถ์์ ์ข์ดํ๋ค. ์ด๋ฌํ ์๋ชป๋ ์ ์ค ํ๋๋์ด ์ ํ์ด
LinAlg
๊ฐ์ํ๋ ์๋นํ ๊ตฌํ ๋ณต์ก์ฑ์ ๋๋ค. ์ ์น์ ๋ฐฐ์ด ๋ค์ง๊ธฐ๋ฅผ ํฉ์น๋ฉดLinAlg
๊ฐ ๋ ๋ค ์ฒ๋ฆฌํด์ผํ๋ฏ๋กLinAlg
๋ ํจ์ฌ ๋ ํฐ ์งํฉ์ ์ง์ํด์ผํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์์ ์์ ์ ํ ์กฐํฉ.๊ณ ๋ ค ์ค๋ช ํ๊ธฐ
mul(A, B)
์ฌ๊ธฐ์A
๋ฐB
๋์ด ๋งจ์์ผ๋ก, ์๋ฐ ํ๋ ฌ ์ธ์, ์ ์น ๊ฐ์ธ๊ฑฐ๋ ๋ฐฐ์ด ํ๋ฆฝ ๋ํMatrix
S. ์ ์น์ ๋ฐฐ์ด ๋ค์ง๊ธฐ๋ฅผ ๋ณํฉํ์ง ์๊ณA
๋Matrix
, adjoint-wrappedMatrix
, transpose-wrappedMatrix
(๊ทธ๋ฆฌ๊ณ ๋ง์ฐฌ๊ฐ์ง๋กB
). ๋ฐ๋ผ์mul(A, B)
์ 9 ๊ฐ์ง ์ ํ ์กฐํฉ์ ์ง์ํด์ผํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ ์น์ ๋ฐฐ์ด ๋ค์ง๊ธฐ๋ฅผ ๋ณํฉํ๋ฉดA
๋Matrix
, adjoint-wrappedMatrix
, transpose-wrappedMatrix
๋๋ array-๊ฐ ๋ ์ ์์ต๋๋ค. ๋ค์ง์ด์ ํฌ์ฅ ๋Matrix
(๊ทธ๋ฆฌ๊ณ ๋ง์ฐฌ๊ฐ์ง๋กB
). ์ด์ mul(A, B)
์ 16 ๊ฐ์ ์ ํ ์กฐํฉ์ ์ง์ํด์ผํฉ๋๋ค.์ด ๋ฌธ์ ๋ ์ธ์ ์์ ๋ฐ๋ผ ๊ธฐํ ๊ธ์์ ์ผ๋ก ์ ํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, conflation์์ด
mul!(C, A, B)
๋ 27 ๊ฐ์ง ์ ํ์ ์กฐํฉ์ ์ง์ํด์ผํ๋ ๋ฐ๋ฉด, conflation์ ์ฌ์ฉํ๋ฉดmul!(C, A, B)
๋ 64 ๊ฐ์ง ์ ํ์ ์ ํฌ๋ฅผ ์ง์ํด์ผํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฌผ๋กVector
s ๋ฐ ๋นMatrix
๋งคํธ๋ฆญ์ค / ์ฐ์ฐ์ ์ ํ์ ํผํฉ์ ์ถ๊ฐํ๋ฉด ์ํฉ์ด ๋์ฑ ๋ณต์กํด์ง๋๋ค.์ด ๋ณํ๋ฅผ ์งํํ๊ธฐ ์ ์์ด ๋ถ์์ฉ์ ๊ณ ๋ คํ ๊ฐ์น๊ฐ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฒ ์คํธ!
์ด ๊ฒ์๋ฌผ์ github, slack ๋ฐ ๋ถ๋ฅ์ ๋ํ ์ต๊ทผ ๋ ผ์๋ฅผ ํตํฉ / ๊ฒํ ํ๊ณ ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ฅผ ๋ถ์ํฉ๋๋ค. (https://github.com/JuliaLang/julia/issues/20978#issuecomment-315902532์ ์์ ํ๊ณ์๋ 1.0์ ๋๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์๊ฐ์์ ํ์ด๋ฌ์ต๋๋ค.)
์๋ฏธ ์์ผ๋ก ๊ตฌ๋ณ๋๋ ์ธ ๊ฐ์ง ์์ ์ด ๋ฌธ์ ๊ฐ๋ฉ๋๋ค.
Adjoint๋ adjoint
/ '
(ํ์ง๋ง '
ํน๋ณํ ๋ฎ์ถ์ด ์ง ํํ์์ A[c|t]_(mul|rdiv|ldiv)_B[c|t][!]
ํธ์ถ๋ก ๋ฎ์ถ์ด ์ค๊ฐ ์ด์ adjoint / ์ ์น๋ฅผ ํผํฉ๋๋ค) .
์กฐ์ฎ๊น์ transpose
/ .'
( adjoint
์ ๋์ผํ์ฃผ์ ์ฌํญ).
๋ฐฐ์ด ํ๋ฆฝ๋ผ๊ณ permutedims(C, (2, 1))
๋ํ ์ด์ฐจ์ C
๋ฐ reshape(C, 1, length(C))
์ผ์ฐจ์ ๋ํ C
.
A[c|t]_(mul|rdiv|ldiv)_B[c|t]
๋ก์ ํน๋ณ ํ๊ฐ ๋ฐ ๊ด๋ จ ๋ฉ์๋ ์ด๋ฆ ์กฐํฉ ๋ชจ์์ด 1.0๋งํผ ์ฌ๋ผ์ ธ์ผํฉ๋๋ค. ํน๋ณํ ๋ฎ์ถ๊ธฐ / ๊ด๋ จ ๋ฉ์๋ ์ด๋ฆ์ ์ ๊ฑฐํ๋ ค๋ฉด lazy adjoint ๋ฐ transpose๊ฐ ํ์ํฉ๋๋ค.ctranspose
) ๋ฐ ์กฐ์ฎ๊น์ ์ด์ ์ transpose(x::Any) = x
, ctranspose(x::Any) = conj(x)
๋ฐ conj(x::Any) = x
์ ๊ฐ์ ์ผ๋ฐ์ ์ธ no-op ํด๋ฐฑ์ ํตํด ๋ฐฐ์ด ๋ค์ง๊ธฐ์ ๊ฒฐํฉ๋์์ต๋๋ค. ์ด๋ฌํ ํด๋ฐฑ์ผ๋ก ์ธํด ์ผ๋ถ ์ฌ์ฉ์ ์ ์ ์ซ์ ์ ํ์ ๋ํ [c]transpose
๊ด๋ จ ์์
์ ํด๋น ์ ํ์ ๋ํ [c]transpose
์ ๋ฌธํ์์ด ์๋์ผ๋ก ์คํจ (์๋ชป๋ ๊ฒฐ๊ณผ ๋ฐํ)๋ฉ๋๋ค. ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ์๋์ผ๋ก ๋ฐํํ๋ ๊ฒ์ ๋์ ์์์ด๋ฏ๋ก ์ด๋ฌํ ๋์ฒด๊ฐ ์ ๊ฑฐ๋์์ต๋๋ค (# 17075). ๋ ์กฐ์ฉํ ์คํจ๋ฅผ ๋์
ํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค..'
๊ตฌ๋ฌธ์ ์ ๊ฑฐํ๋ ๊ฒ์ ๋ฉ์ง ๊ฒ์
๋๋ค. ์ด ๋ณ๊ฒฝ์ ๊ฐ๋ฅํ๊ฒํ๋ ค๋ฉด ์์์ ์ธ๊ธ ํ ํน๋ณ ํ๊ฐ์ ์ ๊ฑฐํด์ผํฉ๋๋ค.ํน์ ํ๊ฐ ๋ฐ ๊ด๋ จ ๋ฉ์๋ ์ด๋ฆ์ ์ ๊ฑฐํ๊ณ , ์๋ ์คํจ๋ฅผ ๋ฐฉ์งํ๊ณ , ์ ์น ๋ฐ ๋ฐฐ์ด ๋ฐ์ ์์ํ ์ง๊ด์ ์ด๊ณ ํธ๋ฆฌํ ์ฃผ๋ฌธ์ ์ ๊ณตํ๊ณ .'
์ ๊ฑฐํฉ๋๋ค. ์ต์ํ์ ์ถ๊ฐ ๋ณต์ก์ฑ๊ณผ ํ์์ผ๋ก ์ ํ์ ๋ฌ์ฑํ์ญ์์ค.
์ด ๋ถ์ผ๋ ๋ ๊ฐ์ง ๋์์ธ ์ ์์ผ๋ก ์ถ์๋์์ต๋๋ค.
adjoint adjoint
, transpose conjadjoint
( "conjugate adjoint") ๋ฐ array-flip transpose
ํธ์ถํฉ๋๋ค. adjoint
๋ฐ conjadjoint
๋ LinAlg
๊ฑฐ์ฃผํ๊ณ transpose
๋ Base
๊ฑฐ์ฃผํฉ๋๋ค.
adjoint adjoint
, transpose transpose
๋ฐ array-flip flip
ํธ์ถํฉ๋๋ค. adjoint
๋ฐ transpose
๋ LinAlg
๊ฑฐ์ฃผํ๊ณ flip
๋ Base
๊ฑฐ์ฃผํฉ๋๋ค.
์ฒ์์๋ ์ด๋ฌํ ์ ์์ด ํ๋ฉด์ ์ผ๋ก ๋ง ๋ฌ๋ผ ๋ณด์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ ์์ธํ ์ดํด๋ณด๋ฉด ์ค์ง์ ์ธ ์ฐจ์ด๊ฐ ํฝ๋๋ค. ์ด๋ฌํ ๋ช ๋ช ์ฒด๊ณ์ ์๋์ ์ธ ํผ์์ ์ธ ์ฅ์ ์ ๋ํ ๋ ผ์๋ฅผ ํผํ๋ฉด์ ์ค์ง์ ์ธ ์ฐจ์ด์ ์ ์ดํด ๋ณด๊ฒ ์ต๋๋ค.
๋ณต์ก์ฑ:
์ ์ 1์ array-flip transpose
๋ฅผ ํธ์ถํ์ฌ LinAlg
๋ฅผ ๊ฐ์ ๋ก ์ ์น ๋ฐ adjoint ์ธ์๋ array-flip์ ์ฒ๋ฆฌํฉ๋๋ค. ๋ฐ๋ผ์ LinAlg
๋ ์ผ๋ฐ์ ์ธ ์์
์์ ์ง์ํ๋ ํ์ ์กฐํฉ ์งํฉ์ ํฌ๊ฒ ํ์ฅํด์ผํฉ๋๋ค. https://github.com/JuliaLang/julia/pull/23424#issuecomment -346678279๋ ์ด๋ฌํ ์ถ๊ฐ ๋ณต์ก์ฑ์ ์์๋ก ๋ณด์ฌ ์ฃผ๋ฉฐ, ๋ค์ ๋
ผ์๋ ์ถ๊ฐ ๋ณต์ก์ฑ์ด ์กด์ฌ ํจ์ ์์ ์ ์ผ๋ก ํ์ธํฉ๋๋ค.
์ ์ 2์๋ LinAlg
์ง์ ๋ง ์ ์น ๋ฐ adjoint๊ฐ ํ์ํฉ๋๋ค. LinAlg
์์๋ ์ง๊ธ ์ง์ํฉ๋๋ค.
ํ์:
์ ์ 1์ ๊ธฐ์กด ์์
์ ๊ธฐ๋ณธ ์๋ฏธ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. transpose
๋ ์ ์น๊ฐ ์๋ ๋ฐฐ์ด ๋ค์ง๊ธฐ๊ฐ๋๊ณ ๋ชจ๋ transpose
๊ด๋ จ ๊ธฐ๋ฅ์ ๊ทธ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋์ด์ผํฉ๋๋ค. (์๋ฅผ ๋ค์ด transpose
๋ผ๋ ์ด๋ฆ๊ณผ ๊ด๋ จ๋ LinAlg
๋ชจ๋ ๊ณฑ์
๋ฐ ์ผ์ชฝ / ์ค๋ฅธ์ชฝ ๋๋๊ธฐ ์์
์๋ ์๋ฏธ ์์ ์ด ํ์ํฉ๋๋ค.)์ด ๋ณ๊ฒฝ์ด ์คํ๋๋ ๋ฐฉ์์ ๋ฐ๋ผ์ด ๋ณ๊ฒฝ์ผ๋ก ์ธํด ์๋ ์์์ด ๋ฐ์ํฉ๋๋ค. ํ์ฌ ์๋ฏธ๋ก ์ด (์๋์ ์ผ๋ก ๋๋ ์ฐ์ฐํ) ์์กดํ๋ ๋ชจ๋ ๊ณณ.
์ ์ 2๋ ๋ชจ๋ ๊ธฐ์กด ์์ ์ ๊ธฐ๋ณธ ์๋ฏธ๋ฅผ ์ ์งํฉ๋๋ค.
์ปคํ ๋ง:
์ ์ 1์ ์ ํ ๋์ ๊ฐ๋
(์ ์น)์ Base
, ์ถ์ ๋ฐฐ์ด ๊ฐ๋
(๋ฐฐ์ด ๋ค์ง๊ธฐ)์ LinAlg
๋ก ๊ฐ์ ธ์ Base
๋ฐ LinAlg
๊ฐ๋ ฅํ๊ฒ ๊ฒฐํฉํฉ๋๋ค.
์ ์ 2๋ ์ถ์ ๋ฐฐ์ด๊ณผ ์ ํ ๋์๋ฅผ ๋ช
ํํ๊ฒ ๋ถ๋ฆฌํ์ฌ ์ ์๋ ๊ธฐ๋ณธ์๋ง ์๊ณ ํ์๋ ์๋ก์ด ๊ฒฐํฉ์์ด LinAlg
์์๋ง ์ด ์ ์์ต๋๋ค.
๋ฌด์ vs. ํฐ ์คํจ :
์ ์ 1์ transpose
ํธ์ถํ์ฌ ์ ์น ์๋ฏธ๋ก ์ ๊ธฐ๋ํ ๋ ์กฐ์ฉํ ์๋ชป๋ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํฉ๋๋ค (๋์ ๋ฐฐ์ด ๋ค์ง๊ธฐ ์๋ฏธ๋ก ์ ์ป์).
์ ์ 2์ ์๋ ๋ก๊ทธ๋ ๋ฐฐ์ด ๋ค์ง๊ธฐ ์๋ฏธ๋ก ์ ๊ธฐ๋ํ๋ ์ซ์๊ฐ ์๋ ๋ฐฐ์ด์์ transpose
๋ฅผ ํธ์ถํฉ๋๋ค. ์ด ๊ฒฝ์ฐ transpose
๋ ์ฌ์ฉ์์๊ฒ flip
๋ฅผ ๊ฐ๋ฆฌํค๋ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ์ ์์ต๋๋ค.
.'
: .'
์ง์ํ์ง ์๋ ๊ธฐ๋ณธ ์ธ์๋ transpose
์ ๊ธธ์ด์
๋๋ค. ์ ์ 1์ .'
๋ฅผ transpose
๋ฐ conjadjoint
์ด๋ฆ์ผ๋ก ๋์ฒดํ์ง๋ง ์ํฉ์ ๊ฐ์ ํ์ง๋ ์์ต๋๋ค. ๋ฐ๋๋ก ์ ์ 2๋ flip
๋ฐ transpose
์ด๋ฆ์ ์ ๊ณตํ์ฌ ์ํฉ์ ๊ฐ์ ํฉ๋๋ค.
1.0์ ์ป๋ ๊ฒ์ ๊ฐ ์ ์์์ ๋ฌด์์ ์ทจํฉ๋๊น? ์ ์ 2์์๋ 1.0์ผ๋ก์ ๊ฒฝ๋ก๊ฐ ๋ ๊ฐ๋จํ๋ฏ๋ก ์ฌ๊ธฐ์ ์์ํ๊ฒ ์ต๋๋ค.
lazy adjoint๋ฅผ ๋์
ํ๊ณ 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
ํธ์ถ์ด๋ฉ๋๋ค. ํด๋น mul[!]
/ ldiv[!]
/ rdiv[!]
๋ฉ์๋์ ๋ํ A[c|t]_{mul|ldiv|rdiv}_B[c|t][!]
์ ์ค๋จํฉ๋๋ค. .'
์ฌ์ฉํ์ง ์์ต๋๋ค.
์ด ๋จ๊ณ๋ 0.7์์ ์ํ ํ ์ ์์ต๋๋ค. (1) Base
/ LinAlg
์ ํ์ด ์๋ ๊ฒฝ์ฐ Base
A[c|t]_{mul|ldiv|rdiv}_B[c|t]
๋ฉ์๋๋ฅผ ์ ์คํ๊ธฐ ์ํด ํน์ ํ๊ฐ์ ์์กดํ๋ ์ฝ๋๋ ์ค๋จ๋ฉ๋๋ค. ์ด๋ฌํ ์ฝ๋๋ ์๋ก์ด ์ ํ ์์จ / ๊นจ์ง ์ฝ๋๊ฐ ๋ง์ด๊ทธ๋ ์ด์
ํด์ผํ๋ ๋์์ ๋ํ๋ด๋ ๋ช
์์ ์ธ MethodError
๋ฅผ ๋ฐฉ์ถํฉ๋๋ค. (2) ๊ณ ๋ฆฝ ๋ '
s / .'
s์ ์์กดํ๋ ์ฝ๋๋ ์๊ฒฉํ๊ฒ ์ด์ฑ์ ์ผ๋ก ์๋ํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์คํจ ๋ชจ๋๋ ๋ช
์ ์ MethodError
์ฌ์ผํฉ๋๋ค. ๋ชจ๋ ๊ณณ์์ ํ์์ ์ ํ์ ์ด๊ณ ์๋ ๋ฝ์ต๋๋ค.
์ด๊ฒ์ด 1.0์ ๊ผญ ํ์ํ ๋ณ๊ฒฝ ์ฌํญ์ ๋๋ค.
์ด ์์ ์์ Adjoint(A)
/ Transpose(A)
๋ lazy adjoint ๋ฐ transpose๋ฅผ ์์ฑํ๊ณ adjoint(A)
/ transpose(A)
๋ eager adjoint ๋ฐ transpose๋ฅผ ์์ฑํฉ๋๋ค. ํ์์ ์ด๋ฆ์ ๋ฌด๊ธฐํ์ผ๋ก ์ ์ง๋๊ฑฐ๋, ์ํ๋ ๊ฒฝ์ฐ 0.7์ ๋ค๋ฅธ ์ฒ ์๋ก ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ ์ ์์ต๋๋ค (์ eagereval(Adjoint(A))
/ eagereval(Transpose(A))
๋ชจ๋๋ก ์ฒ ์ eagereval
๋๋ eageradjoint(A)
/ eagertranspose(A)
์ง์ ์ค๋จ์ ๊ฒฝ์ฐ adjoint
/ transpose
์ (๋) 1.0์์ ์ฉ๋ ๋ณ๊ฒฝ ๋ ์ ์์ต๋๋ค ( Adjoint(A)
/ Transpose(A)
์ ๋๋ ์ฌ์ฉํ์ง๋ง ํ์ํ).
๋๋์ด...
๋์
flip
๋ฐ / ๋๋ Flip
์์ Base
. ๊ธฐ๋ฅ ์ถ๊ฐ์ด๋ฏ๋ก ํ์ํ ๊ฒฝ์ฐ 1.x์์ ์ด๋ฌํ ๋ณ๊ฒฝ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
์ ์ 1์ ์ด๋ป์ต๋๊น? ์๋์๋ ๊ฐ๋ฅํ ๋ ๊ฐ์ง ๊ฒฝ๋ก๊ฐ ๋์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๊ฒฝ๋ก๋ 0.7์ ๋ณ๊ฒฝ ์ฌํญ์ ํตํฉํ์ง๋ง ์กฐ์ฉํ ํ์์ ํฌํจํฉ๋๋ค. ๋ ๋ฒ์งธ ๊ฒฝ๋ก๋ ์กฐ์ฉํ ํ์์ ํผํ์ง๋ง 0.7-> 1.0์ ๋ ๋ง์ ๋ณ๊ฒฝ์ ํฌํจํฉ๋๋ค. ๋ ๊ฐ์ ๋ชจ๋ โโ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ง์์ ์ผ๋ก ๋ฐ์ ์ํต๋๋ค. ๋ ์ฐ์์ ์ธ ๋ฑ๊ฐ๋ฌผ์ ์ผ๋ถ ์์ / ์ดํ์ ํตํฉ / ํํผ ํ ์ ์์ง๋ง ๋ ์ด๋ ต๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค. ์งํ์ค์ธ ์์ ์ ๊ฒ๋ณด๊ธฐ์ ์ฒซ ๋ฒ์งธ ๊ฒฝ๋ก๋ฅผ ๋ฐ๋ฆ ๋๋ค.
transpose
์ ์๋ฏธ ์ฒด๊ณ๋ฅผ ์ ์น์์ ๋ฐฐ์ด ๋ค์ง๊ธฐ๋ก ๋ณ๊ฒฝํ๊ณ ๋ฐ๋์ ๋ชจ๋ transpose
๊ด๋ จ ๊ธฐ๋ฅ์ ์๋ฏธ ์ฒด๊ณ๋ ๋ณ๊ฒฝํฉ๋๋ค. ์๋ฅผ ๋ค์ด At_...
ํ๊ฑฐ๋ ..._Bt[!]
๋๋๋ ๋ชจ๋ A[c|t]_{mul|ldiv|rdiv}_B[c|t][!]
๋ฉ์๋์๋ ์ ์ฌ์ ์ผ๋ก ์๋ฏธ ์์ ์ด ํ์ํฉ๋๋ค. ๋ํ ์๋ฅผ ๋ค์ด Symmetric
/ issymmetric
์ ์ ์ ๋ฐ ๋์์ ๋ณ๊ฒฝํด์ผํฉ๋๋ค. transpose
์์ฒด๋ฅผ Base
ํฉ๋๋ค.
์ด๋ฌํ ๋ณํ๋ ์กฐ์ฉํ๊ณ ๊ด๋ฒ์ํ๊ฒ ๊นจ์ง ๊ฒ์ ๋๋ค.
conjadjoint
์ LinAlg
ํฉ๋๋ค. ์ด ๋จ๊ณ์์๋ ์ด์ ๋จ๊ณ์์ ๊ฑด๋๋ฆฐ ๋ชจ๋ ๋ฉ์๋๋ฅผ ์๋ ์๋ฏธ ํ์์ผ๋ก ๋ณต์ํด์ผํ๋ฉฐ ์ด์ conjadjoint
์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ์ด๋ฆ (์ Aca_...
๋ฐ ..._Bca[!]
์ด๋ฆ)์ ์ฌ์ฉํฉ๋๋ค. . ๋ํ ๋ฐฐ์ด ๋ค์ง๊ธฐ (ํ์ฌ transpose
), ์ ์น (ํ์ฌ conjadjoint
) ๋ฐ LinAlg
adjoint๋ฅผ ๋์์ ์ง์ํ๋ ์ถ๊ฐ ์ ํ ์กฐํฉ์ ๋ํ ๋ฉ์๋๋ฅผ ์ถ๊ฐํด์ผํฉ๋๋ค (์ : ca
๋ค ์ฌ์ด์์ ๋ณํ A[c|t|ca]_{mul|ldiv|rdiv}_B[c|t|ca][!]
).
LinAlg
lazy adjoint ๋ฐ ์ ์น ( conjadjoint
๋ผ๊ณ ํจ)๋ฅผ ๋์
ํ๊ณ Adjoint
๋ฐ ConjAdjoint
๋ผ๊ณ ๋งํฉ๋๋ค. (๋ผ๋ ๊ฒ์ผ๋ฅธ ๋ฐฐ์ด ํ๋ฆฝ ์๊ฐ transpose
์ ํ์
๋ํผ) Base
๋ง, 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
ํธ์ถ์ด๋ฉ๋๋ค (์๋งจํฑ์ด ์กฐ์ฉํ ๋ณ๊ฒฝ ๋ ๊ฒ์์ ์๊ธฐํ์ญ์์ค). ํด๋น mul[!]
/ ldiv[!]
/ rdiv[!]
๋ฉ์๋์ ๋ํ A[c|t]_{mul|ldiv|rdiv}_B[c|t][!]
์ ์ค๋จํฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์ต๊ทผ์ ๋์
๋ Aca_...
/ ...Bca[!]
๋ฉ์๋๋ฅผ ์ ๊ฑฐํ์ฌ mul[!]
/ ldiv[!]
/ rdiv[!]
๋ฑ๊ฐ๋ฌผ์ ์ฌ์ฉํฉ๋๋ค. .'
์ฌ์ฉํ์ง ์์ต๋๋ค.
์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ 0.7์์ ์งํ๋์ด์ผํฉ๋๋ค. ๊ธฐ์กด ์์ ์ ๋ํ ์๋ฏธ ๋ณ๊ฒฝ์ ๊ด๋ฒ์ํ๊ณ ์กฐ์ฉํ ํ์์ ์ด๋ํฉ๋๋ค. ํน์ ํ๊ฐ ์ ๊ฑฐ๋ ์์์ ์ค๋ช ํ ๊ฒ๊ณผ ๋์ผํ ์ ํ์ ์ด๊ณ ํฐ ํ์์ ์์ฑํฉ๋๋ค.
์ด ์์ ์์ Adjoint(A)
/ Transpose(A)
/ ConjAdjoint(A)
๋ ๊ฐ๊ฐ lazy adjoint, array-flip ๋ฐ transpose๋ฅผ ์์ฑํ๊ณ adjoint(A)
/ transpose(A)
/ conjadjoint(A)
๋ ๊ฐ๊ฐ eager adjoint, array-flip ๋ฐ transpose๋ฅผ ์์ฑํฉ๋๋ค. ํ์์ ์ด๋ฆ์ ๋ฌด๊ธฐํ์ผ๋ก ์ ์ง๋๊ฑฐ๋ ์ํ๋ ๊ฒฝ์ฐ 0.7์์ ๋ค๋ฅธ ์ฒ ์์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ ์ ์์ต๋๋ค (์ ์ฐธ์กฐ).
์ด ํ๋ก์ธ์ค์ ์ด๊ธฐ์ ConjAdjoint
๋์
ํ์ฌ ์ผ๋ถ ์์
/ ์ดํ์ ํตํฉ / ๋ฐฉ์ง ํ ์ ์์ง๋ง, ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ๋ ์ด๋ ต๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค.
์ด๋ง ์๊ฐ conjadjoint
์์ LinAlg
. ํ์ฌ transpose
์ ๊ด๋ จ๋ ๋ชจ๋ ๊ธฐ๋ฅ ๋ฐ ๋ฉ์๋ (์ : A[c|t]_{mul|ldiv|rdiv}_B[c|t][!]
๊ด๋ จ t
A[c|t]_{mul|ldiv|rdiv}_B[c|t][!]
๋ฉ์๋ ํฌํจ)๋ฅผ conjadjoint
๋ฐ ํ์ ์ด๋ฆ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํฉ๋๋ค. ๋ชจ๋ transpose
๊ด๋ จ ์ด๋ฆ์ ์๋ก์ด conjadjoint
๋ฑ๊ฐ๋ฌผ์ ์งง์ ํ์๋ก ๋ง๋ญ๋๋ค. ๋ชจ๋ transpose
๊ด๋ จ ์ด๋ฆ์ conjadjoint
ํด๋นํ๋ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ์ง ์์ต๋๋ค.
(๋ผ๊ณ ๊ฒ์ผ๋ฅธ ์๋ฐ ํ๋ ฌ๊ณผ ์ ์น ์๊ฐ conjadjoint
์ ํ์
๋ํผ) LinAlg
๋งํ Adjoint
๋ฐ ConjAdjoint
. mul[!]
/ ldiv[!]
/ rdiv[!]
๋ฉ์๋๋ฅผ ํด๋น ๋ํผ ์ ํ์ ๋์คํจ์นํ๊ณ ํด๋น A[c|ca]_{mul|ldiv|rdiv}_B[c|ca][!]
๋ฉ์๋์ ์ฝ๋๋ฅผ ํฌํจํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค. ํ์์ ๋ฐฉ๋ฒ์ ์ด์ ๋ฐฉ๋ฒ์ ์งง์ ์์์ผ๋ก ๋ค์ ๊ตฌํํฉ๋๋ค.
Base
์ Transpose
๋ผ๋ lazy array-flip ๋ํผ ์ ํ์ ๋์
ํฉ๋๋ค (์ฝ๊ฐ ํผ๋์ค๋ฝ๊ฒ๋, ๋์์ transpose
๋ ์ ์น ์๋ฏธ๋ฅผ ์ฌ์ฉํ์ฌ conjadjoint
๋ก ์ฌ์ฉ๋์ง ์์). ๋ฐฐ์ด ๋ค์ง๊ธฐ ( Transpose
)์ ํ์ํ ๋ชจ๋ ์ผ๋ฐ ๋ฉ์๋๋ฅผ Base
ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ฐฐ์ด ๋ค์ง๊ธฐ๋ฅผ ๋์์ ์ง์ํ๋ ๋ชจ๋ ์ถ๊ฐ ์ ํ ์กฐํฉ์ ๋ํด LinAlg
์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํฉ๋๋ค (ํ์ฌ Transpose
,ํ์ง๋ง transpose
์๋), ์ ์น (ํ์ฌ conjadjoint
๋ฐ ConjAdjoint
), LinAlg
adjoint๋ ํ์ํฉ๋๋ค (์ : mul[!]
/ rdiv[!]
/ ldiv[!]
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
ํธ์ถ์ด๋ฉ๋๋ค. ํด๋น mul[!]
/ ldiv[!]
/ rdiv[!]
๋ฉ์๋์ ๋ํ A[c|t]_{mul|ldiv|rdiv}_B[c|t][!]
์ ์ค๋จํฉ๋๋ค. .'
์ค๋จ.
์์ ๋ณ๊ฒฝ ์ฌํญ์ 0.7๋ก ์ด๋ํด์ผํฉ๋๋ค. ์กฐ์ฉํ ํ์์ด์๊ณ , ์์์ ์ค๋ช ํ๋๋ก ํน์ ํ๊ฐ ์ ๊ฑฐ์์ ํฐ ํ์ ๋ง ๋ฐ์ํฉ๋๋ค.
์ด ์์ ์์ Adjoint(A)
/ Transpose(A)
/ ConjAdjoint(A)
๋ ๊ฐ๊ฐ lazy adjoint, array-flip ๋ฐ transpose๋ฅผ ์์ฑํฉ๋๋ค. adjoint(A)
/ conjadjoint(A)
๋ ๊ฐ๊ฐ eager adjoint ๋ฐ transpose๋ฅผ ์์ฑํฉ๋๋ค. transpose(A)
๋ conjadjoint
๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. transpose
๋ ์ํ๋ ๊ฒฝ์ฐ 1.0์์ ์ฉ๋๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. adjoint
๋ ๋ฌด๊ธฐํ์ผ๋ก ์ ์ง๋๊ฑฐ๋ 0.7์ ๋ค๋ฅธ ์ฒ ์๋ฅผ ์ํด ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ ์ ์์ต๋๋ค. conjadjoint
์ฒ ์๋ฅผ ์ฐ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ 0.7๋ก ์ง์ ๋ค์ด๊ฐ ์ ์์ต๋๋ค.
1 ๋จ๊ณ์ 2 ๋จ๊ณ๋ฅผ ๋ค์ ํตํฉํ์ฌ ์์ / ์ดํ์ ํผํ ์ ์์ง๋ง, ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ๋ ์ด๋ ต๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค.
์ฝ์ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
ํ๋ฅญํ ๊ธ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์ 2์ ๋์ํฉ๋๋ค. ์ถ๊ฐ์ ์ธ ์ด์ ๋ conjugate adjoint๊ฐ ์ ํ ํ์ค ์ฉ์ด๊ฐ ์๋๋ฉฐ ๊ฐ์ธ์ ์ผ๋ก ๋งค์ฐ ํผ๋ ์ค๋ฝ์ต๋๋ค. ํ์ฉ์ด ์ผ์ด๋๋ค๋ ๊ฒ์ ์์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค).
๋๋ ์์ ์ ๊ตํ ํ ๋ก ์ ์ฝ์ผ๋ ค๊ณ ํ์ง๋ง ์ด๋ค ์์ ์์ ์ํ์ ์ธ transpose
๊ฐ ์ฌ๊ท ์ ์ด์ด์ผํ๋ค๊ณ ๊ฒฐ์ / ๋๊ธฐํ๋์๋์ง ํ์ธํ์ง ๋ชปํ์ต๋๋ค. ์ด๊ฒ์ (7 ์ 14 ์ผ์์ 18 ์ผ ์ฌ์ด์) ์ฌ์ ์ธ ํ ๋ก ์์ ๋ค๋ฐ๋ฅธ ๊ฒ์ฒ๋ผ ๋ณด์๊ณ , ๊ทธ ํ ๊ฐ์๊ธฐ ์ํ์ ๊ตฌ์กฐ์ ์ ์น๊ฐ ๋์
๋์์ต๋๋ค.
@ Sacha0 ๋ ๊ทธ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด ์ค๋ช
ํฉ๋๋ค.
๋ฐ์ ๋ฐฉ๋ฒ : ์ด์ ์ "๊ตฌ์กฐ์ ์ ์น"๋ "์ํ์ adjoint"/ "์ํ์ ์ ์น"์ ๊ฒฐํฉ๋์์ต๋๋ค.
๋๋ (๊ตฌ์กฐ์ ) ์ ์น๊ฐ "adjoint"์ ํฉ์ณ ์ก๋๋ฐ ๋์ํ์ง๋ง ์ฌ๊ธฐ์ "์ํ์ ์ ์น"๊ฐ ๊ฐ์๊ธฐ ๋ํ๋ฉ๋๋ค. ์์ ์ฑ / ์๋ฆฝ์ฑ์ ์ํด ๊ทธ ๊ฐ๋ ๊ณผ ๊ทธ๊ฒ์ด ์ฌ๊ท ์ ์ด์ด์ผํ๋ ์ด์ ๋ฅผ ๊ฐ๋ตํ๊ฒ ๋ฐ๋ณต / ์์ฝ ํ ์ ์์ต๋๊น?
๊ทธ์ ๊ด๋ จํ์ฌ, ๋๋ ํ๋ ฌ์ ์ ์น๊ฐ ์๋ํ์ง ์๋ ๊ฐ์ฒด๊ฐ ๋ ๊ฒ์ด๋ผ๋ ๋จ์ํ ์ด์ ๋๋ฌธ์ ์ถ์์ ์ธ ์ํ์ ์๋ฏธ์์ transpose
๋ฅผ ์ ํ ๋งต ์ ๋ํ RowVector
์์๋ RowVector
๋ฅผ RowVector
๋งคํํฉ๋๋ค. ์ฌ๊ท ์ ์น์ ๋ํ ์ฃผ์ฅ์ด ๋ถ์กฑํ ์ ์ ๊ฐ์ํ ๋ ์ผ๋ฐ์ ์ผ๋ก (๊ธฐ์ด ์ข
์) ๊ฐ๋
์ผ๋ก ์ ์๋๋ ์ผ๋ฐ ํ๋ ฌ ์ ์น์ ์๋ก ์ ์ ๋ flip
์ฐ์ฐ ์ฌ์ด์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
ํ๋ฅญํ ๊ธ์ ์์ฑํด ์ฃผ์ @ Sacha0 ์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ ์ 2๋ฅผ ์ ํธํฉ๋๋ค (adjoint adjoint
ํธ์ถ, transpose
์ ์น ๋ฐ array-flip flip
. adjoint
๋ฐ transpose
๋ LinAlg
๊ฑฐ์ฃผ flip
๋ Base
๊ฑฐ์ฃผํฉ๋๋ค.). ๋์๊ฒ ์ด๊ฒ์ ์ต์์ ์ต์ข
๊ฒฐ๊ณผ (์ฃผ์ ๊ด์ฌ์ฌ๊ฐ๋์ด์ผ ํจ)๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ฉฐ v1.0์ ๋ํ ๋ ๊นจ๋ํ ๋ฐฉ๋ฒ์ ํ์ฉํฉ๋๋ค. ์์ ์์ ์ ๋์ํ๋ฏ๋ก ๋ฐ๋ณตํ์ง ์๊ฒ ์ต๋๋ค. ์ฌ๊ธฐ์ ๋ช ๊ฐ์ง ์ถ๊ฐ ์ค๋ช
์ด ์์ต๋๋ค.
๋น์ฌ ๊ท์ transpose
์ ์ฐฌ์ฑํ๋ ํ ๊ฐ์ง ์ฃผ์ฅ์ .'
-๊ตฌ๋ฌธ์ด ๋งค์ฐ ํธ๋ฆฌํ๋ฏ๋ก ์๋ฅผ ๋ค์ด Matrix{String}
์
๋๋ค. ์ด ๊ตฌ๋ฌธ์ ๊ฐ์ ํ๋ฉด (# 21037)๋ฅผ ๋ฉ๋ฆฌ๊ฐ๋ ์ฌ๋์ด ์ฌ์ฉํ ํ์๊ฐ์๋ค transpose(A)
๋์ A.'
, ๊ทธ๋๋ ์๊ฐ flip
ฮฑ- ํจ์๊ฐ (์งง์ ํ์ ๋ณดํฌ์ด ๋ ๊ฒ์
๋๋ค transpose(A)
๋ณด๋ค ๋ช
ํํ๊ณ permutedims(A, (2,1))
๋ณด๋ค ํ์คํ ์ข์ต๋๋ค).
์ ์ 2๊ฐ ์ ๊ณตํ๋ LinAlg
์ Base
์ฌ์ด์ ๋ถ๋ฆฌ๋ ๋งค์ฐ ์ข์ต๋๋ค. LinAlg
๋ Transpose
๋ฐ Adjoint
๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ ๋ง ์ ๊ฒฝ ์ธ ํ์๊ฐ์์๋ฟ๋ง ์๋๋ผ transpose
๋ฐ adjoint
๊ณ ๋ คํ๋ค๋ ์ ์ ๋ถ๋ช
ํํฉ๋๋ค LinAlg
์ฐ์ฐ์ด๋๊ณ flip
๋ ํ๋ ฌ์ ์ฐจ์์ ๋ค์ง๋ ์ผ๋ฐ AbstractMatrix
ํญ๋ชฉ์ด๋ฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก transpose(::Matrix{String})
๋ฑ์ด ์๋ํ์ง ์๋๋ค๋ ๋ถ๋ง์ ๋ง์ด ๋ณด์ง ๋ชปํ์ต๋๋ค. ์ ๋ง ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์
๋๊น? ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด์จ๋ ์ฒ์๋ถํฐ ๋ค์งํ ํ๋ ฌ์ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด ๋ช ๋ช ์ฒด๊ณ (์ ์ 2)๊ฐ ์ค์ ๋ก ๋ ์ข์ ์ ์์ต๋๋ค. Adjoint ๋ฐ Transpose๋ ์ ํ ๋์ํ์์ ๊ฝค ํ์ค ์ฉ์ด์ด๋ฉฐ ๋ ๊นจ์ง๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ์ํ์ ์ ์น๊ฐ ์ฌ๊ท ์ ์ด์ด์ผํ๋ค๊ณ ๊ฒฐ์ / ๋๊ธฐํ ๋ ์์ ์ ๋ณด์ง ๋ชปํ์ต๋๋ค.
@Jutho ๊ทธ๊ฒ์ adjoint์ ๊ฐ์ ์ธ์์
๋๋ค (๋ณต์์์ adjoint๋ conjugate์
๋๋ค (๋ณต์์๋ ์ ํจํ ๋ญํฌ 1 ๋ฒกํฐ ๊ณต๊ฐ ๋ฐ ์ ํ ์ฐ์ฐ์์ด๋ฏ๋ก ๋ด์ ๋ฐ adjoint ๊ฐ๋
์ด ์ ์ฉ๋จ). ๋ธ๋ก ํ๋ ฌ์ adjoint ์ฌ๊ท ์ ์
๋๋ค ...). ์๋ฅผ ๋ค์ด ์ฌ๋๋ค์ ์ค์ฒฉ ๋ ์ค์ ํ๋ ฌ๋ก ์ ํ ๋์๋ฅผ ์ํ ์ ์์ต๋๋ค. "์ค์ ํ๋ ฌ ๋๋ ๋ฒกํฐ์ ์ธ์ "์ ๋ํด .'
๋ฅผ ์ฌ์ฉํ๋ ๋ง์ ์ฝ๋๋ฅผ ๋ณผ ์ ์์ผ๋ฉฐ์ด ์์
๋ ์ํํ์ต๋๋ค. ์ฌ๊ธฐ์์ '
๋ ์ ํจ ํ ๋ฟ๋ง ์๋๋ผ ๋ ์ผ๋ฐ์ ์
๋๋ค (๋ณต์กํ ๊ฐ ๋ฐ / ๋๋ ์ค์ฒฉ ๋ ์์๋ ๋ฐฐ์ด์์ ์๋). ์ค์ฒฉ ๋ ๋ณตํฉ ํ๋ ฌ์ ๋ํ ์ฌ๊ท ์ ์น์๋ณด๋ค ์ง์ ํ ์ฌ์ฉ์ ๋ฐฉ์ ์์ด conj(adjoint(a))
์ค ๋ ๋ฐ์ํฉ๋๋ค. ์ด๋ ์๋์ ์ผ๋ก ๋๋ฌผ์ง๋ง ์ฌ์ ํ ๋ฐ์ํฉ๋๋ค (๊ด๋ จ๋ ํจ์๊ฐ์๋ ๊ฒฝ์ฐ ๋ง์กฑํ ๋งํผ ๋๋ฌผ๊ฒ ๋ฐ์ํฉ๋๋ค. ์์ ํ ๋ก ๊ณผ ๋ค๋ฅธ ๊ณณ์์ ๋ค์ํ ์ฌ๋๋ค์ด "์ํ์ ์ ์น"์ ๊ฐ์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋ถ๋ฅด๊ธฐ ์์ํ์ต๋๋ค. ์ ๋ conjadoint
๋ฅผ ์ ํํ์ง๋ง transpose
์์ฒด๋ฅผ ์ ์ธํ๊ณ ๋ ํ๋ฅญํ ์ฉ์ด IMO๊ฐ ์๋๋๋ค). ์ ํ ๋์ํ์์ ๋ธ๋ก ํ๋ ฌ์ ๋ธ๋ก์ ์ฌ ๋ฐฐ์ดํ์ง๋ง ๋ธ๋ก ์์ฒด์ ์๋ฌด๊ฒ๋ํ์ง ์๋ ๋น ์ฌ๊ท ์ฐ์ฐ์ ์ผ๋ฐ์ ์ผ๋ก ๋ํ๋์ง ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก
transpose(::Matrix{String})
๋ฑ์ด ์๋ํ์ง ์๋๋ค๋ ๋ถ๋ง์ ๋ง์ด ๋ณด์ง ๋ชปํ์ต๋๋ค. ์ ๋ง ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก์ ๋๊น? ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด์จ๋ ์ฒ์๋ถํฐ ๋ค์งํ ํ๋ ฌ์ ๊ตฌ์ฑํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ค๋ฆฌ์์ ๋ฐฉ์ก ์ด์์์๋ ์ด๋ฐ ๊ฒ์ด ์๋นํ ๋ฐ๋์งํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ผ๋ถ ๋ฐ์ดํฐ์ ์ธ๋ถ (Cartesian) ๊ณฑ์ ๊ฐ์ ธ ์์ ํจ์๋ฅผ ํตํด ๋งคํํ๋ ๊ฒ์ ๋งค์ฐ ์ผ๋ฐ์ ์
๋๋ค. ๋ฐ๋ผ์ 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๋์ด ๊ฒฝ์ฐ์๋ง ์๋ํฉ๋๋ค. ์ฃผ์ ์ฃผ์ฅ
๋ฒกํฐ์ adjoint๋ ๋ฒกํฐ๋ฅผ ์ค์นผ๋ผ์ ๋งคํํ๋ ์ ํ ์ฐ์ฐ์ ์ฌ์ผํฉ๋๋ค. ์ฆ, a๊ฐ ๋ฒกํฐ ์ธ ๊ฒฝ์ฐ a '* a๋ ์ค์นผ๋ผ ์ฌ์ผํฉ๋๋ค.
Julia Base์ ์๋ ๋ฐฉ์๊ณผ ํธํ๋์ง ์์ต๋๋ค. a=[rand(2,2),rand(2,2)]
๋ง๋ค๊ณ a'*a
๊ด์ฐฐํ์ญ์์ค. ์ค์นผ๋ผ๊ฐ ์๋๋๋ค. ๊ทธ๋ ๋ค๋ฉด a
๋ ํ๋ ฌ๋ก ์ฑ์์ง ๋ฒกํฐ์ด๊ธฐ ๋๋ฌธ์ ์ด์ ํ๋ ฌ์
๋๊น? ์๋ ์ค์ ๋ก 2x2 ํ๋ ฌ์ ๋ง์ ๋ชจ๋์ ์ ์ํ ์ค์นผ๋ผ๋ก ์ฌ์ฉํ๋ ค๋ ๊ฒฝ์ฐ์๋ง ์ค์นผ๋ผ์
๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ฌํ ๋งฅ๋ฝ์์ ์์ ๊ฒฐ๊ณผ๊ฐ ์๋ ํ ๊ฒฐ๊ณผ๋ผ๋ ๊ฒ์ด ๋ถ๋ช
ํ์ง ์์ต๋๋ค. ์ ํด๋ฆฌ๋ ๋ด๋ถ ์ ํ์ ์ด์จ๋ ๋ชจ๋ ๋ฑ์ ๋งฅ๋ฝ์์ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์์ผ๋ฏ๋ก Base๊ฐ ์ฌ๋ฐ๋ฅธ ๋์์ ์ ์ํ๋ ๋ฐ ์ ๊ฒฝ ์ฐ์ง ์์์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฐ๋ผ์ ์์ ์ง์ ์ด ํ๋ ฌ๋ก ์ฑ์์ง ํ๋ ฌ์ ๋ธ๋ก ํ๋ ฌ๋ก ํด์ํ๋ ๊ฒ ์ด์์ผ๋ก ๋๊ธฐ๋ฅผ ํ์ฅํ๋ ค๋ ์๋ ์ผ ์ ์์ง๋ง ๊ฒฐ๊ตญ์๋ ๋ธ๋ก ํ๋ ฌ ํด์์ด adjoint
๋ฅผ ๋ง๋๋ ์ ์ผํ ๋๊ธฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฒ์์๋ transpose
(์ํ์ ์๋ฏธ์์๋ ์ฌ์ฉ๋์ง ์์ง๋ง ํญ์ ํ๋ฆฝ ๋งคํธ๋ฆญ์ค ์ธ๋ฑ์ค์์๋ ์ฌ์ฉ๋จ)์กฐ์ฐจ๋ ์ฌ๊ท ์ ์
๋๋ค. ์ ์ค์นผ๋ผ ํ๋ ์ ํ์ ์ง์ ์ ์ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๊ธฐ ์ ์ adjoint
๋ฐ transpose
์ธ์ conj
๋ฅผ ์ ์ํด์ผํ๋ ๊ฒ์ ์ด์ํ ๋ถ๋ด์
๋๋ค. ๋งคํธ๋ฆญ์ค์์.
๊ทธ๋ ๋ค๋ฉด Julia์ ๊ฐ์ ๊ฐ๋ ฅํ ์ ํ ์์คํ ์ ์ฌ์ฉํ์ฌ ๋จ์ํ ๋ธ๋ก ํ๋ ฌ ์ ์ฉ ์ ํ์ ๊ฐ๋ ๊ฒ์ด ์๋๋๋ค. ๋ฐ๋ผ์ ์ ๋ง์ ์นํธ์ ์ญํ :
๋งํ๋ฏ์ด, ๋๋ ํนํ transpose
์ผ์ด์ค์ ๊ฒฝ์ฐ (์์ ๋ชจ๋ ํ ๋ก ์ ์ฝ์ ํ์๋) ์ ํจ์ฑ์ ์๋ฌธ์ ์ ๊ธฐํ๋ ๊ฒ์ด ์๋๋ผ ๋ฐ๋์ ๋ฐ๋ํ๋ ๊ฒ์ ์๋๋๋ค.
์ด๊ฒ์ ์๋ง๋ ๋๋ฅผ ๊ธ์ง / ์ถ๋ฐฉ ๋นํ ๊ฒ์ ๋๋ค.
๋๋ ์ด๊ฒ์ด ๋๋ด์ด๋ผ๋ ๊ฒ์ ์๊ณ ์์ง๋ง ์ธ๊ธฐ๊ฐ์๋ ์๊ฒฌ์ ๊ฐ์ง ์ฌ๋์ ์ ๋๋ก ๊ธ์ง๋์ง ์์ต๋๋ค. ์ฅ๊ธฐ๊ฐ ๊ณ์๋๋ ๋์ ํ๋ ๋ง์ด ๊ธ์ง๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ๊ธ์ง๋ ์๊ตฌ์ ์ด์ง ์์ต๋๋ค .
๋ฒกํฐ์ ์ฐ์ฐ์ / ํ๋ ฌ์ด ์ฌ๊ท ์ ์ผ๋ก ์ ์๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ํ์ ์ผ๋ก ์๊ฒฉํ ์ด์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ค์นผ๋ผ ํ๋์ ๋ํด ์ ์๋ฉ๋๋ค (๋ฒกํฐ ๊ณต๊ฐ ๋์ โโ๋ชจ๋๋ก ์์ ํ๋ ค๋ ๊ฒฝ์ฐ ํ์ฅ ๋ง์ผ๋ก๋ ์ ์ ๋จ). ).
์ด ์ง์ ์ ๋์๊ฒ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๋ฒกํฐ๋ก ๊ตฌ์ฑ๋ ๋ฒกํฐ, ํจ์๋ก ๊ตฌ์ฑ๋ ๋ฒกํฐ ๋๋ ํ๋ ฌ๋ก ๊ตฌ์ฑ๋ ๋ฒกํฐ๋ +
๋ฐ * scalar
์ฌ๊ท ์ ์ผ๋ก ์ ์ ๋ ๋ฒกํฐ ๊ณต๊ฐ (๊ธฐ๋ณธ ์ค์นผ๋ผ ํ๋ ์์)์ ํ์ฑํ๋ฉฐ ์ ์ฌํ๊ฒ ํ์ฑ๋ฉ๋๋ค. ๋ด์ ์ด ์ฌ๊ท ์ ์ผ๋ก ์ ์ ๋ ๋ด์ ๊ณต๊ฐ. ๋ฒกํฐ๊ฐ "์ค์นผ๋ผ์ ์ด"์ผ ์๋ง ์๋ค๋ ์๊ฐ์ ์ํ, ๋ฌผ๋ฆฌํ ๋ฐ ๊ณตํ์ ์ ์์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ์ ๋ชจ๋ ์๋ฐํฉ๋๋ค.
a=[rand(2,2),rand(2,2)]
๋ง๋ค๊ณa'*a
๊ด์ฐฐํฉ๋๋ค. ์ค์นผ๋ผ๊ฐ ์๋๋๋ค.
์ด ๊ฒฝ์ฐ a
์ "์ค์นผ๋ผ ๋ง"์ 2x2 ํ๋ ฌ์ ๋ง์
๋๋ค. ๋ฐ๋ผ์ ์ด๊ฒ์ adjoint๊ฐ ์๋ํ๋ ๋ฐฉ์์ ๋ฌธ์ ๊ฐ ์๋๋ผ ์ธ์ด ๋ฌธ์ ์
๋๋ค.
a'*a
์ด Julia์์ ํ์ฌ ์๋ํ๋ (๋๋ ์๋ํ์ง ์๋) ๋ฐฉ์์์ ์ด๋ป๊ฒ ์๋
์ ์ค์นผ๋ผ ํ๋ ์ ํ์ ์ง์ ์ ์ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํ๊ธฐ ์ ์
adjoint
๋ฐtranspose
์ธ์conj
๋ฅผ ์ ์ํด์ผํ๋ ๊ฒ์ ์ด์ํ ๋ถ๋ด์ ๋๋ค. ํ๋ ฌ์์
์ด ๋ถ๋ด์ ์ค์ ๋ณด๋ค ์ฌ๋ฏธ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. Number
์ ํ์ ์ ํ์ผ๋ก ๋ง๋ค์ด๋ ๊ด์ฐฎ๋ค๋ฉด ์๋ฌด๊ฒ๋ ์ ์ ํ ํ์๊ฐ ์์ผ๋ฉฐ Number
์ด ์ณ์ง ์๋ค๊ณ ์๊ฐํ๋๋ผ๋ ์ ์๊ฐ ๋๋ฌด ์ฌ์ํด์ ๊ทธ๋ค์ ์ถ๊ฐํ๋ ๊ฒ์ ๊ฑฐ์ ๋ถ๋ด์ด๋์ง ์์ต๋๋ค.
๊ทธ๋ ๋ค๋ฉด Julia์ ๊ฐ์ ๊ฐ๋ ฅํ ์ ํ ์์คํ ์ ์ฌ์ฉํ์ฌ ๋จ์ํ ๋ธ๋ก ํ๋ ฌ ์ ์ฉ ์ ํ์ ๊ฐ๋ ๊ฒ์ด ์๋๋๋ค.
https://github.com/KristofferC/BlockArrays.jl/ ๊ธฐ์ฌ์ ํ์ :)
"๊ธ์ง"๋๋ด์ ๋ํด ์ฌ๊ณผ๋๋ฆฝ๋๋ค. ์ด ํ ๋ก ์ ๋ ์ด์ ๋ฐฉํดํ์ง ์๊ธฐ์ํ ๋ง์ง๋ง ๋ฐ์์ด ๋ ๊ฒ์ ๋๋ค. ์ฌ๊ท ์ adjoint (์๋ง๋ ์ ์น๊ฐ ์๋)๊ฐ ์ ํด ์ก์์ด ๋ถ๋ช ํ๋ฉฐ, ๊ทธ ๊ฒฐ์ ์ ์ทจ์ํ์ง ์์ผ๋ ค ๊ณ ํฉ๋๋ค. ๋๋ ๋จ์ง ๋ช ๊ฐ์ง ๋ถ์ผ์น๋ฅผ ์ง์ ํ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค.
@StefanKarpinski : ์ค์นผ๋ผ ๋ง์ ์๋ ์ฌ๊ท์ ์ ํํ ๋ชจ์๋ฉ๋๋ค. 2x2 ํ๋ ฌ ์์ฒด๊ฐ ์ค์นผ๋ผ์
๋๊น, ์๋๋ฉด ์ ์๊ฐ ์ฌ๊ท์ ์ด๊ณ ๊ธฐ๋ณธ Number
์ ํ์ด ์ค์นผ๋ผ์
๋๊น?
์ ์์ ๊ฒฝ์ฐ ์ค์ ๋ก ๋ฒกํฐ ๊ณต๊ฐ ๋์ โโ๋ชจ๋์ด ์์ผ๋ฉฐ ํด๋น '์ค์นผ๋ผ'์ ๋ํด conj
๋๋ adjoint
๋ฅผ ์ํ๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ์ฌ์ฉ ์ฌ๋ก์ ๋ฐ๋ผ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค. ๋ด๋ถ ์ ํ๊ณผ adjoint๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋๋ ํ์์ ์ ์๋ฅผ ๋ฐ์ ๋ค์ฌ๋ ๊ด์ฐฎ์ต๋๋ค. ๋๋ ๋ด ์ง์
์์ ์ํผ ๋ฒกํฐ ๊ณต๊ฐ์ ๋ฑ๊ธ์ด ๋งค๊ฒจ์ง ํ
์ ๊ณฑ์ ๊ทธ๋ฃน ๋ถ๋ณ ๋ถ๋ถ ๊ณต๊ฐ์์ ์์์ ์์๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก ๋ฒกํฐ ์ ์์์ ์ค์ ๋ก ์ซ์ ์ด์ ๊ตญํ๋์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ ํ๋ ฌ์ ๋ฒกํฐ๋ ์์ํ ๋ฒกํฐ์ผ๊น์ ์๋๋ฉด ์ผ๋ถ ํ๋ ฌ ๋์์ ์์ํด์ผํ ๊น์? ์ ์์ ๊ฒฝ์ฐ dot(v,w)
๋ ํด๋น ์์์ ๋ํด vecdot
๋ฅผ ์ฌ๊ท ์ ์ผ๋ก ํธ์ถํ์ฌ ์ค์นผ๋ผ๋ฅผ ์์ฑํด์ผํฉ๋๋ค. ํ์์ ๊ฒฝ์ฐ ์ ์ด๋ vecdot(v,w)
๋ ์ฌ๊ท ์ ์ผ๋ก ์๋ํ์ฌ ์ค์นผ๋ผ๋ฅผ ์์ฑํด์ผํฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ๊ท adjoint์ ์ผ์นํ๋๋ก ์ต์ํ์ ์์ ์ด ๋ ๊ฒ์
๋๋ค.
๊ทธ๋ฌ๋ ์ฌ๊ท transpose
๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ํ์ด ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์๋ ์ฌ์ฉํ ์ ์๋๋ก ํ์ฉํ๋ ๊ฒ์ด ๋ ๊ฐ๋จ ํด ๋ณด์
๋๋ค. ์ผ๋ฐ์ ์ธ ํ๋ ฌ ๋ฐฉ์ ์์์๋ ์ค์ ์ํ ์ ์น์๋ ๊ฑฐ์ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ ํ์ง๋์.
dot
๋ vecdot
์๋๋ผ dot
์ฌ๊ท ์ ์ผ๋ก ํธ์ถํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฐ๋ผ์ ํ๋ ฌ์ ๋ํ ํ์ค ๋ด๋ถ ๊ณฑ์ ์ ์ํ์ง ์์์ผ๋ฏ๋ก ํ๋ ฌ ๋ฒกํฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ ์น๊ฐ ์ฌ๊ท ์ ์ด๋ผ๋ ์ฌ์ค์ ํญ์ ๋๋๊ณ .. ๋๊ตฌ๋ ๊ทธ๋ ์ง ์๋ค๋ ๊ฒ์ ์์ํ ์ ์์ต๋๋ค. (๋๋์ด ๋ ผ์ ๋๋ฌธ์โ์ ํ์ง๋์ ์ ์นโ์ํคํผ๋์ ๊ธฐ์ฌ์ ๋ํ ๊ฒฌํด๊ฐ ์ ์ด๋ ์ธ ๋ฐฐ๊ฐ๋์๋ค๊ณ ์๊ฐํฉ๋๋ค.)
์ ๋ ์ข ์ข ์ฌ๊ท ์ ์ ์๊ฐ ๋ถ์์ ํ๋ค๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก @Jutho๊ฐ ํํํ ๊ฒฌํด๋ฅผ ๊ณต์ ํ์ต๋๋ค (ํ์ง๋ง ๋ค์ ์ฐ๋ฆฌ๋ ๋งค์ฐ ์ ์ฌํ ํ๋ จ์ ๋ฐ์์ต๋๋ค).
๋๋ ์ฌ๊ธฐ์ ๋๋ฅผ ๊ดด๋กญํ๋ ๋ถ์ผ์น๋ฅผ ์์ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฌ๊ธฐ์์๋ ๋ณต์์์ 2x2 ํ๋ ฌ ์๋ฒ ๋ฉ๊ณผ ๊ฐ์ ๋ง๊ณผ ํ๋๋ฅผ ๊ณ์ ์ฌ์ฉํ์ง๋ง ์ค์ ๋ก๋ ์ฌ๊ท ์ ์น (๊ทธ๋ฆฌ๊ณ ์ธ์ ).
์ค๋ช ํ๊ฒ ์ต๋๋ค. ๋ด๊ฐ ๊ด๋ฒ์ํ๊ฒ ๋์ํ๋ ๊ฒ
adjoint
์ ๊ฐ์ LinAlg
๊ฐ๋
์ด ์ ์ฉ๋์ง ์์ ์ด์ ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด adjoint(z::Complex) = conj(z)
์ ์ํด์ผํฉ๋๋ค. (์ค์นผ๋ผ์ ๋ฒกํฐ์ ํ๋ ฌ ์ธ์๋ LinAlg
๊ฐ๋
์ ๋ค๋ฅธ ๊ฐ์ฒด๋ก ํ์ฅ ๋ ์๋ ์์ต๋๋ค (์ฌ์ฉ์์ ์ํด). @stevengj ๋ ์๋ฅผ ๋ค์ด ๋ฌดํ ํฌ๊ธฐ์ ๋ฒกํฐ ๊ณต๊ฐ (Hilbert ๊ณต๊ฐ)์ ์ธ๊ธํ์ต๋๋ค).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์ ํฉ์น๋ค ๋ ๊ฒ์ @Jutho๋ ์ด๊ฒ์ ์ง์ ํ์ต๋๋ค). ์๋์์๋ 3. ์ฌ๊ท ์ adjoint
๋ฐ ๋ธ๋ก ํ๋ ฌ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ฐ์ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ด 2๋ฅผ ์ ๊ณตํ์ง ์๋๋ค๋ ๊ฒ์ ๋ณด์ฌ์ฃผ๊ณ ์ถ์ต๋๋ค. ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ์์ ์
๋๋ค. ๋ณต์์์ 2x2 ํ๋ ฌ์ 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
๊ฐ๋ฅ์ ๋ด์ฅ ์ฐ๋ฆฌ์ 2 ร 2 ํ๋ ฌ์ ์ฒ๋ฆฌ ํ ์ Complex
ํน์ ์๊ฐ์ "์ค์นผ๋ผ"๊ฐ ์๋ฏธํ๋ ๋ฐ๋ฅผ ์ถ๋ก ํ๋ "์๋"๋ฐฉ์์ผ๋ก trace(Z)
์ด๋ฉฐ ์ฌ๊ธฐ์ Z = [1 0; 0 1]
๋ 2
์ด๊ณ ์ด๊ฒ์ 1
์ ํํ์
๋๋ค. rank(Z)
์ ์ฌํฉ๋๋ค.
์ผ๊ด์ฑ์ ๋ณต๊ตฌํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ 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
with recursive adjoint
| AdjointMatrix
๋๋ TransposedMatrix
with recursive adjoint
|
| transpose
| RowVector
with recursive transpose
| TransposeMatrix
with recursive transpose
|
| flip
| ์ฌ๋ณธ ๋๋ PermutedDimsArray
? | ์ฌ๋ณธ ๋๋ PermutedDimsArray
? |
| conj
/ AbstractArray
| ๊ฒ ์ผ๋ฅด๊ฑฐ๋ ์ด๋งํฉ๋๊น? | ๊ฒ ์ผ๋ฅด๊ฑฐ๋ ์ด๋งํฉ๋๊น? |
| conj
/ RowVector
๋๋ TransposedMatrix
| ๊ฒ์ผ๋ฅธ | ๊ฒ์ผ๋ฅธ |
(์์์๋ ๋ฐ์ดํฐ ๋ฐฐ์ด์ ์์ด ์ฐจ์์์ ์ ํ ๋์ ๋ฌธ์ ๋ฅผ ๋ถ๋ฆฌํ๋ ค๋ ์๋์ ๋๋ค.)
๊ทธ๋์ ๋ช ๊ฐ์ง ๊ธฐ๋ณธ์ ์ธ ์ง๋ฌธ์ด ์์ต๋๋ค.
transpose
์์ต๋๊น? adjoint
์ด๋ป์ต๋๊น?conj(transpose(array)) == adjoint(array)
๋ฅผ ๊ฐ์ ํ ๊น์?conj
๊ฒ์ผ๋ฅธ ์ํ๋ก ๋ง๋ค๊น์?flip
์ ์๊ฐํ๋ฉด ๊ฒ ์ผ๋ฅด๊ฑฐ๋ ์ด๋งํฉ๋๊น?์ฐธ๊ณ ๋ก ๋๋ permutedims
๋ํด ๋ ์งง์ ํ์์ ์ฌ์ฉํ์ฌ # 24839์์ ํ๋ ฌ์ ์ฐจ์์ "๋ค์ง๋"์ ๋ง์ฐฐ ์ ๊ทผ ๋ฐฉ์์ ์๋ํ์ต๋๋ค.
์ ๋ @ Sacha0 ์ ์ ์ 2๋ฅผ ๊ฐ๋ ฅํ ์ฐฌ์ฑํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ๊ท ๋ ๋น ์ฌ๊ท adjoint์ ์ด๋ก ์ ํ ๋๋ฅผ ์์ ํ ๋ถ๋ฅํ์ง๋ ์์์ง๋ง, ๊ทธ๊ฒ๊ณผ๋ ๋
๋ฆฝ์ ์ผ๋ก : ์ ์ด๋ ๋์๊ฒ ์ ์ฉํ๋ค๊ณ ํ๋ช
๋์์ต๋๋ค. , ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง ์๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์๋ง๋ ์ข์ง ์์ ๊ฒ์
๋๋ค. ์กฐ์ฎ๊น์ ํ์ํ ๊ฒฝ์ฐ ์ด์ ๊ด๋ จํ์ฌ adjoint (= conjโadjoint
)๋ฅผ ๋ฐ๋ผ์ผํฉ๋๋ค.
FWIW, Mathematica๋ Transpose
๋๋ ConjugateTranspose
์ฌ๊ท๋ฅผ ์ํํ์ง ์์ต๋๋ค.
๋๋ ์์ ์ ๊ตํ ํ ๋ก ์ ์ฝ์ผ๋ ค๊ณ ํ์ง๋ง ์ด๋ค ์์ ์์ ์ํ์ ์ ์น๊ฐ ์ฌ๊ท ์ ์ด์ด์ผํ๋ค๊ณ ๊ฒฐ์ / ๋๊ธฐํ๋์๋์ง ํ์ธํ์ง ๋ชปํ์ต๋๋ค. [...] ์์ ์ฑ / ์๋ฆฝ์ฑ์ ์ํด, ๊ทธ ๊ฐ๋ ๊ณผ ๊ทธ๊ฒ์ด ์ฌ๊ท ์ ์ด์ด์ผํ๋ ์ด์ ๊ฐ ๊ฐ๋ตํ๊ฒ ๋ฐ๋ณต / ์์ฝ ๋ ์ ์์ต๋๊น?
์ด ๊ฐ์ ์ ์ดํดํ๊ณ ๊ฐ์ฌ ๋๋ฆฌ๋ฉฐ ์๊ฐ์ด ํ๋ฝํ๋ ํ ํด๊ฒฐํ๊ณ ์ํฉ๋๋ค. adjoint ๋ฐ transpose๊ฐ ์ ์์ ๋ฐ๋ผ ์ฌ๊ท ์ ์ด์ด์ผํ๋ ์ด์ ๋ฅผ ์ก์ธ์ค ๊ฐ๋ฅํ๊ณ ๋ช ๋ฃํ๊ฒ ์ค๋ช ํ๋ ๊ฒ์ ๋ถํํ๋ ๊ธฐ๊ปํด์ผ ์ด๋ ต๊ณ ๊ฐ๋ตํ๊ฒ๋ ๋ถ๊ฐ๋ฅํ ์ ์์ต๋๋ค. ์์ ๊ฐ์ ์ผ๊ด๋๊ณ ํฌ๊ด์ ์ธ ๊ธ์ ์์ฑํ๋ ๋ฐ๋ ์์ฒญ๋ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. ์๊ฐ์ด ์งง๊ธฐ ๋๋ฌธ์ ํ๋ฃจ ๋์ ํน์ ์์ / ์ง๋ฌธ์ ์๋ตํ์ฌ ์ด์ ๋ช ๊ฒ์๋ฌผ์ ํผ๋์ ํด๊ฒฐํ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค. ๋ด๊ฐ ๊ทธ๋ ๊ฒ ๋จํธ์ ์ธ ๋์ ๋๋ฅผ ์ฐธ์์ฃผ์ธ์ :). ๋ฒ ์คํธ!
adjoint ... ์ ์์ ๋ฐ๋ผ ์ฌ๊ท ์ ์ด์ด์ผํ๋ ์ด์ ์ค๋ช ...
์ ๋์ด ํ ๋ก ์ ๊ธฐ์ฌํ ๋ชจ๋ ์ฌ๋๋ค์ด adjoint(A)
์ด ์ฌ๊ท ์ ์ด์ด์ผํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ์ ์ผํ ๋
ผ์ ์ ์ transpose(A)
๋ ์ฌ๊ท ์ ์ด์ด์ผํ๋์ง ์ฌ๋ถ (๊ทธ๋ฆฌ๊ณ ๋น์ฌ ๊ท์ ์ ์น์ ๋ํด ์๋ก์ด ํจ์ flip(A)
๋ฅผ ๋์
ํด์ผํ๋์ง ์ฌ๋ถ)์
๋๋ค.
๋๋์ด ํ ๋ก ์ ๊ธฐ์ฌํ ๋ชจ๋ ์ฌ๋๋ค์ด adjoint (A)๊ฐ ์ฌ๊ท ์ ์ด์ด์ผํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด https://github.com/JuliaLang/julia/issues/20978#issuecomment-347777577 ๋ฐ ์ด์ ์ฃผ์์ ์ฐธ์กฐํ์ญ์์ค. :). ๋ฒ ์คํธ!
์ฌ๊ท ์ adjoint์ ๋ํ ์ธ์๋ ์ ์์์ ๋งค์ฐ ๊ธฐ๋ณธ์ ์
๋๋ค. dot(x,y)
๋ ๋ด๋ถ ๊ณฑ์ด์ด์ผํฉ๋๋ค. ์ฆ, ์ค์นผ๋ผ๋ฅผ ์์ฑํ๊ณ adjoint์ ์ ์๋ dot(A'*x, y) == dot(x, A*y)
์
๋๋ค. ์ฌ๊ท ( dot
๋ฐ adjoint
)๋์ด ๋ ์์ฑ์์ ๋ฐ๋ฆ
๋๋ค.
(๋ด์ ๊ณผ์ ๊ด๊ณ๋ ์ ํ ๋์์์ adjoint์ transpose๊ฐ ์ค์ํ ์ฐ์ฐ์ด๋๋ ์ ์ฒด์ ์ธ ์ด์ ์
๋๋ค. ๊ทธ๊ฒ์ด ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ๋ค์ ๋ํ ์ด๋ฆ์ ๊ฐ์ง๊ณ ์๋ ์ด์ ์ด๋ฉฐ, ํ๋ ฌ์ 90๋ ํ์ ํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ฐ์ฐ์ ๋ํด์๋ ์๋๋๋ค. (Matlab์์๋ rot90
).)
๋น ์ฌ๊ท ์ ์น์ flip
๋ฅผ ์ฌ์ฉํ ๋์ ํ ๊ฐ์ง ๋ฌธ์ ๋ Matlab๊ณผ Numpy๊ฐ ๋ชจ๋ flipdim
๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ flip
๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์
๋๋ค.
๋๋ ํ๋ ฌ์ ์ ์น๊ฐ ๋ฒกํฐ์ ์์ฉํ์ง ์๊ณ RowVector์ ์์ฉํ๋ ๊ฐ์ฒด๊ฐ ๋ ๊ฒ์ด๋ผ๋ ๋จ์ํ ์ด์ ๋๋ฌธ์ ์ถ์์ ์ธ ์ํ์ ์๋ฏธ์์ ์ ์น๋ฅผ ์ค์ ๋ก ์ฌ์ฉํ์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฆ, RowVector๋ฅผ ๋งคํํฉ๋๋ค. RowVector์.
๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ธ ํ๋ ฌ ๋ฐฉ์ ์์์๋ ์ ํ ๋งต์ ์ค์ ์ํ์ ์ ์น์ ๊ฑฐ์ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ท ์ ์น๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ํ์ด ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์๋ ์ฌ์ฉํ ์ ์๋๋ก ํ์ฉํ๋ ๊ฒ์ด ๋ ๊ฐ๋จ ํด ๋ณด์ ๋๋ค.
์ ์น (์ํ์ ์๋ฏธ์์๋ ์ฌ์ฉ๋์ง ์์ง๋ง ํญ์ ํ๋ฆฝ ๋งคํธ๋ฆญ์ค ์ธ๋ฑ์ค ์๋ฏธ์์๋ ์ฌ์ฉ๋จ)
์ด๊ฒ์ ์ฝ๊ฐ ์ฐํ์ ์ผ๋ก ๋ณด์ผ ๊ฒ์ด๋ฏ๋ก ์ ์ ํจ๊ป ์ฐธ์์ฃผ์ธ์ :).
Julia์ adjoint
๋ ํน๋ณํ Hermitian adjoint ๋ฅผ ๋ํ๋
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก, ๊ฐ๊ฐ์ ์ด์ค ๊ณต๊ฐ U * ๋ฐ V๊ฐ์๋ U ๋ฐ V ์์ ํ ์ ๊ท ๋ฒกํฐ ๊ณต๊ฐ (Banach ๊ณต๊ฐ) ๋ฐ ์ ํ ๋งต A : U-> V์ ๊ฒฝ์ฐ, ์ผ๋ฐ์ ์ผ๋ก A๋ก ํ์๋๋ A์ ์ธ์ ์์ ๋ ์ ํ ๋งต A์
๋๋ค. * : V *-> U * . ์ฆ, ์ผ๋ฐ์ ์ผ๋ก adjoint๋ ์ด์ค ๊ณต๊ฐ ์ฌ์ด์ ์ ํ ๋งต์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ์น A ^ t๋ ์์์ ์ธ๊ธ ํ ์ด์ค ๊ณต๊ฐ ์ฌ์ด์ ์ ํ ๋งต์
๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ฌํ ์ ์๋ฅผ ์ต์ํ Hermitian adjoint ๊ฐ๋
๊ณผ ์ด๋ป๊ฒ ์กฐํ์ํฌ๊น์? :)
๋๋ต์ ์ผ๋ฐ์ ์ผ๋ก ์์ ํ๋ ๊ณต๊ฐ, ์ฆ ์์ ํ ๋ด๋ถ ์ ํ ๊ณต๊ฐ (Hilbert ๊ณต๊ฐ)์ด ์์ ํ๋ ์ถ๊ฐ ๊ตฌ์กฐ์ ์์ต๋๋ค. ๋ด์ ์ ๊ท๋ฒ์ ์ ๋ํ๋ฏ๋ก ์์ ํ ๋ด์ ๊ณต๊ฐ (Hilbert)์ ์์ ํ ๊ท๋ฒ ๊ณต๊ฐ (Banach)์ด๋ฏ๋ก (Hermitian) adjoint์ ๊ฐ๋ ์ ์ง์ํฉ๋๋ค. ํต์ฌ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋จ์ํ ํ์ค์ด ์๋ ๋ด์ ์ ๊ฐ๋ ์ ํ ๋์์์ ๊ฐ์ฅ ์๋ฆ๋ค์ด ์ ๋ฆฌ ์ค ํ๋, ์ฆ Riesz ํํ ์ ๋ฆฌ๊ฐ ์ ์ฉ๋ฉ๋๋ค. ๊ฐ๋จํ ๋งํด์, Riesz ํํ ์ ๋ฆฌ๋ Hilbert ๊ณต๊ฐ์ด ์์ฐ์ ์ผ๋ก ์ด์ค ๊ณต๊ฐ๊ณผ ๋ํ์ด๋ผ๊ณ ๋งํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก Hilbert ๊ณต๊ฐ์ผ๋ก ์์ ํ ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ณต๊ฐ๊ณผ ์๋๋ฅผ ์๋ณํ๊ณ ๊ตฌ๋ณ์ ์ญ์ ํฉ๋๋ค. ๊ทธ๋ฌํ ์๋ณ์ํ๋ ๊ฒ์ A * : V *-> U *๊ฐ ์๋ A * : V-> U๋ก ์น์ํ Hermitian adjoint ๊ฐ๋ ์ ๋๋ฌํ๋ ๋ฐฉ๋ฒ ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ Hilbert ๊ณต๊ฐ์ ๊ณ ๋ คํ ๋ ์ ์น์ ๋ํด ๋์ผํ ์๋ณ์ด ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, A ^ t : V-> U๋ ์ต์ํ ์ ์น ๊ฐ๋ ์ ์ฐ์ถํฉ๋๋ค. ๊ทธ๋์ ๋ช ํํํ๊ธฐ ์ํด, ์, ์ ์น์ ์ผ๋ฐ์ ์ธ ๊ฐ๋ ์ ๊ฐ์ฅ ์น์ํ (Hilbert) ์ค์ ์ ์ ์ฉ๋ ์ ์น์ ์ผ๋ฐ์ ์ธ ๊ฐ๋ ์ ๋๋ค. Hermitian adjoint์ ์ผ๋ฐ์ ์ธ ๊ฐ๋ ์ด ํด๋น ์ค์ ์ ์ ์ฉ๋ adjoint์ ์ผ๋ฐ์ ์ธ ๊ฐ๋ ์ธ ๊ฒ์ฒ๋ผ ๋ง์ ๋๋ค. ๋ฒ ์คํธ!
์ฃฝ์ ๋ง์ ์ณ์ ๋ฏธ์ํ์ง๋ง ์ํ์ ํผ๋์ ๋ฌธ์ ๋ฅผ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๊ฐ๋ตํ ์์ฝํ๊ฒ ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๋ถ์ผ์น์ ์์ ์ T
๊ฐ ๋ฐฐ์ด๊ณผ ๊ฐ์ ํ์ ๊ตฌ์กฐ๊ฐ์๋ Number
์ ํ์ ์ ํ์ด ์๋ ๊ฒฝ์ฐ Vector{T}
๊ฐ์ฒด๋ฅผ ์ํ์ ์ผ๋ก ํด์ํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
ํ ํํ๋ @stevengj ์ ์ฃผ์ฅ์ ๋ฐ์๋ค์ ๋๋ค.
๋ง R ์์ ๋ฒกํฐ ๋ฒกํฐ๋ ์ง์ ํฉ๊ณ ๊ณต๊ฐ์ผ๋ก ๊ฐ์ฅ ์ ์ดํด๋๋ฉฐ R ์์ ๋ฒกํฐ ๊ณต๊ฐ์ด๊ธฐ๋ํฉ๋๋ค.
๋ฌดํ ์ฐจ์ ๋ฒกํฐ ๊ณต๊ฐ ๋ฑ์ ๊ดํ ํน์ ๋ฏธ๋ฌํจ์ ๋ชจ๋๋ก ํํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฒกํฐ์ ๋ฒกํฐ๋ฅผ ๋ธ๋ก ๋ฒกํฐ๋ก ์๊ฐํด์ผ ํจ์ ์๋ฏธํฉ๋๋ค. ๋ฐ๋ผ์ Vector{Vector{T<:Number}}
๋ ์ ์ ์ ์ผ๋ก ๋จ์ํ Vector{T}
๋ก "ํํํ"๋์ด์ผํฉ๋๋ค. ์ด ํจ๋ฌ๋ค์ ๋ด์์ ํ๋ ฌ์ ํ๋ ฌ๋ก ํํ๋๋ ์ ํ ์ฐ์ฐ์๋ ๋ธ๋ก ํ๋ ฌ๋ก ์ ์ฌํ๊ฒ ๊ฐ์ฃผ๋์ด์ผํ๋ฉฐ adjoint
๋ ํ์คํ ์ฌ๊ท ์ ์ด์ด์ผํฉ๋๋ค. transpose
์์ ๋จ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ํ์ ์๋ฏธ . ์ ๊ฐ ํ๋ ธ๋ค๋ฉด ์ ๋ฅผ ๊ณ ์ณ์ฃผ์ธ์.ํ์ง๋ง ์ด๋ฐ ๊ด์ ์ ์ทจํ๋ ์ฌ๋๋ค์ Vector{Matrix{T}}
๊ฐ์ ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๋์์ธํด์ผ ํ ์์ฐ์ค๋ฝ๊ณ ์ถฉ๋ถํ ํด์์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. (ํนํ @stevengj๊ฐ ๋งํ๋ฏ์ด ๋ด๋ถ Matrix
๊ฐ ๋ณต์์์ ํ๋ ฌ ํํ์ด๋ผ๊ณ ๊ฐ์ ํด์๋ ์๋ฉ๋๋ค.
2x2 ํ๋ ฌ๋ก ๋ณต์์๋ฅผ ํํํ๋ ๊ฒฝ์ฐ ๋ณต์กํ ๋ฒกํฐ ๊ณต๊ฐ์ด ๋ค๋ฆ ๋๋ค.
)
๋ ๋ค๋ฅธ ์๊ฐ์ Vector{T}
๋ T
์ ํ์ ์ค์นผ๋ผ (๋จ์ด์ ์ ํ ๋์์ ์๋ฏธ์์) ์์ ์ถ์์ ์ธ ๋ฒกํฐ ๊ณต๊ฐ์์๋ ๋ฒกํฐ์ ํํ์ผ๋ก ํญ์ ์๊ฐ๋์ด์ผํ๋ค๋ ๊ฒ์
๋๋ค. T
์ ํ์ ๊ด๊ณ์์ด. ์ด ํจ๋ฌ๋ค์์์ Vector{Vector{T'}}
๋ ์ง์ ํฉ๊ณ ๊ณต๊ฐ์ ์์๊ฐ ์๋๋ผ ์ค์นผ๋ผ Vector{T'}
์ ๋ฒกํฐ๋ก ๊ฐ์ฃผ๋์ด์ผํฉ๋๋ค. ์ด ๊ฒฝ์ฐ์๋ transpose(Matrix{T})
์ฌ๊ท ์๋๋ฉฐ, ๋จ์ํ ์ธ๋ถ ๋งคํธ๋ฆญ์ค๋ฅผ ๋ฐ์ ํ๋ค. ์ด ํด์์ ํ ๊ฐ์ง ๋ฌธ์ ๋ T
์ ํ์ ์์๊ฐ ์ ํจํ ์ค์นผ๋ผ ๋ง์ ํ์ฑํ๊ธฐ ์ํด์๋ (๊ตํ) ๋ง์
๋ฐ ๊ณฑ์
์ ๋ํ ์ ์ ์ ๋ ๊ฐ๋
์ด ์์ด์ผํ๋ค๋ ๊ฒ์
๋๋ค. Vector{Vector{T'}}
์ ๊ฐ์ ๋ฒกํฐ์ ๊ฒฝ์ฐ ๋ ๊ฐ์ "์ค์นผ๋ผ" Vector{T'}
๋ฅผ ๋ค๋ฅธ Vector{T'}
์ ๊ณฑํ๋ ๊ท์น์ด ํ์ํฉ๋๋ค. ํ์คํ ๊ทธ๋ฌํ ๊ท์น (์ : T'
๋ฅผ ๊ณฑํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์์ ๋ณ ๊ณฑ์
)์ ์๊ฐ ํด๋ผ ์ ์์ง๋ง, ๊ทธ๋ ๊ฒํ๋ ๋ณดํธ์ ์ธ ์์ฐ์ค๋ฌ์ด ๋ฐฉ๋ฒ์ ์์ต๋๋ค. ๋ ๋ค๋ฅธ ๋ฌธ์ ๋์ด ํด์์์ adjoint
๊ฐ ์๋ํ๋ ๋ฐฉ์์
๋๋ค. Hermitian adjoint ๋ ์ ์์ ๋ฐ๋ผ ์ค์นผ๋ผ ํ๋ ๊ฐ ์ค์ ๋๋ ๋ณต์์ ์ฌ์ผํ๋ Hilbert ๊ณต๊ฐ์ ๋ํ ์ ํ ์ฐ์ฐ์์์๋ง ์ ์๋ฉ๋๋ค. ๋ฐ๋ผ์ adjoint
์ ํ๋ ฌ Matrix{T}
์ ์ ์ฉํ๋ ค๋ฉด T
์ด ๋ณต์์ (๋๋ ์ค์)๋ฅผ ํํํ๋ค๊ณ ๊ฐ์ ํด์ผํฉ๋๋ค. ๊ทธ ์ผ์ด์ค๊ฐ ๋ ๋ฏธ๋ฌํ๊ธฐ ๋๋ฌธ์ ๋ณต์กํฉ๋๋ค). ์ด ํด์์์, adjoint
์ฌ๊ทํ์ง ์์์ผํ์ง๋ง, ์ธ๋ถ ๋งคํธ๋ฆญ์ค๋ฅผ ๋ค์ง์ดํด์ผํ๊ณ ์ ์ฉ conjugate
. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์๋ ๋ ๋ง์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. conjugate(T)
์ ์ฌ๋ฐ๋ฅธ ๋์์ ํํ์ ํน์ฑ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์
๋๋ค. ์ํคํผ๋์์ ์ค๋ช
๋ 2x2 ํํ์ด๋ผ๋ฉด conjugate
๋ ํ๋ ฌ์ ๋ค์ง์ด ์ผํฉ๋๋ค. ๊ทธ๋ฌ๋ ์์์ ์ค๋ช
ํ ์ด์ ๋๋ฌธ์ conjugate
๊ฐ ํญ์ ํ๋ ฌ์ ๋ค์ง์ด์๋ ์๋ฉ๋๋ค. ๋ฐ๋ผ์์ด ์ ๊ทผ ๋ฐฉ์์ ๊ตฌํํ๊ธฐ๊ฐ ์ฝ๊ฐ ์๋ง์
๋๋ค.
๋ด ์๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์์๊ฐ ๋ ๋ณต์กํ ํ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ ๋ฐฐ์ด์ ์ ์ฉ ํ ๋ transpose
์ด ์ฌ๊ท ์ ์ด์ด์ผํ๋์ง ์ฌ๋ถ์ ๋ํ "๊ฐ๊ด์ ์ผ๋ก ์ฌ๋ฐ๋ฅธ"๋๋ต์ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ Julia์์ ์ถ์ ๋์ ๊ตฌ์กฐ๋ฅผ ์ผ๋ง๋ ์ ํํ๊ฒ ํํํ๊ธฐ๋ก ์ ํํ๋์ง์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์์ ํ ์์์ ์ค์นผ๋ผ ๋ง์ ์ง์ํ๋ ๊ฒ์ ๋งค์ฐ ์ด๋ ค์ธ ๊ฒ ๊ฐ์์, ์ค์ฉ์ฑ์ ์ํด ๊ทธ๋ ๊ฒ ์ผ์ฌ ์ฐจ๊ฒ ์๋ํด์๋ ์๋๋ฉฐ ๋นํ์ค ๋ง์ ๋ํ ๋ชจ๋์ ๋ํดํ ์ํ์ ์์ด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ถ๋ช
ํ Base
( permutedims(A, (2,1))
๋ณด๋ค ๊ฐ๋จํ ๊ตฌ๋ฌธ์ ๊ฐ์ง) ํจ์๊ฐ ์์ด์ผํฉ๋๋ค.์ด ํจ์๋ ์ ์น์ ์ ํ ๋์ ๊ฐ๋
๊ณผ ๊ด๋ จ์ด์๊ณ ๋จ์ํ ํ๋ ฌ์ ๋ค์ง๊ณ ์ฌ๊ท ์ ์ด ์ง ์์์ง ์ฌ๋ถ์ ๊ด๊ณ์์ด ์๋ฌด๊ฒ๋ํ์ง ์์ต๋๋ค. transpose
๋๋ flip
๋๋ ๋ญ๋ผ๊ณ ํฉ๋๋ค. ๊ทธ๊ฒ์ ์ข์ ๊ฒฝ์ฐ๊ฐ ๋ ๊ฒ์ด๋ค adjoint
์ (์๋ง๋ ๋ค๋ฅธ ์ด๋ฆ) ๋ณ๋์ ์ ์น ๊ธฐ๋ฅ LinAlg
๊ทธ ๋ ๋ธ๋ก ๋ฒกํฐ / ํ๋ ฌ๊ณผ ์ง์ ํฉ๊ณ์ ๊ฐ๋จํ ๊ตฌํ์ ์ฒ๋ฆฌ ํ ์ ์๊ธฐ ๋๋ฌธ์, ์ฌ๊ทํ๋ค ๊ทธ๋ฌ๋ ์ด๊ฒ์ "๊ฐ๊ด์ ์ธ ์ํ์ ์ ํ์ฑ"์ ์ํด ์๊ตฌ๋์ง ์์ผ๋ฉฐ, ์์ ํ ๊ตฌํ์ ์ฉ์ด์ฑ์ ๊ทผ๊ฑฐํ์ฌ ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ ์ด์ ์ธ๊ธํ์ง ์๊ฒ ๋ค๋ ์ด์ ์ ์ฝ์์๋ ๋ถ๊ตฌํ๊ณ ๋ถํํ๋ ์ด์ ์๋ตํด์ผํฉ๋๋ค.
Julia์ adjoint๋ ํนํ Hermitian adjoint๋ฅผ ๋ํ๋ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก, ๊ฐ๊ฐ์ ์ด์ค ๊ณต๊ฐ U * ๋ฐ V๊ฐ์๋ U ๋ฐ V ์์ ํ ์ ๊ท ๋ฒกํฐ ๊ณต๊ฐ (Banach ๊ณต๊ฐ) ๋ฐ ์ ํ ๋งต A : U-> V์ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ผ๋ก A๋ก ํ์๋๋ A์ ์๋ฅด ๋ฏธํธ ์ adjoint ๋ ์ ํ ๋งต์ ๋๋ค. A * : V *-> U *. ์ฆ, ์ผ๋ฐ์ ์ผ๋ก ์ ์น A ^ t๊ฐ ์์์ ์ธ๊ธ ํ ์ด์ค ๊ณต๊ฐ ์ฌ์ด์ ์ ํ ๋งต์ธ ๊ฒ์ฒ๋ผ ์ผ๋ฐ์ ์ผ๋ก Hermitian adjoint๋ ์ด์ค ๊ณต๊ฐ ๊ฐ์ ์ ํ ๋งต์ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ฌํ ์ ์๋ฅผ ์ต์ํ Hermitian adjoint ๊ฐ๋ ๊ณผ ์ด๋ป๊ฒ ์กฐํ ์ํค์ญ๋๊น? :)
๊ทธ๊ฒ์ ์ฌ์ค์ด ์๋๋๋ค. ์ฌ๊ธฐ์์ ์ค๋ช ํ๋ ๊ฒ์ ์ค์ ๋ก ์ ์น์ด์ง๋ง (์ด๋ฏธ ์ธ๊ธํ๋ฏ์ด) ์ผ๋ถ ๋ถ์ผ์์๋์ด๋ฅผ adjoint (Hermitian ์ ์ธ)๋ผ๊ณ ํ๋ฉฐ A ^ t ๋๋ A ^ * (A ^ dagger ์๋)๋ก ํ์๋ฉ๋๋ค. ์ฌ์ค, ๊ทธ๊ฒ์ ๋ฒกํฐ ๊ณต๊ฐ์ ํจ์ฌ ๋์ด์ ํ์ฅ๋๋ฉฐ, ๋ฒ์ฃผ ์ด๋ก ์์ ๊ทธ๋ฌํ ๊ฐ๋ ์ ๋ชจ๋ ๋จ์ผ์ฒด ๋ฒ์ฃผ (์ : ์ ํ ๋งต์ผ๋ก cobordisms๊ฐ์๋ n ์ฐจ์ ์งํฅ ๋งค๋ ํด๋์ ๋ฒ์ฃผ Cob)์ ์กด์ฌํ๋ฉฐ, ์ฌ๊ธฐ์ adjoint mate (in ์ฌ์ค ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์ด์ค ๊ณต๊ฐ์ด ๋ฐ๋์ ๋์ผํ์ง๋ ์๊ธฐ ๋๋ฌธ์ ๋ ๊ฐ์ ๋ค๋ฅธ A์ A ๊ฐ์์ ์ ์์ต๋๋ค.) ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ณต์กํ ๊ฒฐํฉ์ ํฌํจํ์ง ์์ต๋๋ค. V *์ ์์๋ ์ค์ ๋ก ์ ํ ๋งต f : V-> Scalar์ด๋ฉฐ ์ ํ ๋งต A : U-> V ๋ฐ U์ ๋ฒกํฐ v์ ๋ํด f (Av) = (A ^ tf) (v) . f์ ์์ฉ์ ๋ณต์กํ ์ผค๋ ๋ฅผ ํฌํจํ์ง ์๊ธฐ ๋๋ฌธ์ A ^ t์ ์ ์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
๋๋ต์ ์ผ๋ฐ์ ์ผ๋ก ์์ ํ๋ ๊ณต๊ฐ, ์ฆ ์์ ํ ๋ด๋ถ ์ ํ ๊ณต๊ฐ (Hilbert ๊ณต๊ฐ)์ด ์์ ํ๋ ์ถ๊ฐ ๊ตฌ์กฐ์ ์์ต๋๋ค. ๋ด์ ์ ๊ท๋ฒ์ ์ ๋ํ๋ฏ๋ก ์์ ํ ๋ด์ ๊ณต๊ฐ (Hilbert)์ ์์ ํ ๊ท๋ฒ ๊ณต๊ฐ (Banach)์ด๋ฏ๋ก Hermitian adjoint์ ๊ฐ๋ ์ ์ง์ํฉ๋๋ค. ํต์ฌ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋จ์ํ ํ์ค์ด ์๋ ๋ด์ ์ ๊ฐ๋ ์ ํ ๋์์์ ๊ฐ์ฅ ์๋ฆ๋ค์ด ์ ๋ฆฌ ์ค ํ๋, ์ฆ Riesz ํํ ์ ๋ฆฌ๊ฐ ์ ์ฉ๋ฉ๋๋ค. ๊ฐ๋จํ ๋งํด์, Riesz ํํ ์ ๋ฆฌ๋ Hilbert ๊ณต๊ฐ์ด ์์ฐ์ ์ผ๋ก ์ด์ค ๊ณต๊ฐ๊ณผ ๋ํ์ด๋ผ๊ณ ๋งํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก Hilbert ๊ณต๊ฐ์ผ๋ก ์์ ํ ๋ ์ผ๋ฐ์ ์ผ๋ก ๊ณต๊ฐ๊ณผ ์๋๋ฅผ ์๋ณํ๊ณ ๊ตฌ๋ณ์ ์ญ์ ํฉ๋๋ค. ๊ทธ ์๋ณ์ํ๋ ๊ฒ์ ๋น์ ์ด A * : V *-> U *๊ฐ ์๋ A * : V-> U์ ๊ฐ์ Hermitian adjoint์ ์ต์ํ ๊ฐ๋ ์ ๋๋ฌํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ค์ ๋งํ์ง๋ง ๋๋ ๊ทธ๊ฒ์ด ์์ ํ ์ณ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๋ด์ ๊ณต๊ฐ์์ ๋ด์ ์ conj (V) x V-> ์ค์นผ๋ผ (conjugate ๋ฒกํฐ ๊ณต๊ฐ ์ธ conj (V) ์ฌ์ฉ)์์ dot
ํ์์
๋๋ค. ์ด๊ฒ์ ์ค์ ๋ก V์์ V *๋ก (๋๋ ๊ธฐ์ ์ ์ผ๋ก๋ conj (V)์์ V *๋ก) ๋งต์ ์ค์ ํ ์์๊ฒํ๋๋ฐ, ์ด๋ ์ค์ ๋ก Riesz ํํ ์ ๋ฆฌ์
๋๋ค. ๊ทธ๋ฌ๋ Hermitian adjoint๋ฅผ ๋์
ํ๋ ๋ฐ๋ ํ์ํ์ง ์์ต๋๋ค. ์ค์ ๋ก ๋ด์ dot
๋ง์ผ๋ก๋ ์ถฉ๋ถํ๋ฉฐ ์ ํ ๋งต A
์ Hermitian adjoint๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
dot(w, Av) = dot(A' w, v)
์ฌ๊ธฐ์๋ ๋ณต์กํ ํ์ฉ์ด ํฌํจ๋ฉ๋๋ค.
๊ทธ๊ฒ์ ์ฌ์ค์ด ์๋๋๋ค. ์ฌ๊ธฐ์์ ์ค๋ช ํ๋ ๊ฒ์ ์ค์ ๋ก ์ ์น์ด์ง๋ง (์ด๋ฏธ ์ธ๊ธํ๋ฏ์ด) ์ผ๋ถ ๋ถ์ผ์์๋์ด๋ฅผ adjoint (Hermitian ์ ์ธ)๋ผ๊ณ ํ๋ฉฐ A ^ t ๋๋ A ^ * (A ^ dagger ์๋)๋ก ํ์๋ฉ๋๋ค. [...]
@Jutho , ์๋ฅผ ๋ค์ด Hermitian adjoint ์
๋ค๋ฅธ ์ํ ๋ถ์ผ๊ฐ์ ๋ถ์ผ์น๊ฐ์์ ์ ์์ง๋ง :
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 *
hermitian adjoint (A) = dagger (A) = (์ผ๋ฐ์ ์ผ๋ก just) adjoint (A) : V-> U
๊ทธ๋ฆฌ๊ณ ๋ ์ฌ์ด์ ๊ด๊ณ๋ ๋ณต์กํ ํ์ฉ์ ํฌํจํ๋ ๊ณต๊ฐ์์ ์ด์ค ๊ณต๊ฐ (์ฆ, Riesz ...)์ผ๋ก์ ๋งต์ ์ฌ์ฉํ์ฌ ์ ํํ๊ฒ ์ป์ต๋๋ค. ๋ฐ๋ผ์ hermitian adjoint๋ ํ์ฉ์ ํฌํจํ๊ณ ์ ์นํ์ง ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ ์๋์ adjoint๋ผ๊ณ ๋ถ๋ฅด๊ณ ์ถ๋ค๋ฉด ๋ฌด์์ ์ ์น๋ผ๊ณ ๋ถ๋ฆ ๋๊น? ์ค๋ช ์์๋ ๋ด์ฉ์ ์ค์ ๋ก ์ ์ํ์ง ์์์ต๋๋ค. ๋ฐฉ๊ธ ์ธ๊ธํ์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก A๋ก ํ์๋๋ A์ Hermitian adjoint๋ ์ ํ ๋งต A : V *-> U *์ ๋๋ค. ์ฆ, ์ผ๋ฐ์ ์ผ๋ก ์ ์น A ^ t๊ฐ ์ด์ค ๊ณต๊ฐ ์ฌ์ด์ ์ ํ ๋งต์ธ ๊ฒ์ฒ๋ผ ์ผ๋ฐ์ ์ผ๋ก Hermitian adjoint๋ ์ด์ค ๊ณต๊ฐ ์ฌ์ด์ ์ ํ ๋งต์ ๋๋ค.
๊ทธ๋์ ์ ์น์ Hermitian์ด ์ธ์ ํ๋ฉด A : U-> V๋ฅผ V- > U ์์ ๋งต์ผ๋ก ๋ณํํ๋ ๋ ๊ฐ์ง ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ์ด์ ๋ํด ๋ ๋ ผ์ํ๊ฒ๋์ด ๊ธฐ์ฉ๋๋ค.ํ์ง๋ง ๋ค๋ฅธ ๊ณณ์์ํ๋ ๊ฒ์ด ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ๋ก ์ด๊ฒ์ ๋ํด ๋ ๋ง์ ๊ฒ์ ๋ฐฐ์ฐ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ์ ์๊ฒ ์ฐ๋ฝํ์ญ์์ค.
๋ํ Banach ๊ณต๊ฐ์ ๋งฅ๋ฝ์์ ์ฌ์ฉ๋๋ ์ธ์ ํ๋ ์ฐธ์กฐ๋ http://staff.um.edu.mt/jmus1/banach.pdf ๋ฅผ ์ฐธ์กฐ
Julia Base์ ๊ฒฝ์ฐ : ์ ๋ ์ฌ๊ท Hermitian ํ์ฉ์ ๋ฐ๋ํ์ง ์์ต๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ์ข
์ข
์ฌ๋ฐ๋ฅธ ์ผ์ด๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค. ์์ ์ ํ์ด Number
์ด ์๋ ๋ Base๊ฐ ์๋ฆฌํ ์์
์ ์๋ํด์ผํ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. T
is number๋ผ๊ณ ํด๋ Base์์ ๋น ์ ํด๋ฆฌ๋ ๋ด๋ถ ์ ํ (๋ฐ ๊ด๋ จ ์์ ๋ adjoint ์ ์)์ ํจ์ฌ ๋ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ์ ์ง์ํ์ง ์์ผ๋ฉฐ, ์์ด์ผํ๋ค๊ณ ์๊ฐํ์ง๋ ์์ต๋๋ค. ๊ทธ๋์ ์ฃผ๋ ๋๊ธฐ๋ ๋ธ๋ก ํ๋ ฌ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.ํ์ง๋ง ๊ฑฐ๊ธฐ์์๋ ํน์ ๋ชฉ์ ์ ํ (Base ๋๋ ํจํค์ง)์ด ํจ์ฌ ๋ Julian์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. @andyferris ๋ ์ธ๊ธํ๋ฏ์ด ๋๋จธ์ง LinAlg
์๋ ๋ค๋ฆ
๋๋ค. LinAlg
๋ ๋ธ๋ก ํ๋ ฌ์ ๊ฐ๋
์ ์ง์ํฉ๋๋ค. ์ฌ์ง์ด inv
(ํ๋ ฌ ๋ถํด ๋ฑ์ ์ ์ธ)์ ๊ฐ์ ๊ฐ๋จํ ๊ฒ๊น์ง๋ ์ง์ํฉ๋๋ค.
๊ทธ๋ฌ๋ ์ฌ๊ท Hermitian ํ์ฉ์ด ์ฌ๊ธฐ์ ๋จธ๋ฌผ๋ฌ ์๋ค๋ฉด (์ข์ต๋๋ค), ์ผ๊ด์ฑ์ ์ํด dot
๋ฐ vecdot
๊ฐ ์์์ ๋ํด ์ฌ๊ท ์ ์ผ๋ก ์๋ํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ฌ๋ ๊ทธ๋ ์ง ์์ต๋๋ค. dot
๋ ์์์ ๋ํด x'y
๋ฅผ ํธ์ถํ๊ณ (์์๊ฐ ํ๋ ฌ ์ธ ๊ฒฝ์ฐ ๋์ผํ์ง ์์) vecdot
๋ dot
ํธ์ถํฉ๋๋ค. ์์์. ๋ฐ๋ผ์ ํ๋ ฌ ๋ฒกํฐ์ ๊ฒฝ์ฐ ์ค์ ๋ก ์ค์นผ๋ผ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ฌ๋๋ค์ด ํ์ฌ ๊ตฌํ์ด ์ฌ๊ท ์ adjoint
๊ณผ ์ค์ ๋ก ์ผ์นํ์ง ์๋๋ค๋ ๋ฐ ๋์ํ๋ค๋ฉด PR์ ์ค๋นํ๊ฒ๋์ด ๊ธฐ์ฉ๋๋ค.
transpose
๊ฒฝ์ฐ ๋น์ฌ ๊ท์ ์ผ๋ก ๋ง๋ค๊ณ ์ซ์ ๋ฐ์ดํฐ๋ก ์๋ํ์ง ์๋ ์ฌ๋๋ค์ด ์ฌ์ฉํ๋๋กํ๋ ๊ฒ์ด ๋ ๊ฐ๋จ ํด ๋ณด์
๋๋ค. ๋๋ ํ๋ ฌ๋ก ์์
ํ๋ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด transpose
๋ผ๋ ์ฉ์ด๋ฅผ ์๊ณ ์์ผ๋ฉฐ ๊ทธ๊ฒ์ ์ฐพ์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฌ๊ท transpose
๊ฐ ํ์ํ ์ฌ๋๋ค์ ์ํด ์ฌ์ ํ conj(adjoint())
๊ฐ ์์ต๋๋ค.
Triage๋ @ Sacha0 ์ด ์ ์ 2๋ฅผ ์งํํ์ฌ ์๋ํด ๋ณผ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ์ฌ๊ท ์ adjoint๊ฐ ์ํ์ ์ผ๋ก ์ผ๊ด๋ ์ ์ผํ ์ต์ ์ด ์๋๋ผ ์ ํ์ด๋ผ๋ @ttparker์ ๊ฐ๋ ฅํ๊ฒ ๋์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋จํ ์ค๋ช ํ ์ ์์ต๋๋ค.
1- LinAlg
, AbstractVector
v
๋ (์ค์นผ๋ผ) ๊ธฐ๋ณธ ๊ฐ์ค์น๊ฐ์๋ length(v)
์ฐจ์ ๋ฒกํฐ์
๋๋ค. v[1]
, v[2]
, ..., v[length(v)]
.
(๊ทธ๋ฆฌ๊ณ ์ ์ฌํ๊ฒ AbstractMatrix
).
์ด๊ฒ์ ์๋ง๋ ๋ง์ ์ฌ๋๋ค์ด ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ค๋ ๊ฐ์ ์ผ ๊ฒ์ด๋ฉฐ, ๊ธฐ๋ณธ ๋ฒกํฐ, ์์ ๋ฑ์ ๊ฐ๋จํ ์ ์๋ฅผ ๊ฐ๋ ๊ฒ์ ๊ตฌํ์ ๋จ์ํ๊ฒ ์ ์งํ๋ ๋ฐ ๋์์ด๋ฉ๋๋ค. (๋ง์ ์ฌ๋๋ค์ด ์์น ์ ํ ๋์๋ฅผ ์ปดํจํฐ์์ ์ ํํ๊ฒ ๊ตฌํํ ์ ์๋ค๊ณ ๋งํ ๊ฒ์ ๋๋ค. ์๋ํ๋ฉด ์ฐ๋ฆฌ๊ฐ ์์ ํ๊ธฐ์ ์ข์ ๊ธฐ์ค์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.)
ํ์ฌ์ ์ ๊ทผ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
2- LinAlg
, AbstractVector
v
๋ length(v)
์ถ์ ๋ฒกํฐ์ ์ง์ ํฉ๊ณ์
๋๋ค. ๋ํ Number
์ ๊ฐ์ ์ค์นผ๋ผ ์ ํ์ ๋ํ ์ถฉ๋ถํ ์ ์๋ฅผ ํฌํจํ์ฌ LinAlg
๊น์ง ์ ํจํ 1 ์ฐจ์ ์ ํ ์ฐ์ฐ์ / ๋ฒกํฐ๊ฐ๋ฉ๋๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก (๋ธ๋ก) ํ๋ ฌ์ ๋ํด์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ์ด๊ฒ์ MATLAB, numpy, eigen ๋ฑ์ ์ ํ ๋์ ๊ตฌํ๋ณด๋ค ํจ์ฌ ๋ ์ผ๋ฐํ๋์์ผ๋ฉฐ, ์ด๊ฒ์ด ์คํ ๊ฐ๋ฅํ๋ค๋ Julia์ ๊ฐ๋ ฅํ ์ ํ / ๋์คํจ์น ์์คํ ์ ๋ฐ์ํ ๊ฒ์ ๋๋ค.
๋ด๊ฐ ์ต์ 2 ๊ฐ ๋ฐ๋์งํ๋ค๊ณ ๋ณด๋ ๊ฐ์ฅ ์ค์ํ ์ด์ ๋ Julia์ ์ ํ / ํ๊ฒฌ ์์คํ ์ ํตํด ํจ์ฌ ๋ ๊ด๋ฒ์ํ ๋ชฉํ๋ฅผ ๊ฐ์ง ์ ์๋ค๋ ์ ์ ๋๋ค.
3- LinAlg
์์๋ +
, *
, conj
์๋์ ์ ํ์ฑ์ ์ถฉ์กฑํ๋ ๊ฐ์ฒด (๋ฑ)์ ๋ํด ์๋ํ๋ ์ผ๋ฐ ์ ํ ๋์ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค๋ ค๊ณ ํฉ๋๋ค
์ ๋ง ๋ฉ์ง ๋ชฉํ (๋ด๊ฐ ์๊ณ ์๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด / ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณด๋ค ํจ์ฌ ๋ฐ์ด๋จ)๋ ์์ ํ ์ฌ๊ท adjoint
๋ฐ 2์ ๋๊ธฐ๋ฅผ ๋ถ์ฌํฉ๋๋ค ( +
, *
๊ทธ๋ฆฌ๊ณ conj
์์ฒด๊ฐ ์ฌ๊ท)์ Sacha0์ ์ ์์ด์ ์ ๋ณ ๊ฒฐ์ ์ด ์ข์ ์ ํ ์ธ ์ด์ @์
๋๋ค :)
์ด์ ๋ํด ๋ ๋ ผ์ํ๊ฒ๋์ด ๊ธฐ์ฉ๋๋ค.ํ์ง๋ง ๋ค๋ฅธ ๊ณณ์์ํ๋ ๊ฒ์ด ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ค์ ๋ก ์ด๊ฒ์ ๋ํด ๋ ๋ง์ ๊ฒ์ ๋ฐฐ์ฐ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ์ ์๊ฒ ์ฐ๋ฝํ์ญ์์ค.
๊ฑด๋ฐฐํฉ์๋ค! ๋๋ ๋ ์คํ๋ผ์ธ์์ ์ฑํ ์ ๊ธฐ๋ํฉ๋๋ค :). ๋ฒ ์คํธ!
๋ฉ์ง ์์ฝ Andy! :)
Andy๋ ์ต์ํ adjoint
(๋๊ธ์ ์ฃผ์ )์ ์์ ํ ๋์ํ์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ด๊ฐ ์์ํ ํํ๋ฅผ ์ ์งํ๊ธฐ ์ ์ ๋น์ฌ ๊ท์ transpose
๋ํ ๋ง์ง๋ง ํ์์
๋๋ค.
๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ด์๋ ๋น ์ฌ๊ท ์ ์น๊ฐ ์์ต๋๋ค.
๊ฒ์ผ๋ฅธ flip
์ ํ ๋๋ PermutedDimsArray
๊ฐ LinAlg
์ ์ํธ ์์ฉํ๋๋ก ์ถ๊ฐ ์ฝ๋๋ฅผ ์์ฑํ ํ์๊ฐ ์์ต๋๋ค. ์ ์นํ๋ ๋์ ๋ค์ง์ ์ซ์ ํ๋ ฌ์ด ์๋ค๋ฉด ์ด๋จ๊น์? ๊ทธ๋๋ ๋ค๋ฅธ ํ๋ ฌ๊ณผ ๊ณฑํ ์ ์์ต๋๊น (๋ฐ๋์งํ๊ฒ๋ BLAS ์ฌ์ฉ)?
๋น ์ฌ๊ท transpose
๋ฐ ์ฌ๊ท adjoint
ํ๋ฉด conj(transpose(a))
๋ฐ ์ฌ๊ท ์ ์น conj(adjoint(a))
์ ๊ฐ์ ๋น ์ฌ๊ท adjoint๋ฅผ ์ฝ๊ฒ ๊ฐ์ง ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ์ ํ ๋ชจ๋ ๊ฒ์ด LinAlg
์ ์ ์ํธ ์์ฉํฉ๋๋ค.
๊ทธ๋์ ๋จ์ ์ ๋ฌด์์
๋๊น? ๋๋ ์๋ฌด๋ ๋ณด์ง ์๋๋ค. ๋๋ ์์ง๋ ๊ทธ ๋๊ตฌ๋ ์ํ์ ์๋ฏธ์์ transpose
๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ ๋ด ์ฃผ์ฅ์์ง์งํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ ์ด์ ๋
ผ์์ ์๋ํ๋ ๋์ ์ฌ๊ท ์ ์น๊ฐ ํ์ํ๊ฑฐ๋ ์ ์ฉํ๋ฉฐ ์ค์ ๋ก ์ํ์ tanspose ์ธ ๊ตฌ์ฒด์ ์ธ ์๋ฅผ ๋๊ฐ ์ค ์ ์์ต๋๊น? ์ฌ๊ธฐ์๋ ์ค์ ๋ก 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://github.com/JuliaLang/julia/issues/20978#issuecomment -285865225, 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 ์ ๋ ๊ฐ์ง ์ ์์ํ์ต๋๋ค. ๊ทธ ์ค ํ๋๋ ์ฌ๊ท ์ ์น ์ํ๋ฅผ ์ ์งํ์ง๋ง ๋น ์ฌ๊ท flip
ํจ์๋ฅผ ๋์
ํ์ต๋๋ค. ์ด๋ ์ด์ ์ ์ค์ ๋ก ๊ฐ๋ฅ์ฑ์ด ์ ๊ธฐ๋์ง ์์์์๋ ๋ถ๊ตฌํ๊ณ ๊ฐ๋ ฅํ ์ง์์ ๋ฐ์์ต๋๋ค. . ๊ทธ๋ฐ ๋ค์ @JeffBezanson ์ permutedims
์ ๊ธฐ๋ณธ ๋ ๋ฒ์งธ ์ธ์๋ฅผ ์ฃผ๋ฉด ๊ฒฐ๊ตญ flip
๊ฐ ํ์ํ์ง ์๋ค๊ณ ์ ์ํ์ผ๋ฉฐ, ์ด๋ ๋ํ ๊ฐ๋ ฅํ ์ง์์ ๋ฐ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด์ ํฉ์๋ transpose
์ ์ ์ผํ ์ค์ ๋ณ๊ฒฝ ์ฌํญ์ด "๋ค์์"์ฌ์ผํ๋ค๋ ๊ฒ์
๋๋ค. ์ผ๋ฐ์ ์ธ ์ต์ข
์ฌ์ฉ์๋ ์๋ง ์์ง ๋ชปํ๊ฑฐ๋ ์ ๊ฒฝ ์ฐ์ง ์์ ๊ฒ์
๋๋ค. . ์ค์ ๋ก ๋์ ๋๋ ์ ์ผํ ๋ณ๊ฒฝ ์ฌํญ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฒ ์ ๋ณ๊ฒฝ๋ฟ์
๋๋ค ( .'
๊ฐ๊ฐ ์๊ฐ ๋ฐ permutedims
๊ธฐ๋ณธ ๋ ๋ฒ์งธ ์ธ์ ์ ๊ณต).
๋ฐ๋ผ์ ์ปค๋ฎค๋ํฐ ํฉ์๋ ๋งค์ฐ ์งง์ ์๊ฐ ( @ Sacha0 ์ ๊ฒ์๋ฌผ https://github.com/JuliaLang/julia/issues/20978#issuecomment-347360279
๋๊ตฐ๊ฐ๊ฐ ์ด๊ฒ์ ์ ์ํ๋์ง ์์ด ๋ฒ๋ ธ์ต๋๋ค.ํ์ง๋ง transpose(::AbstractMatrix{AbstractMatrix})
(๊ทธ๋ฆฌ๊ณ ์๋ง๋ transpose(::AbstractMatrix{AbstractVector})
๋ ๊ฐ๋ฅ) ์ฌ๊ท ์ ์ผ๋ก ๋ง๋ค ์ ์๊ณ ๊ทธ๋ ์ง ์์ผ๋ฉด transpose
๋น์ฌ ๊ท์ ์ผ๋ก ๋ง๋ค ์ ์์ต๋๊น? ๊ทธ๊ฒ์ ๋ชจ๋ ๊ธฐ์ด๋ฅผ ๋ค๋ฃฐ ๊ฒ ๊ฐ๊ณ tranpose
๊ฐ ์ฌ๊ท ์ ์ด๊ธฐ๋ฅผ ์ํ๋ ๋ค๋ฅธ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์๊ฐํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ปค๋ฎค๋ํฐ ํฉ์๋ ๋งค์ฐ ์งง์ ์๊ฐ ( @ Sacha0 ์ ๊ฒ์๋ฌผ # 20978 (๋๊ธ) ์ฆ์)์ ๊ฑฐ์ 180๋ ๋ณ๊ฒฝ๋ ๊ฒ ๊ฐ์ต๋๋ค. Sacha์ ๊ฒ์๋ฌผ์ด ๋๋ฌด ์ ๋ณํด์ ๋ชจ๋ ์ฌ๋์ ๋ง์์ ๋ฐ๊ฟจ๋์? (๊ทธ๋ ๋ค๋ฉด ๊ด์ฐฎ์ต๋๋ค. ๋ฉฐ์น ์ ๋งํด๋ ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ํ๋ ธ๋ค๋ ๋ฐ ๋์ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์๋ ๊ฒฝ๋ก๋ฅผ ์์ผ๋ก ๋์๊ฐ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ์ด์ ๋ฅผ ์ดํดํ๊ณ ์ถ์ต๋๋ค.)
๋ด๊ฐ ๊ทธ๋ ๊ฒ ์ค๋๋ ฅ์ด ์๋ค๋ฉด ๐. ๋น์ ์ด๋ณด๊ณ ์๋ ๊ฒ์ ํฉ์๊ฐ ์ค์ ๋ก ํ์ฑ๋์ง ์์๋ค๋ ๊ฒ์ ๋๋ค. ์คํ๋ ค, (1) ํ์ ์ ์ง๋ฅผ ์ ํธํ์ง๋ง ์๋ชจ๋ก ์ธํด ํ ๋ก ์์ ์ฒ ํ ํ ์ฐธ๊ฐ์๋ ์๊ฒฌ์ ํ๋ช ํ๊ธฐ ์ํด ๋์ ์์ต๋๋ค. (2) ํ์ ์ ์ง์์ ๋ฒ์ด๋๋ ๊ฒ์ด ์ค์ ๋ก ์ด๋ค ์ผ์ ์๋ฐํ๋์ง (๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ด ํด์ ๊ณ ๋ ค ์ฌํญ๊ณผ ์ด๋ป๊ฒ ์์ฉํ ์ ์๋์ง) ๊ณ ๋ คํ์ง ์์ ๋ค๋ฅธ ๋น์ฌ์๋ค์ ํ์ ์ ์ง์ ์ฐฌ์ฑํ์ฌ ๋ ๊ฐ๋ ฅํ ์๊ฒฌ์ ํ์ฑํ๊ณ ๊ทธ ์๊ฒฌ์ ํ๋ช ํ์ต๋๋ค.
์ด ํ ๋ก ์ 2014 ๋ ๋ถํฐ github์์ ์ด๋ค ํํ๋ก๋ ์งํ๋์์ผ๋ฉฐ, ์๋ง๋ ๊ทธ ์ด์ ์๋ ์คํ๋ผ์ธ ์ผ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ฅ๊ธฐ ์ฐธ๊ฐ์์ ๊ฒฝ์ฐ ์ด๋ฌํ ํ ๋ก ์ ์ง๋ฃจํ๊ณ ์ฃผ๊ธฐ์ ์ผ๋ก ์งํ๋ฉ๋๋ค. ์ด ํ ๋ก ์ ์ฐธ์ฌํ๋ ๊ฒ ์ธ์ ๋ ์ฆ๊ฑฐ์ด ์ฝ๋ ์์ฑ๊ณผ ๊ฐ์ ์๋ฏธ์๋ ์์ ์ด ์๋ค๋ ๊ฒ์ ๊ทธ ๊ฒฐ๊ณผ ์ฅ๊ธฐ ์ฐธ๊ฐ์๋ค ์ฌ์ด์์ ์์ค์ ์ด๋ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ํ๋ ํ ๊ธฐ๊ฐ ๋๋ ๋ค๋ฅธ ๊ธฐ๊ฐ ๋์ ์ผ๋ฐฉ์ ์ผ๋ก ๋ํ๋ฉ๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ์ ๋ ๊ทธ ์๋ชจ ์๊ณ ๊ฐ์ ์ด๋ฅด๋ ์ผ๋ฏ๋ก์ด ํ ๋ก ์ ๊ณ์ ์ฐธ์ฌํ๊ธฐ๋ณด๋ค๋ ์ง๊ธ ์ฝ๋ ์์ฑ์ ์ง์คํ ๊ฒ์ ๋๋ค. ๋ชจ๋ ๊ฐ์ฌํฉ๋๋ค! :)
๋๋ AbstractArray์ ๋ํ ๋น ์ฌ๊ท ์ ์น์ ctranspose์ ์ฐฌ์ฑํ์ฌ ์์ ํฌํ๋ฅผ ํ ๊ฒ์ ๋๋ค. ๋ ๋ค AbstractArray {T}์์ ์ฌ๊ท ์ ์ ๋๋ค. ์ฌ๊ธฐ์ T <: AbstractArray.
๋๋ ์ฌ๊ท ์ ํ๋์ด ์ด๋ค ๊ฒฝ์ฐ์ '์ฌ๋ฐ๋ฅธ'๊ฒ์ ๋์ํ๋ฉฐ, ํจํค์ง๋ฅผ ์ฌ์ฉํ๊ณ ๊ฐ๋ฐํ๋ ์ฌ๋๋ค์๊ฒ ์ต์ํ์ ๋๋ผ์์ผ๋ก ์ฌ๋ฐ๋ฅธ ํ๋์ ์ด๋ป๊ฒ ๋ฌ์ฑ ํ ์ ์๋์ง์ ๋ํ ์ง๋ฌธ์ ๋ด
๋๋ค.
์ด ์ ์์์ ์ฌ์ฉ์ ์ ์ ์ ํ์ ๋ํ ์ฌ๊ท ์ ์น ๋์์ ์ตํธ ์ธ์
๋๋ค. ์ ํ์ AbstractArray๋ก ๋ง๋ค๊ฑฐ๋ ์ ์ ํ ๋ฉ์๋๋ฅผ ์ ์ํ์ฌ ์ตํธ ์ธํฉ๋๋ค.
Base.transpose(AbstractArray{MyType})
๋๋ Base.transpose(AbstractArray{T}) where T<: MyAbstractType
.
์ฌ๊ท ์ ์น์ ๋ํ ๋ ํ์ดํ ์ ๋ต (๋ฌผ์ด ๋ณด์ง ์๊ณ ๊ทธ๋ฅ ๋ฐ๋ณต)์ ์์์ ์ค๋ช
ํ๋๋ก ๋ช ๊ฐ์ง ๋๋ผ์์ ์์ฑํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ณ๊ฐ์ ctranspose ๋ฐ adjoint๋ฅผ ๋์
ํ๊ฑฐ๋ conjadjoint ๋ฐ flip๊ณผ ๊ฐ์ ๋ ๋ณต์กํ ์ ์์ ๋์
ํ๋ฉด ์ฌ์ฉ์๋ ์ด๋ฌํ ์ ์์ ์ ํ๊ณ ์ฌ์ฉํ๋ ค๊ณ ํ ๊ฒ์ด๋ฉฐ ํจํค์ง ๊ด๋ฆฌ์๋ ๋ชจ๋ ์ง์ํ๋ ค๊ณ ํ ๊ฒ์
๋๋ค.
์๋ก์ด ์ ์์์ ์ง์ํ๊ธฐ ์ด๋ ค์ด ๊ฒ์ ์๋ก normal, transpose, ctranspose ๋ฐ conj ๋ฐฐ์ด์ ๋ชจ๋ ReshapedArray ๋ฐ SubArray๋ณด๊ธฐ์ ์ํธ ์์ฉํ๋๋ณด๊ธฐ (๋๋ ์ง์ฐ ํ๊ฐ)๋ฅผ ๊ฐ์ง ์ ์์ด์ผํฉ๋๋ค. (์ ๋ ์ด๊ฒ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ทฐ๋ฅผ ์์ฑํ๋์ง ์๋๋ฉด @view
์ฌ์ฉํ ๋๋ง ์์ฑ๋๋์ง์ ๋ํด ๊ถ๊ธํฉ๋๋ค.) ์ด๊ฒ์ A*_mul_B*
๋ฎ์ถ๋ ์์
๊ณผ ํ๋๊ทธ 'N'์ ์ฌ์ฉํ๋ ๋ฎ์ ์์ค์ BLAS ํธ์ถ์ ์ฐ๊ฒฐ๋ฉ๋๋ค. ๋ค๋ฅธ ๊ณณ์์ ์ธ๊ธ ํ ๋ฐ์ ๊ฐ์ด ๊ณ ๋ฐ๋ ์ด๋ ์ด์ ๊ฒฝ์ฐ 'T'๋ฐ 'C'. normal
, transpose
, ctranspose
, conj
๋ฅผ ์ทจ๊ธํ๋ค๋ฉด ์ถ๋ก ํ๊ธฐ๊ฐ ๋ ์ฌ์ธ ๊ฒ์
๋๋ค.
๋๋ฑํ ๊ธฐ๋ฐ์. BLAS ์์ฒด๋ ์ผ๋ฐ์ ๊ฒฝ์ฐ 'N', ์ ์น์ ๊ฒฝ์ฐ 'T', ctranspose์ ๊ฒฝ์ฐ 'C'๋ง ์ง์ํ๋ฉฐ conj์ ๋ํ ํ๋๊ทธ๊ฐ ์์ต๋๋ค. ์ด๊ฒ์ ์ค์๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก, ๋ ๋์ ์ฐจ์์ ๋ฐฐ์ด ๋ฐ ๋ชจ์ ๋ณ๊ฒฝ๊ณผ์ ์ผ๊ด์ฑ์ ์ํด ์ ์น ๋ฐ c ์ ์น์ ์ ์ ํ ์ผ๋ฐํ๋ ๋ชจ๋ ์ฐจ์์ ๋ฐ์ ํ๋ ๊ฒ์
๋๋ค.
transpose (A :: Array {T, 3}) = permutedims (A, (3, 2, 1)).
๊ฑด๋ฐฐ!
์ค์ ๋ก ์ผ์ํ๋ ์ฌ๋๋ค์๊ฒ ์ ๋ง ๊ฐ์ฌํฉ๋๋ค. ์ด๋ค ๋ฐฉ๋ฒ์์ ๋ ผ์ ๋ ๊ฒ์ @andyferris์ด ๊ฐํ์ด ๊ตฌํ ๋ ๋๊น์ง ๋๋ฌด ๋ง์ ๊ธธ์ด๋ ๋ฒกํฐ ์ ์ฌํ ๋ด์ฉ / ์ ์น (๊ทธ๋ฌ๋ ๊ฒฐ์ฝ ๊ทธ๊ฒ์ ์ฌ๊ท ์ ์ธก๋ฉด)์ด๋ฉฐ, ๋ฉ์ง๊ณ ์ ์๋ํฉ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก, ๋ฐฐ์ด ์์ฑ์์ ์ง์์ ์ธ ์ฌ ์ค๊ณ๋ ๋งค์ฐ ๊ฐ์ฌํฉ๋๋ค. ๊ทธ ๋ชจ๋ ๊ฒ์ ์์ง ์๊ฐ๋ฝ.
์ฆ, ํ๋ ฌ ์ ์น ๋ฐ adjoint / ctranspose๋ ๋จ์ผ ๋๊ธฐ ๋ธ๋ก ํ๋ ฌ๋ก https://github.com/JuliaLang/julia/pull/7244 ์์ ๊ฑฐ์ ์กฐ์ฉํ ์๊ฐ ๋ ์ฌ๊ท ์ ์ธก๋ฉด์์ ๋ง์ ๋ ผ์๋ฅผ ์ป์ง ๋ชปํ์ต๋๋ค. . ์ฌ๊ท ์ adjoint์ ๋ํ ๋ค์ํ ์ด์ ์ ๋๊ธฐ๊ฐ ์ฃผ์ด์ก๊ณ (์ฌ์ค ์ดํ) ๋๋ถ๋ถ์ ์ฌ๋๋ค์ ์ด๊ฒ์ด ์ข์ (์ ์ผํ ๊ฒ์ ์๋) ์ ํ์ด๋ผ๋ ๊ฒ์ ๋์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ Transpose์๋ ๋จ์ผ ๋๊ธฐ ๋๋ ์ค์ ์ฌ์ฉ ์ฌ๋ก์กฐ์ฐจ ๋ถ์กฑํฉ๋๋ค.
์ด ํ ๋ก ์์๋ ๋ช ๊ฐ์ง ๋ณ๋์ ์์ ์ด ์งํ๋๊ณ ์์ผ๋ฉฐ, ์ ์ํ๊ฒ ๊ตฌํํ ์์๋ ๊ณํ์ด ํ์ํฉ๋๋ค.
LinAlg
์์ ๋ธ๋ก ํ๋ ฌ (๋ฐ ๋ ์ด๊ตญ์ ์ธ ๊ตฌ์กฐ)์ ์ง์ํ๋ ๊ฒ์ด ๊ฐ์น๊ฐ ์๋์ง ๋
ผ์ํ์ต๋๋ค. ๊ตฌํ ์ ํ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ฌ๊ท ์ ์์ ์์ ( +
, *
๋ฐ conj
์ ์ธ), ๋ชจ๋ ์ฌ๊ท ์ ์์ (Julia์ ์ผ๋ฐ ํจ์ ํน์ฑ), ๋๋ ์์๊ฐ ์ฌ๊ท ์ ํ ๋์๋ฅผ ์ํํด์ผํ๋์ง ๋๋ ์ค์นผ๋ผ๋ก ์ฒ๋ฆฌ๋์ด์ผํ๋์ง ์ฌ๋ถ์ ๋ํ ์ผ์ข
์ ์ ํ ๊ฒ์ฌ ๋๋ ํน์ฑ์ ์๋ํฉ๋๋ค.transpose
, flip
, ๋จ์ถ ๋ permutedims
๊ตฌ๋ฌธ์ด ์์ต๋๋ค (์ด PR์ ๊ตฌํํ ๋ฌธ์ ์๊ฐ ๊ฐ์ฅ ์ ๊ธฐ ๋๋ฌธ์ ๋จผ์ ์ ์ถ๋์์ผ๋ฉฐ ๋ง์ฝ ์ฐ๋ฆฌ๊ฐ ๋ค๋ฅธ ์ผ์ํ๋ค๋ฉด), ์์๊ฐ ์ฌ๊ท ์ ์น (recursive transpose)๋ฅผํด์ผํ๋์ง ์ฌ๋ถ์ ๋ํ ์ผ์ข
์ ์ ํ ๊ฒ์ฌ ๋ ํน์ฑ (์๋ง๋ transpose(x::Any) = x
...).x' * y -> Ac_mul_B(x, y)
์ ๊ฐ์ ์ด์ํ ๋์์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ์ด์์ ์ผ๋ก v1.0์๋ ์กด์ฌํ์ง ์๋ ์ฝ๊ฐ์ ์ฌ๋ง๊ท์
๋๋ค. ์ด๊ฒ์ ๋น ๋ฅธ BLAS (์ถ๊ฐ ์ฌ๋ณธ ์์)๋ฅผ ์ง์ํ ์์์ ๋๊น์ง ์คํ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ๊ฐ์ฃผ๋์ง ์์์ผ๋ฏ๋ก ์ง์ฐ ํ๋ ฌ ์ ์น ๋ฐ ์ธ์ ํฉ๋๋ค.LinAlg
์ ์ฝ๋๋ ์๋นํ ํฌ๊ณ ์๋
์ ๊ฑธ์ณ ๊ตฌ์ถ๋์์ต๋๋ค. ํ๋ ฌ ๊ณฑ์
๊ณผ ๊ฐ์ ๋ง์ ๊ฒ๋ค์ ์๋ง๋ ์๋ก์ด broadcast
์ ๊ฐ์ ๋์คํจ์น ์์คํ
์ ์ฌ์ฉํ์ฌ ๋ ํน์ฑ ์นํ์ ์ผ๋ก ๋ฆฌํฉํ ๋ง ๋ ์ ์์ต๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ฌ๋ฐ๋ฅธ ๋ฐฐ์ด (์คํธ๋ผ์ด๋ ํ๋ ฌ์ ๋ณํ ๋ ๋ณํ ๋ ๋ทฐ์ PermuteDimsArray๋ฅผ ์๊ฐํ๊ณ ์์ต๋๋ค)์ BLAS๋ก ๋ ์ฝ๊ฒ ๋ณด๋ผ ์์๋ ๊ณณ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ v1.0์ ๋ง๋ค์ง ์์ ๊ฒ์ด๋ฉฐ ์ฐ๋ฆฌ๋ ์ฝ๋๋ฅผ ํจ์ฌ ๋ ์
ํ์ํค์ง ์์ผ๋ฉด ์ ์ฑ๋ฅ ํ๊ท๋ฅผ ํผํ๋ ค๊ณ ๋
ธ๋ ฅํ๊ณ ์์ต๋๋ค. Sacha๊ฐ ์ง์ ํ๋ฏ์ด ์์ (์ฌ๊ท ์ ์ธ์ , ์ฌ๊ท ์ ์น, ํ์ฉ, ์๋ฌด๊ฒ๋ ์์)์ ๋ํ ๋ค์ํ ๋์์ ๊ฐ์ง ์ ์น ๋ทฐ๋ฅผ ๊ฐ๋ ๊ฒ์ ์ผ์ ๊ณ์ ์๋์ํค๋ ์ถ๊ฐ ๋ณต์ก์ฑ๊ณผ ์๋ก์ด ๋ฐฉ๋ฒ์ ๋ง๋ญ๋๋ค. ์๋ฅด.v1.0์ด ์ธ์ด๋ฅผ ์ด๋ ์ ๋ ์์ ํ์ํค๋ ๊ฒ์ผ๋ก ์๊ฐํ๋ค๋ฉด ์ด๋ค ์๋ฏธ์์ ํ๋์ ๋ณ๊ฒฝํ๋ ๊ฐ์ฅ ํฐ ์ฐ์ ์์๋ ์ธ ๋ฒ์งธ์
๋๋ค. ๋๋ ๋งํ๊ณ ์ถ๋ค : ์ธ์ด (ํ์ ํฌํจ)๋ ๊ฐ์ฅ ์์ ์ ์ด์ด์ผํ๊ณ Base
๋ค์์ผ๋ก stdlib ( LinAlg
ํฌํจํ๊ฑฐ๋ ํฌํจํ์ง ์์ ์ ์์)๊ฐ ๋ค ๋ฐ๋ฅด์ง๋ง ๊ฑฐ์ ํ์คํ๊ฒ ํฌํจ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. BLAS
, Sparse
๋ฑ 1 ์ผ). ์ฌ์ฉ์ (๋๋ถ๋ถ ๋์๊ด ๊ฐ๋ฐ์)์๊ฒ ์ค์ ๋ก ์ํฅ์ ๋ฏธ์น์ง ์๋ ๋ณํ์ด๋ฏ๋ก ์ฌ๊ธฐ์์ ์ฌ๋๋ค์ ์๊ฒฌ์ด ๋ค๋ฅด๋๋ผ๋ ๋๋ผ์ง ์์ ๊ฒ์
๋๋ค.
Andy๋ฅผ ์ฐพ์๋ผ! :)
์ฌ๊ธฐ์ ๋จ์ ๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก adjoint
์ transpose
๊ฒ์ผ๋ฅด๊ฒ ๋ง๋๋ ๊ฒ ๋ฟ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ง๊ธ ๋ซ์ ์ ์์ต๋๊น?
๋ค์ ๋จ๊ณ : "์ค์นผ๋ผ ์ฌ์ฉ์ ์ฌ๊ฐํ๊ฒ ์ ์นํฉ๋๋ค."
๊ทธ๋ฌ๋ ์ง์งํ๊ฒ, PDE ์๋ฒ์์ ์ฌ์ฉ๋๋ ๋ค๋ฅธ 3D ์ ์น ๋ฐ ํ ์ ๊ณฑ์ ์ ์ง์ ํ๊ธฐ์ํ ์ข์ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ์ ์์ต๋๊น? ์ง์งํ์ง๋ง,์ด ๊ด๊ธฐ์ ๋ค์ ๋ฐ๋ณต์ OP๊ฐ ๋ ์ ์์์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์๋
:)
PDE ์๋ฒ์์ ์ฌ์ฉ๋๋ ๋ค๋ฅธ 3D ์ ์น ๋ฐ ํ ์ ๊ณฑ์ ์ ์ง์ ํ๊ธฐ์ํ ์ข์ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ์ ์์ต๋๊น?
ํ์คํ ํจํค์ง์ ์ข์ ์ฃผ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๋ค๋ฅธ 3D ์ ์น ๋ฐ ํ ์ ๊ณฑ์ ์ ์ง์ ํ๊ธฐ์ํ ์ข์ ์ธํฐํ์ด์ค
TensorOperations.jl ์ด ์ฌ๊ธฐ์ ํ์ํ ์์ ์ ์ํํ์ง ์์ต๋๊น? (์ด ์์ค์์ "์ข์ ์ธํฐํ์ด์ค"๋ Tensor ๋คํธ์ํฌ ๋ค์ด์ด๊ทธ๋จ๊ณผ ๊ฐ์ ๊ฒ์ ์๋ฏธํ๋ฉฐ TensorOperations ์ ๊ตฌ๋ฌธ๋ณด๋ค ๊ฐ๊ฒฐํ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ๊ฐ ์ฝ๊ฐ ์ด๋ ต์ต๋๋ค.)
์, TensorOperations.jl์ด ์ข์ ๋ณด์ ๋๋ค. ๋๋ด ์ด์์ง๋ง ํ์ํ ๊ฒ์ ์ป์์ต๋๋ค ๐.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
(OT : ์ ๋ ์ด๋ฏธ ์ฑ๊ณตํ 6 ๋ถ์ ๋ฏธ๋ ์๋ฆฌ์ฆ์ ๋ค์ ํธ์ธ "7- ํ ์ ์ง์งํ๊ฒ ๋ฐ์๋ค์ด ๊ธฐ"๋ฅผ ๊ณ ๋ํ๊ณ ์์ต๋๋ค ...)