์ด์ .op
๊ฐ ์ผ๋ฐ์ ์ผ๋ก op
.'
๊ฐ '
(adjoint, ์ผ๋ช
ctranspose ). ์ด ๋ฌธ์ ๋ ์ ์น ๋ฐ/๋๋ adjoint์ ๋ํ ๋์ฒด ๊ตฌ๋ฌธ์ ๋
ผ์ํ๊ธฐ ์ํ ๊ฒ์
๋๋ค.
Andreas๋ #19344์์ Aแต
(์๋ง๋ Aแดด
)๋ฅผ ์๋ํ์ง๋ง ๊ทธ๋ค์ง ์ข์ ๋ฐ์์ ์ป์ง ๋ชปํ์ต๋๋ค. A^T
๊ฐ ์ ์น๋๋๋ก ํน์ ์ง์ ์ ํ T
(์๋ง๋ H
)์ ์ฌ์ฉํ์ฌ ^
๋ฅผ ์ ์ฌํ๊ฒ ๋ง์ฅ๋ํ ์ ์์ง๋ง, ๊ทธ๊ฒ๋ ๋ค์ ๋ชจํธํฉ๋๋ค. ์ฌ์ ํ ์ํ ํ๊ธฐ๋ฒ์ฒ๋ผ ๋ณด์ด๋ ๋ค๋ฅธ ๋ง์ ์ข์ ์ต์
์ด ์๋์ง ํ์คํ์ง ์์ต๋๋ค.
t(A)
๊ฐ ์ต๊ณ ์ผ ์๋ ์๋ค๊ณ ์๊ฐํ์ง๋ง, ๋ค๋ฅธ ํ ๊ธ์ ์ด๋ฆ์ "๋์ฉ"ํ๋ ๊ฒ์ ์ ๊ฐ์ค๋ฌ์ด ์ผ์
๋๋ค.
๋ด ์๊ฒฌ์ ๋ค๋ฅธ ๋ฌธ์ ์์ ์ฎ๊ธฐ๊ธฐ(์๋ฌด๊ฒ๋ ํด๊ฒฐํ์ง๋ ์์ง๋ง...):
.'
์ด์ธ์ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ +1 .
๋ช
ํํ์ง ์์ โ
๋ฅผ ์ฌ์ฉํ๋ APL ๊ณผ *X
(Julia์๊ฒ๋ ํผ๋์ค๋ฌ์ธ ์ ์์)๋ฅผ ์ฌ์ฉํ๋ Python์ ์ ์ธํ๊ณ ์ ์น์ ๋ํ ํน์ ๊ตฌ๋ฌธ์ด ์๋ ์ธ์ด๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ์ฌ๋ฌ ์ธ์ด๋ transpose(X)
๋ฅผ ์ฌ์ฉํฉ๋๋ค. R์ t(X)
๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์์ง๋ ์์ง๋ง .'
๋ณด๋ค ๋์์ง๋ ์์ต๋๋ค. ์ ์ด๋ '
๋ฅผ .'
์ ํผ๋ํ์ฌ ์ฌ์ฉํ๋ ค๋ ์ ํน์ด ๋ํฉ๋๋ค. ์ด ์์
์ ๋งค์ฐ ๋ค๋ฅธ ์์
์์ด ๋ถ๋ช
ํฉ๋๋ค.
Rosetta ์ฝ๋๋ฅผ ์ฐธ์กฐํ์ญ์์ค. (BTW, Julia ์์ ๋ ์ค์ ๋ก ์ผค๋ ์ ์น๋ฅผ ๋ณด์ฌ์ค๋๋ค ...)
๋ค๋ฅธ ํฑ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น? `
๋๋ "
-100 to ๋ณ๊ฒฝ adjoint, Julia ์ฝ๋ ์์ฑ์ ์ํ ์์ฑ๋งํผ ๋ช ํํ๊ฒ ๋ง๋๋ ๋ฉ์ง ๊ฒ ์ค ํ๋์ ํ๋ฌ์ค ์ผค๋ ์ ์น ์ผ๋ฐ์ ์ผ๋ก ์ํ๋ ๊ฒ์ด๋ฏ๋ก ์ถ์ฝ๋ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ผค๋ ์ ์น์ ๋ํ ๋ฉ์ง ๊ตฌ๋ฌธ์ด ์๋ ํ ์ผ๋ฐ ์ ์น์ ๋ํ ํ์ ์ฐ์ฐ์๋ ๋๋ถ๋ถ ๋ถํ์ํด ๋ณด์ด๋ฏ๋ก ์ผ๋ฐ ํจ์ ํธ์ถ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ๋์๊ฒ๋ ๊ด์ฐฎ์ ๋ณด์
๋๋ค. transpose
๋ ์ด๋ฏธ ์๋ํฉ๋๋ค. ๊ทธ๋ฅ ์ฌ์ฉํ๋ฉด ์๋๋์? t(x)
R-ism์ด ๋ถํํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ฆ์์ ์ค์ ๋ก ๋ฌด์์ ํด์ผ ํ๋์ง ๋ช
ํํ์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๋ค๋ฅธ ๋๊ธ์ ์ฌ์ฉํ๋ฉด ์ข ์ด์ํ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด A`
๋ ๊ธ๊ผด์ ๋ฐ๋ผ A'
์ฒ๋ผ ๋ณด์ผ ์ ์๊ณ A"
๋ A''
์ฒ๋ผ ๋ณด์
๋๋ค. .
#20978์์ ๋ณ๊ฒฝํ๋ฉด ์ ๋ฏธ์ฌ ์ ์น๊ฐ ์ค์ ๋ก ์ง๊ธ๋ณด๋ค ๋ ์ ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด x
๋ฐ y
๋ ๋ฒกํฐ๊ฐ ์๊ณ $ f
๋ฅผ ์์ผ๋ก ์ ์ฉํ๋ ค๋ ๊ฒฝ์ฐ $ f.(x, y.')
... with #20978 , ์ด๊ฒ์ ์์ ์ ํ์ ๋ฐฐ์ด์ ์ ์ฉํ ์ ์์ต๋๋ค.
์์งํ ๋งํด์, ์ฐ๋ฆฌ์ ์ต์ ์ ์ ํ์ ์ฌ์ ํ โโ๊ทธ๊ฒ์ ๊ทธ๋๋ก ๋๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ค ์ ์๋ ๋์๊ฒ ๋ช
ํํ ๊ฐ์ ์ผ๋ก ๋ณด์ด์ง ์์ต๋๋ค. .'
๋ Matlab์ ์น์ํจ์ด๋ผ๋ ์ฅ์ ์ด ์์ต๋๋ค. .
๋ ์ค์ ๋ก f.(x, y.')
์ ๊ฐ์ ์์์ ์ ํธ์ถ ๊ตฌ๋ฌธ๊ณผ ๋ค์ ์ผ์นํ๋ฉฐ ์ ์น "ํจ์ฆ"( RowVector
๋๋ถ์ ์์ ์ฌ๋ณธ์ ์์ฑํ์ง ์์)๋ฅผ ์ ์ํฉ๋๋ค(๋ค์ ์ ํํ๊ฒ).
์ฌ์ค, ์ฐ๋ฆฌ๋ ๋ ๋์๊ฐ f.(x, g.(y).')
์ตํฉ ์์
์ ํ ์๋ ์์ต๋๋ค. ์ฆ, .'
์ ์น๋ฅผ ๋น์ฌ๊ท์ ala #20978 ๋ก ๋ณ๊ฒฝํ๊ณ ๋ค๋ฅธ ์ค์ฒฉ๋ ์ ํธ์ถ๊ณผ์ ์ตํฉ์ ํฌํจํ๋๋ก ์๋ฏธ ์ฒด๊ณ๋ฅผ ํ์ฅํฉ๋๋ค. (๋น์ตํฉ ๋ฒ์ ์ ์ํ๋ฉด transpose
์ ํธ์ถํฉ๋๋ค.)
๋๋ ๊ทธ ๊ณํ์ด ์์ฃผ ๋ง์์ ๋ ๋ค, @stevengj.
ํ ๊ฐ์ง ์ฃผ๋ฆ: ์๋ง๋ @.
๋งคํฌ๋ก๋ y'
๋ฅผ y.'
๋ก ๋ฐ๊พธ์ง ์์ ๊ฒ์
๋๋ค(์๋ชป๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์). ๊ทธ๋ฌ๋ y'
๋ฅผ ์ผ์ข
์ ์ตํฉ๋ adjoint ์ฐ์ฐ์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค.
์ฃผ์ ๋ฌธ์ ๋ f.(x, g.(y).')
์ ์ตํฉ ์๋ฏธ ์ฒด๊ณ๋ฅผ ๊ฐ๋๋ก ํ๋ ๊น๋ํ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๊ฒ์
๋๋ค. ํ ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ f.(x, g.(y.'))
broadcast(x,y -> f(x, g(y)), x, y.')
๋ก ๋ณํํ๋ ๊ฒ์
๋๋ค.
์ด๊ฒ์ด ์ ๋๋ก ์๋ํ๋ ค๋ฉด ํด๋ฐฑ transpose(x) = x
๋ฉ์๋๋ฅผ ๋ณต์ํด์ผ ํ ์๋ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ ์น๋ฅผ ์ฌ๊ท์ ์ผ๋ก ์ ์งํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋๋ ์ ์น๊ฐ ์ฌ๊ท์ ์ด์ด์ผ ํ๋์ง ์๋์ง๋ฅผ ๊ฒฐ์ ํ๋ ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ์ ๊ตฌ๋ฌธ ์ตํฉ์ ์ฐธ์ฌํ๊ฒ ํ๋์ง ์ฌ๋ถ์ ์ง๊ตํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๊ฒ์ ๋น์ฌ๊ท์ ์ผ๋ก ๋ง๋๋ ์ ํ์ ๊ทธ๊ฒ์ ์ํด ๋๊ธฐ๊ฐ ๋ถ์ฌ๋์ง ์์ต๋๋ค.
@StefanKarpinski , ๋์ฒด transpose(x) = x
๋ฅผ ๋ณต์ํ๋ฉด ์ด๋ฅผ ๋น์ฌ๊ท์ ์ผ๋ก ๋ณ๊ฒฝํ๋ ค๋ ๋๋ถ๋ถ์ ๋๊ธฐ๊ฐ ์ฌ๋ผ์ง๋๋ค.
ํด๋ฐฑ์ด ๋ณต์๋์์ง๋ง ์ฌ์ ํ ์ ์น๊ฐ ๋น์ฌ๊ท์ ์ด๋ผ๋ฉด ๋ฌธ์ ๋ ๋ฌด์์ ๋๊น?
@jebej , ์ฌ๊ท ์ ์น๋ ์ ํ ์ฐ์ฐ์์ ๋ํ ์ํ ์ฐ์ฐ์ผ๋ก ์ฌ์ฉ๋ ๋ ๋ ์ ํํฉ๋๋ค. ์ ๊ธฐ์ต์ด ๋ง๋ค๋ฉด ๋น์ฌ๊ท์ ์ผ๋ก ๋ง๋ ์ฃผ๋ ์ด์ ๋ MethodError๋ฅผ ๋์ง๋ ๋์ transpose(x) = x
fallback์ ์ ์ํ ํ์๊ฐ ์์๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ทธ๋ฌ๋ ํด๋ฐฑ์ด ์๋ ๊ฒ์ ๋์ฐํ์ง ์์ง๋ง ์ฌ์ ํ ๋น์ฌ๊ท์ ์ ๋๋ค.
๋ ๊ฐ์ง ์๊ฒฌ์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
permutedims
์ ๋ํ ๋ฌธ์์๋ ์ด๊ฒ์ด ๋ค์ฐจ์ ๋ฐฐ์ด์ ๋ํ ์ ์น์ ์ผ๋ฐํ๋ผ๊ณ ๋์ ์์ต๋๋ค. transpose
ํจ์์ ์ผ๋ฐํ๋ฅผ ์ฒ์ ์ฝ์ ๋ ์ ์ํ๋ ๊ฒ์ฒ๋ผ ์ฝ๊ฐ ์คํด์ ์์ง๊ฐ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ต๋๋ค.x=["a", "b"]
์ ์ ์น๋ฅผ ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น? ์ค์ ๋ก y=x.'
๋ ์๋ํ๊ณ ์ ๋ณ์๋ฅผ ์์ฑํ์ง๋ง getindex
๋ ์คํจํฉ๋๋ค. AFAIK ๋น์ ์ ๊ทธ๊ฒ์ ๋ฌ์ฑํ๊ธฐ ์ํด reshape(x, 1, :)
๋๋ ํจ์ฌ ๋๋ฆฐ hcat(x...)
๋ฅผ ์ฌ์ฉํด์ผ ํ์ง๋ง Vector
์ ๋ํด ๋ค๋ฅธ ๊ตฌ๋ฌธ์ ๊ฐ๋ ๊ฒ์ ๋ถ์์ฐ์ค๋ฝ์ต๋๋ค( permutedims
๋ ์ฌ๊ธฐ์์ ์๋ํ์ง ์์ต๋๋ค ).๋ฌธ์์ด ๋ฒกํฐ๋ฅผ ์ ์นํ๋ ์ฌ์ฉ ์ฌ๋ก๋ ๋ฌด์์ ๋๊น?
์๋ฅผ ๋ค์ด ๋ค์ ์๋๋ฆฌ์ค๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
x = ["$(j+i)" for j in 1:3, i in 1:5]
y = ["$i" for i in 5:9]
x
์ ๋ง์ง๋ง ํ ๋ค์ y
๋ฅผ ์ถ๊ฐํ๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ vcat
์ ์ ์น y
์
๋๋ค.
์ค์ ๋ก Matrix{String}
( Vector{Vector{String}}
๋ฅผ ์ฌ์ฉํ ์ ์์)์ ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ ์ฆ๋ถ ๋ก๊น
ํ ๋ ๋ํ๋์ง๋ง ์ข
์ข
ํ๋ ฌ์ด ๋ ์ ์ฉํฉ๋๋ค(๋๋ Vector{Vector{String}}
๋ฅผ ๋ณํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง๋ฌธ์ด ๋ค์ ๋ํ๋ฉ๋๋ค. Matrix{String}
๋ก ์ฐ์๋ ์์๋ฅผ ์์ง์ผ๋ก ์ฐ๊ฒฐ).
๋ ๋ค๋ฅธ ์ฌ์ฉ ์ฌ๋ก: ์ ์น๋ ๋ฐ์นด๋ฅดํธ ๊ณฑ( f.(v, w.')
)์ ๋ํด ํจ์๋ฅผ ๋ธ๋ก๋์บ์คํธํ๊ธฐ ์ํด ๋ ๋ฒกํฐ๋ฅผ ์๋ก ์ง๊ตํ๋๋ก ๋ง๋๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์
๋๋ค.
๋ฐ์ดํฐ ํฌ์ธํธ: ์ด์ ๋๋ ์ ๋ฏธ์ฌ "broadcast-adjoint" ์ฐ์ฐ์์ ๊ทธ๊ฒ์ด ์กฐ์ฎ๊น์ฒ๋ผ ์๋ํ๋ ์ด์ ์ ์ํด ํผ๋์ค๋ฌ์ํ๋ ๋น์ฌ์๋ฅผ ๋ง๋ฌ์ต๋๋ค. ์ต์์!
FWIW, ๋๋ ์ฐ๋ฆฌ๊ฐ .'
๊ตฌ๋ฌธ์ ์ ๊ฑฐํด์ผ ํ๋ค๊ณ ๊ฐํ๊ฒ ๋๋๋๋ค. Matlab๋ณด๋ค Julia์ ๋ ์น์ํ ์ฌ๋์ผ๋ก์ ๋๋ ๊ทธ๊ฒ์ด ๋ฒกํฐํ๋ adjoint๋ฅผ ์๋ฏธํ ๊ฒ์ด๋ผ๊ณ ์์ํ๊ณ ๊ทธ๋ ์ง ์์ ๋ ์ ๋ง ๊ฑธ๋ ค ๋์ด์ก์ต๋๋ค. Julia๋ Matlab์ด ์๋๋ฉฐ Matlab์ ๊ท์น์ ๊ตฌ์๋์ด์๋ ์ ๋ฉ๋๋ค. Julia์์ ์ ์ด ์ธ์ ํจ์์ ๋ฒกํฐํ๋ฅผ ์๋ฏธํ๋ ๊ฒฝ์ฐ ์ด๋ ์ธ์ด ์ ๋ฐ์ ๊ฑธ์ณ ์ผ๊ด๋์ด์ผ ํ๊ณ .'
์ด๋ผ๋ ๋์ฐํ ์์ธ๊ฐ ๋ฌด์์๋ก ์์ด์๋ ์ ๋ฉ๋๋ค. '
์ ๊ณต์์ ์ผ๋ก ๊ด๋ จ์ด ์์ต๋๋ค.
ํน๋ณํ "ํฑ" ํ๊ธฐ ์์ด transpose
๋ง ์์ด๋ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ค์ ํ๋ ฌ์์ ํธ์ถ๋๋ฏ๋ก '
๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์
๋๋ค. ์ ๋ง ํ์ดํ์ ์ ์ฅํ๊ณ ์ถ์ต๋๋ค. ์ ์น์ ์ตํฉ ๋ฒ์ ์ ๋ง๋ค๊ณ ์ถ๋ค๋ฉด .'
๊ฐ ์ฌ๋ฐ๋ฅธ ๊ตฌ๋ฌธ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
๊ทธ๊ฑด ์ข์ ์ง์ ์ด์ผ. ํ๋ฆผ์์ด adjoint์๋ง ์ด์ํ ๊ตฌ๋ฌธ์ด ํ์ํฉ๋๋ค.
์ด๊ฒ์ transpose
๋ผ๊ณ ๋ถ๋ฅด๊ณ .'
$ ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ํฉ์๋ค. ๋ฏธ๋์ ์ฐ๋ฆฌ๋ .'
๋ฅผ pointwise adjoint๋ก ์ํ๋์ง ์๋๋ฉด Matlab ์ฌ์ฉ์๋ฅผ ๊ฐ๋๋ ๊ฒ์ ํผํ๊ธฐ ์ํด ์๊ตฌ ์ฌ์ฉ๋์ง ์๋ ์ํ๋ก ๋๊ธฐ๋ฅผ ์ํ๋์ง ๊ณ ๋ คํ ์ ์์ต๋๋ค.
๋ฐฉ๊ธ ๋ฑ๋ก๋ ํจํค์ง๋ฅผ ๊ฒ์ํ๊ณ .'
์ 600๊ฐ ์ด์์ ์ฌ์ฉ๋ฒ์ ์ฐพ์์ผ๋ฏ๋ก ๊ทธ๋ฆฌ ๋๋ฌธ ์ผ์ด ์๋๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํธ์ถ / broadcast
(0.6์์๋ง ์ซ์๊ฐ ์๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ ์ฒ๋ฆฌํ๊ธฐ ์์ํจ)์ ์ฌ์ฉํ๋ฉด ์ซ์๊ฐ ์๋ ๋ฐฐ์ด์ ๋๋ฆฌ๊ฒ ์ ์น ํ๋ ค๋ ์๊ตฌ(adjoint๊ฐ ๋ ์๋ฏธ๊ฐ ์๋ ๊ฒฝ์ฐ)๊ฐ ํจ์ฌ ๋ ์ผ๋ฐ์ ์ด ๋ ๊ฒ์
๋๋ค. ๊ฐ๊ฒฐํ ๊ตฌ๋ฌธ์ ๋ํ ์ฃผ์ฅ์ด ๋ค์ ๊ฐํ๋์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋ ๋ง์ ์ฝ๋๊ฐ ์๋ชป๋ ์ฌ์ฉ ํจํด์ ๊ฐํ๊ธฐ ์ ์ ๊ฐ๋ฅํ ํ ๋นจ๋ฆฌ .'
๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ ๋์๊ฐ์?
๋ฌธ์ ๋ .'
๊ฐ ์ด์ ์ ์ฐ์ฐ์๋ก ์๋ฏธํ๋ ๋ฐ๋ฅผ ์๋ฏธํ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค.
์์์ ๋งํ๋ฏ์ด .
๋ ๋ฒกํฐํ๋ฅผ ์๋ฏธํ๋ ์ผ๋ฐ์ ์ธ ํจํด์ ์๋ฐํ๊ธฐ ๋๋ฌธ์ ๋ฒกํฐํ๋ adjoint๋ฅผ ์๋ฏธํ๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค(ํนํ Matlab์ ์ต์ํ์ง ์์ ์ฌ๋์๊ฒ).
๋๋ @stevengj ๊ฐ ์ข์ ์ง์ ์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ ๋จ์ํ ๋น์ฌ๊ท ์ ์น์ ๋ํ ์๊ตฌ์ ๊ด๋ จ์ด ์์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ์ธ๊ธฐ๊ฐ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง แต
์ Andreas์ #19344๋ฅผ ์ ํธํ๊ธฐ ์์ํ์ต๋๋ค. ์ด ์์ ์์ ๋๋ _all_ ์ ์ฒจ์๋ฅผ ์๋ณ์๋ก ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ์ ํธํ๊ณ _any_ ํํ ์ ์ฒจ์๋ฅผ ํ์ ์ฐ์ฐ์๋ก ํด์ํฉ๋๋ค. ์ด๊ฒ์ ๋ํ ์ ์ฒจ์ ์ซ์๋ฅผ ์ฌ์ฉํ์ฌ literal_pow
์ฃผ๋ณ์ ์ฝ๊ฐ์ ์ด์ํจ์ ํด๊ฒฐํ๋ ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ค, ฯยฒ
์ ๊ฐ์ ๋ณ์ ์ด๋ฆ์ ์๋ ๊ฒ์ ์ฌํ ์ผ์ด์ง๋ง ๋จ์ ๋ณด๋ค ์ด์ ์ด ๋ ํฌ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด ์์ ์์ ๋๋ _all_ ์ ์ฒจ์๋ฅผ ์๋ณ์๋ก ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ์ ํธํ๊ณ _any_ ํํ ์ ์ฒจ์๋ฅผ ํ์ ์ฐ์ฐ์๋ก ํด์ํฉ๋๋ค.
๋ด ์ฝ๋ ์ถ์ถ
์ด ์์ ์์ ๋ชจ๋ ์ ์ฒจ์๋ฅผ ์๋ณ์๋ก ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ๋จ์ง T
๋ฅผ ์ํ๊ณ ๋ฏธ๋์ ๋ช ๊ฐ์ง ๋ค๋ฅธ ๊ฒ์ ์ํ ๋ ๊ทธ๊ฒ์ด ํ์ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
์, ์ ์น์ .'
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ฝ๊ฐ ์ผ๊ด์ฑ์ด ์์ง๋ง ์ง๊ธ๊น์ง ์ ์๋ ๋ชจ๋ ๋์์ ๋ ๋์ ๊ฒ ๊ฐ์ต๋๋ค. " .'
๋ ์ ์น, ์ ์ฐ์ฐ์์ ๋ํ ์ผ๋ฐ์ ์ธ ๊ท์น์ ์์ธ"๋ผ๊ณ ๋งํ๋ ๊ฒ์ด ์ธ์์์ ๊ฐ์ฅ ๋์ ๊ฒ์ ์๋๋๋ค. ์ด๊ฒ์ ๋ฐฐ์ฐ๊ณ ๊ณ์ ์งํํฉ๋๋ค.
.'
๊ฐ ์ ๋ธ๋ก๋์บ์คํธ๊ฐ ์๋ ๊ฒ์ ๋ํ ์ ์ฌ์ ์ธ ํผ๋์ ๋์์ด ๋ ์ ์๋ ํ ๊ฐ์ง ์ ์ํ ์ ์ ์ ๋์ฌ ๋ธ๋ก๋์บ์คํ
์ด op.
์ด๊ณ ์ค์๊ฐ .op
์ธ ๋ฐ๋ฉด ์ ๋ฏธ์ฌ ์ฐ์ฐ์๋ผ๋ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ .
๊ฐ ์ ๋ฏธ์ฌ์ผ ๋ ๋ธ๋ก๋์บ์คํธ๋ฅผ ์๋ฏธํ์ง ์๋๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ์ ๋ฏธ์ฌ .
์ ๋ค๋ฅธ ์ฉ๋๋ ํ๋ ์กฐํ์ด๋ฉฐ getfield(x, ')
๋ ์๋ฏธ๊ฐ ์์ผ๋ฏ๋ก ๋ค๋ฅธ ์๋ฏธ์ ๊ตฌ๋ณ๋ฉ๋๋ค.
(์ฆ, ๋๋ $ .'
transpose(x)
๋ฅผ ์ ํธํฉ๋๋ค.)
@stevengj ์์์ ์ธ๊ธํ ๋ฑ๋ก๋ ํจํค์ง์์ .'
์ 600๊ฐ ์ด์์ ์ฌ์ฉ ์ค ๋ง์ (์๋ง๋ ๋๋ถ๋ถ) ๊ฐ๋
์ฑ์ ๋ํ ๋น์ฉ ์์ด '
๋ก ๋์ฒด๋ ์ ์์ผ๋ฉฐ ์ฝ๋ ๊ณ์ ์ผํ ๊ฒ์
๋๋ค.
์ธ๊ธฐ๊ฐ ์์ ์๋ ์์ง๋ง ์ฌ์ ํ ์ ๋ฏธ์ฌ "
๋ฐ `
๊ฐ ์์ ์ ์์ต๋๊น?
'์ ์ฉ๋ ์์์ ์ธ๊ธํ ๋ฑ๋ก๋ ํจํค์ง์์ ๊ฐ๋ ์ฑ์ ๋ํ ๋น์ฉ ์์ด '๋ก ๋์ฒด๋ ์ ์์ผ๋ฉฐ ์ฝ๋๋ ๊ณ์ ์๋ํฉ๋๋ค.
#23424 ๊ฐ ๋์ฐฉํ๋ฉด ๋ฌธ์์ด ๋ฐฐ์ด ๋ฑ์ transpose
๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง adjoint
๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. x.'
์ ์ ํ ๋์ ์ฌ์ฉ์ ๋ํ ๋ชจ๋ฒ ์ฌ๋ก๋ ์๋ง๋ conj(x')
์ ๊ฐ์ด ๋ ๊ฒ์
๋๋ค(์ด๊ฒ์ด ๊ฒ์ผ๋ฅธ, ์ฆ ๋ฌด๋ฃ์). ๊ฐ๊ฒฐํจ์ ์ํด .'
์ ์ฌ์ฉํ๋ ๊ฒ์ ์ข์ํ์ง๋ง ์ด๋ฅผ ์ ๊ฑฐํ๋ฉด ์ ํ ๋์ํ ์ฌ์ฉ์๊ฐ ์ฌ๋ฐ๋ฅธ ๊ฒ์ ์ฌ์ฉํ๊ณ ๋ฐ์ดํฐ ๋ฐฐ์ด ์ฌ์ฉ์๊ฐ ์ฒ ์๋ฒ transpose
์ ์ฌ์ฉํ๋๋ก ๊ฐ์ ํ ์ ์์ต๋๋ค.
์ฌ์ ํ ์ ๋ฏธ์ฌ "์ `?
transpose()
์ ๋ํ ์ ๊ตฌ๋ฌธ์ ๋ค์ ์๊ธฐ์์กฐ์
๋๋ค. IMHO ํ์์ ๋ฐ๋ผ conj(x')
๋ฐ transpose
๋ก ์ ์ํ ๋๋ก .'
๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋๋ .'
์ด matlab์์ ๋งค์ฐ ์ ์ฉํ๋ค๋ ๋๋์ ๋ฐ์ต๋๋ค. ์ฃผ๋ก "๋ชจ๋ ๊ฒ์ด ํ๋ ฌ์ด๋ค"๋ผ๋ matlab์ ์ฃผ์ฅ๊ณผ ๋ค์ํ ์์น์ ๋ฌด์์ ์ ์น๋ฅผ ์ฝ์
ํด์ผ ํ๋ ์ผ๊ด๋ ์ฌ๋ผ์ด์ฑ ๊ท์น์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ผ์ ์์ํ์ญ์์ค.
์ฌ๊ธฐ์์ ์ฃผ์ฅ์ ์์ฝํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
.'
๋ ์ด์ "์ ์ผ๋ก ๊ตฌ๋ถ๋์ง ์์ ์ฐ์ฐ์๋ฅผ ์์๋ณ๋ก ์ ์ฉ"์ ์๋ฏธํ์ง ์๋ ์ ์ฐ์ฐ์๋ก์ ์ ์ผํ๊ฒ ๋์ ๋๋๋ค. Matlab์์ ์ค์ง ์๋ ์๋ก์ด ์ฌ์ฉ์๋ ์ด๊ฒ์ด ๋๋ผ์ด ํจ์ ์์ ์๊ฒ ๋ฉ๋๋ค.
.'
๋ ์ด์ ์ฌ์ค์ ๋ชจํธํฉ๋๋ค. transpose
๋ฅผ ์๋ฏธํ์ต๋๊น ์๋๋ฉด conj(x')
๋ฅผ ์๋ฏธํ์ต๋๊น? ์์น์ ์ผ๋ก .'
์ ๋ชจ๋ ๋ ๊ฑฐ์ ์ฌ์ฉ์ 2์ฐจ์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ์นํํ๋์ง ๋๋ "๋น๊ณต์ก adjoint"๋ฅผ ์ํํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด ์กฐ์ฌ๋์ด์ผ ํฉ๋๋ค.
์ฒซ ๋ฒ์งธ ๋ฌธ์ ๋ ๋ฌธ์ ๊ฐ ์์ง๋ง ๊ทธ ์์ฒด๋ก ์น๋ช ์ ์ด์ง๋ ์์ต๋๋ค. ๋ ๋ฒ์งธ ๋ฌธ์ ๋ ์ ๋ง ๋์ ๋ฌธ์ ์ ๋๋ค. ์ด๊ฒ์ ๋ ์ด์ ํ๋์ ์ผ๊ด๋ ์์ ์ด ์๋๋ผ ๋ ๊ฐ์ ๋ณ๋ ์๋ฏธ๋ก ๋ถํ ๋ฉ๋๋ค.
๋ฐฉ๊ธ .'
๋ฅผ "์์๋ณ adjoint"๋ก ๋ณ๊ฒฝํ๋ค๋ฉด conj(x')
๋ ๋๋ต x'.'
์ ๊ฐ๊ณ conj(x)'
๋ ๋๋ต x.''
๊ฐ ๋ฉ๋๋ค. x.'
๐ฌ์ ๋๋ฌด ๊ฐ๊น์ต๋๋ค.
์ธ๊ธฐ๊ฐ ์์ ์๋ ์์ง๋ง ์ฌ์ ํ ์ ๋ฏธ์ฌ "์ `?
์ฝ๋๋ฅผ Slack์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๊ณ ๊ตฌ๋ฌธ ๊ฐ์กฐ ํ์๋ฅผ ์์ ๋ ๊ฒ์ ๋ณด๋ ๊ฒ์...
๋ฌด์์ด๋ ์กฐ์ฎ๊นํ ์ ์๋ค๋ ๊ฒ์ ๋์คํจ์น ๋ฉ์ปค๋์ฆ ๋ฐ ์ด์ ๊ฐ์ ๊ธฐํ ์งง๊ณ ๊ฐ๊ฒฐํ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ํตํด "๊ต์ฐจ ์ ํ"์ ์ฝ๊ฒ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ์ข์ต๋๋ค. ์ด๋ฐ ์ข
๋ฅ์ ํญ๋ชฉ์ ๋ํ ์ฌ์ด ํด๋ฐฑ์ด ์๋ ๋ฌธ์ ๋ ํญ์ ์ฐ๋ฆฌ๊ฐ ๋ณด๊ฒ ๋ ํดํน์ด transpose(x) = x
ํด๋ฐฑ(๋๋ ๊ธฐ๋ณธ ์ ํ์์ ํจํค์ง์ ์ ํ ๋ถ๋ฒ ๋ณต์ )์ ์ ์ํ์ฌ ์ด๊ฒ์ ๋ง๋๋ ๊ฒ์
๋๋ค. ์ฝ๊ฒ ์๋ํ๋ ์ข
๋ฅ. Complex
๊ฐ ์ด์ํ ๊ฒ์ด ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น? ๋๋ถ๋ถ์ ์ซ์์ adjoint๋ ์์ฒด์ด๋ฏ๋ก complex์ adjoint๋ ์ ๋ฌธํํ ์ ์๋ ๊ฒ์
๋๋ค. ์ซ์๋ฅผ ๋์ด ํ์ฅ๋ ์ ์์ต๋๊น?
์ฌ๊ธฐ์์ ๋งค์ฐ ๊ด๋ จ๋ ๋ ๊ฐ์ง๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
1) x'
๋ ์ซ์๊ฐ ์๋ ์ ํ์๋ ์๋ํ์ง ์์ผ๋ฏ๋ก ๋ค๋ฅธ ๋ฐ์ดํฐ์ ๋ํด ์ฝ๊ฒ ์ํํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ํฉ๋๋ค.
2) transpose(x)
๋ x.'
๋งํผ ๊ฐ๋จํ์ง ์์ต๋๋ค. ๋ณต์กํ ํ๋ ฌ์ ์ ์นํ๋ ์ฌ์ฉ ์ฌ๋ก๊ฐ ํจ์ฌ ๋ ๋๋ฌผ๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ์ฃผ๋ก (1)์ ๊ฒฝ์ฐ์
๋๋ค.
๊ทธ๋ฌ๋ ์๋๋ก ๋ด๋ ค๊ฐ๋ ๋์ (2), (1)์ ๋ํด ํฉ๋ฆฌ์ ์ธ ์์ ์ ์๋ํ๊ณ ์๋ํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์๋ง๋ ํฉ๋ฆฌ์ ์ธ ์์ ์ '
๊ฐ adjoint ๋์ ์ ์น๋ฅผ ์๋ฏธํ๋ ๋งคํฌ๋ก์ผ ์ ์์ต๋๊น?
๊ทธ๋ฌ๋ ์๋๋ก ๋ด๋ ค๊ฐ๋ ๋์ (2), (1)์ ๋ํด ํฉ๋ฆฌ์ ์ธ ์์ ์ ์๋ํ๊ณ ์๋ํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
์ฐ๋ฆฌ๋ ์ด๋ฏธ ๊ทธ ๊ฒฝ๋ก์ ๊ทธ ๊ฒฝ๋ก์ ์ธ์ ํด ์์ต๋๋ค. ๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ ์ถ์ถํ ์ ์๋ ๊ฒฐ๊ณผ์ ๋ํ ๋ง์ ํ ๋ก ์ด ์์์ง๋ง ์์ฝํ๋ฉด ์ ๋์ง ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ํ์ adjoint
์ฐ์ฐ์ ์ซ์๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๊ฐ๊ฒฐํ ๊ตฌ๋ฌธ์ ์ข์ํ๊ธฐ ๋๋ฌธ์ ์ซ์๊ฐ ์๋ ๊ฒ์ '
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ข์ง ์์ต๋๋ค. ์ด๊ฒ์ ์ต์
์ ์ฐ์ฐ์ ๋ง์ฅ๋์ด๋ฉฐ ์ด๋ฌํ ์ข
๋ฅ์ ์๋ฏธ ๋จ์ฉ์ผ๋ก ์ธํด ๋์ ์ผ์ด ๋ค๋ฐ๋ฅด๋ ๊ฒ์ ๋๋ผ์ด ์ผ์ด ์๋๋๋ค. adjoint
ํจ์๋ adjoint๋ฅผ ์ทจํ๋ ๊ฒ์ด ํ๋นํ ๊ฒ์ ๋ํด์๋ง ์ ์๋์ด์ผ ํ๊ณ '
๋ ๊ทธ ์๋ฏธ๋ก๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค.
ํ์ฌ ์ฌ์ฉ๋๋ .'
๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐฐ์ด ์ ์น์ ๋น๊ณต์ก adjoint์ ๋ ๊ฐ์ง ๋ค๋ฅธ ์์
์ด๋ผ๋ ๊ฒ์ ๊ธฐ์ตํ์ญ์์ค. ์ฌ๊ท ์ ์น ๋ฌธ์ ๋ ์ด๋ฌํ ์ฐ์ฐ์ด ์๋ก ๋ค๋ฅด๋ฏ๋ก ์ด๋ฅผ ํํํ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ํ์ํ๋ค๋ ์ฌ์ค์ ๊ฐ์กฐํฉ๋๋ค. ์ํ์๋ค์ non-conjugate adjoint ์ฐ์ฐ์ด (a) ์ค์ํ๊ณ (b) ์ฐจ์์ ๋จ์ํ ์ค์ํ๊ณผ๋ ๋ค๋ฅด๋ค๋ ๋ฐ ๋จํธํ ๊ฒ ๊ฐ์ต๋๋ค. ํนํ, ์ ํํ๋ ค๋ฉด ๋น๊ณต์ก adjoint๋ ์ฌ๊ท์ ์ด์ด์ผ ํฉ๋๋ค. ๋ฐ๋ฉด์ ์ผ๋ฐ ๋ฐฐ์ด์ ์ฐจ์์ ๋ฐ๊พธ๋ ๊ฒ์ ๋ถ๋ช
ํ ์ฌ๊ท์ ์ด์ง ์์์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ด๋ฌํ ์์
์ ๋ค๋ฅด๊ฒ ์์ฑ๋์ด์ผ ํ๊ณ .'
์ ๊ธฐ์กด ์ฌ์ฉ๋ฒ์ ํ๋์ ์๋ฏธ ๋๋ ๋ค๋ฅธ ์๋ฏธ๋ฅผ ๊ฐ๋ ๊ฒ์ผ๋ก ๋ช
ํํด์ผ ํฉ๋๋ค. .'
๋ฅผ ๋น์ถ์ฒํ๋ ๊ฒ์ ์ด๊ฒ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์
๋๋ค.
๋ง์ง๋ง์ผ๋ก permutedims(x, (2, 1))
๊ฐ 2์ฐจ์ ๋ฐฐ์ด์ ์ฐจ์์ ๋ฐ๊พธ๊ธฐ์๋ ํ์คํ ๋๋ฌด ๋ถํธํ๋ค๊ณ ๊ฐํ๊ฒ ๋๋ผ๊ธด ํ์ง๋ง transpose(x)
๊ฐ ๋๋ฌด ๋ถํธํ๋ค๋ ์ฃผ์ฅ์ ์ค๋๋ ฅ์ด ์์ต๋๋ค. ์ด ์์
์ด ๋๋ฌด ์ผ๋ฐ์ ์ด์ด์ ๊ฐ๋จํ๊ณ ๋ช
ํํ ํจ์ ์ด๋ฆ์ ๊ฐ๋ ๊ฒ์ด ๋๋ฌด ๋ง์ต๋๊น? ์ง์ง? ์ฐ๋ฆฌ๊ฐ ํจ์ ์ด๋ฆ๊ณผ ํจ์ ํธ์ถ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ์ธ์ด์ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ๋ณด๋ค ๋ฐฐ์ด์ ์ฐจ์์ ๋ฐ๊พธ๋ ๊ฒ์ด ํจ์ฌ ๋ ์ผ๋ฐ์ ์ด๊ฑฐ๋ ์ค์ํฉ๋๊น? Householder ํ๊ธฐ๋ฒ์ v'v
, v*v'
๋ฐ v'A*v
์ ๊ฐ์ ๊ฒ์ ์ฐ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ adjoint
๋ฅผ ์์ฃผ ํน๋ณํ๊ฒ ๋ง๋ญ๋๋ค. ์ด๊ฒ์ด adjoint
๊ฐ ์ ๋ง ์ข์ ๊ตฌ๋ฌธ์ ์ป๋ ์ด์ ์
๋๋ค. ๊ทธ๋ฌ๋ ๋ฐฐ์ด์ ์ฐจ์์ ๋ฐ๊พธ๋์? ๋ด ์๊ฒฌ์ผ๋ก๋ ์ด์์๋ฅผ ๋ณด์ฆํ์ง ์์ต๋๋ค.
๊ฐ๋ ฅํ ์ฃผ์ฅ์ ์๋์ง๋ง, ์๋ฅผ ๋ค์ด ๋ด ํ๋ฉด์์ ๋์์ ๋ช ๊ฐ์ ๋ฒกํฐ์ ๋ด์ฉ์ ๋ณด๊ณ ์ถ์ ๋์ ๊ฐ์ด (๊ฐ๋จํ ์ปจํ
์ด๋๋ก ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ) ๋ณด๋ค ๊ฐ๊ฒฐํ ๋ฐฐ์ด์ ์ธ์ํ๊ธฐ ์ํด ์ข
์ข
'
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์๋ฅผ ๋ฐ๊ฟ ์ ์๊ธฐ ๋๋ฌธ์ ์คํจํ๋ฉด ํญ์ ์ข์ ํฉ๋๋ค. ๋ฐ๋ผ์ REPL์ ๋ํ ์งง์ ๊ตฌ๋ฌธ์ ํ์คํ ํธ๋ฆฌํฉ๋๋ค. (๋ํ ์ด๊ฒ์ ํนํ 2์ฐจ์ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ julia์ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ํ ๋ "์์๋ฅผ ์ ํ"ํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๊ฐ์ง์ง๋ง ํ ์ฐ์ ๋ฐฐ์ด์ ์ต์ํ ์ฌ๋๋ค์ด ๋ ์ฝ๊ฒ ๋ง๋ค ์ ์์ง๋ง ํ์คํ ๊ฐ๋ ฅํ ์ฃผ์ฅ์ ์๋๋๋ค). ๋จ์ง ์ ํ ๋์ํ์์๊ฒ๋ง ์ ์ฉํ์ง ์์ ๋ฉ์ง ๊ฐ๊ฒฐํ ๊ตฌ๋ฌธ์ด๋ผ๊ณ ๋งํ๋ ๊ฒ๋ฟ์
๋๋ค.
https://github.com/JuliaLang/julia/pull/19344#issuecomment -261621763์์ ๋ช ๊ฐ์ง ๊ตฌ๋ฌธ ์์ด๋์ด์ ๋ํด ์ธ๊ธํ๋๋ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
julia> const แต, แดด = transpose, ctranspose;
julia> for op in (แต, แดด)
<strong i="7">@eval</strong> Base.:*(x::AbstractArray{T}, f::typeof($op)) where {T<:Number} = f(x)
end
julia> A = rand(2, 2)
2ร2 Array{Float64,2}:
0.919332 0.651938
0.387085 0.16784
julia> Aแต = (A)แต # variable definition and function application are both available!
2ร2 Array{Float64,2}:
0.919332 0.387085
0.651938 0.16784
julia> Aแดด = (A)แดด
2ร2 Array{Float64,2}:
0.919332 0.387085
0.651938 0.16784
๊ทธ๋ฌ๋ ๋ฌผ๋ก ํดํน ์์ด๋ ์ผ์ข
์ "ํ์ ํจ์ ์์ฉ ํ๋ก๊ทธ๋จ" ์ด ์์ ์ ์๊ณ ๊ดํธ (x)f
๊ฐ ํ์ํ๋ค๋ ์์ด๋์ด๋ง ์์ผ๋ฉด ์ ์ผ๋ก ๊ตฌ๋ถ๋ ๋ฒ์ ์ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค (x).f
( xf
๋ f
๊ฐ ์ ์ฒจ์ ๊ธฐํธ์ธ ๊ฒฝ์ฐ์๋ ์๋ณ์๊ฐ ๋ฉ๋๋ค.
์ด ์์ ํดํน์ 0.6์์ ์๋ํ์ง๋ง ์ง๊ธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
julia> Aแต = (A)แต
ERROR: syntax: invalid operator
julia> Aแต = (A)transpose
2ร2 Array{Float64,2}:
0.995848 0.549117
0.69401 0.908227
julia> Aแดด = (A)แดด
ERROR: syntax: invalid operator
julia> Aแดด = (A)ctranspose # or adjoint or whatever
2ร2 Array{Float64,2}:
0.995848 0.549117
0.69401 0.908227
์ฌํ๊ฒ๋, ์ ๋ ์๋ ํ์ ์ํด ๊ทธ๋ ๊ฒ ํ๊ณ ์ถ์์ต๋๋ค.
julia> square(n) = n^2; cube(n) = n^3;
julia> Base.:*(n, f::typeof(square)) = f(n)
julia> Base.:*(n, f::typeof(cube)) = f(n)
julia> const ยฒ = square # why?
syntax: invalid character "ยฒ"
julia> const ยณ = cube # why?
syntax: invalid character "ยณ"
nยฒ = (n)ยฒ
๋ฐ nยณ = (n)ยณ
$์ ๊ฐ์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค๊ณ ์์งํ๊ฒ ์๊ฐํ์ง๋ง ์ด๋ค ์ข
๋ฅ์ ์ซ์ ์๋ณ์๋ ์ฒซ ๋ฒ์งธ ์์น์ ์๋ ๊ฒ์ด ๊ธ์ง๋์์ง๋ง (A)โปยน
๋ ์๋ํ์ต๋๋ค. ์ฌ๊ธฐ์ โปยน
๋ const โปยน = inv
์ด์์ต๋๋ค.
InfixFunctions.jl ์ ๋ํด ์ ์ฌํ ํดํน์ ๊ตฌํํ์ต๋๋ค.
์ฌ์ฉ์๋ก์ ์ ๋ PostfixFunctions.jl
ํจํค์ง๋ฅผ ์ํํ ์ ์์ผ๋ฉฐ ์ฌ๊ธฐ์์ ๊ฐ์ฅ ์ข์ ๊ฒ์ ์ฐพ๋ ๋ฐ ๋ง์กฑํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์ฌ ์ด ๊ตฌ๋ฌธ ์ ํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
x * แถ
in postfix(ํดํน์์ ์์์ ๊ณฑ์
) (x)แถ
ํ์ฉ๋์ง ์์๋์๊ฒ ์กฐ๊ธ ๋๋ฌด ๋ง์ ๊ฒ ๊ฐ์ต๋๋ค. IMHO, ๋๋ ์ ์ด๋ ์ซ์ ์ ์ฒจ์๋ก ์์ํ ์ ์๋ ์๋ณ์๋ฅผ ์ ์ํ ์ ์๊ณ ์ถ์ต๋๋ค. ๋๋ ๋ ์ผ๋ฐ์ ์ผ๋ก ์์ ์ ์ซ์ ์๋ฏธ ์ฒด๊ณ๊ฐ ์๋ ์ค์ ์ซ์ ๋ฌธ์ 0-9๋ง ํ์ฉํ์ง ์์ต๋๋ค. ์๋ณ์, ๊ทธ๊ฒ์ ๊ต์ฅํ ๊ฒ์ ๋๋ค. ๐
๊ฑด๋ฐฐ!
์๋ณ์๋ก ๋ค๋ฅธ ์ซ์ ๋ฌธ์์ ๋ํ ์ค๋ช ์ #10762๋ฅผ ์ฐธ์กฐํ์ธ์.
๋ค๋ฅธ ๋ฌธ์ ๋ #22089, ์ฐ์ฐ์ ์ ๋ฏธ์ฌ์ ๊ด๋ จ์ด ์์ต๋๋ค. +แต
๋ ์ด์ ์ ํจํ ์ฐ์ฐ์๋ก, ์ฐ์ฐ์๊ฐ ์์๋ ์ ์๋ ์ปจํ
์คํธ์์ ๊ฒฐํฉ ๋ฌธ์๋ก๋ง ๊ตฌ์ฑ๋ ์๋ณ์๋ฅผ (์๋ง๋ ์ค์๋ก) ํ์ฉํ์ง ์์์ต๋๋ค. ๊ทธ๊ฒ์ ๋์๊ฒ ๋ฒ๊ทธ์ฒ๋ผ ๋ณด์ธ๋ค. แต
๊ฐ ์ ํจํ ์๋ณ์์ด์ง๋ง -แต
๊ฐ -(แต)
๋ฅผ ์ํํ์ง ์๋๋ค๋ ๊ฒ๋ ์ฝ๊ฐ ์ด์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ด ์ธ์์ ๋์ด ์๋๋ฉฐ IMO ์์ ์ แต
์ ๋ค๋ฅธ ๊ฐ๋ฅํ ์ฉ๋๋ฅผ ์์ ๊ฐ์น๊ฐ ์์ต๋๋ค.
.'
๋ฅผ ํ์ ์ ์น ์ฐ์ฐ์๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์ฌ๊ธฐ์ ํ์๋ ์์ต๋๋ค(๋ฌธ์ ์ ์ฃผ์ ๊ฐ ๋ฌด์์ ๋งํ๋๋ผ๋), ๊ณ ๋ ค ์ฌํญ์ ์ค์ ๋ก .'
๋ฅผ ํ์ ์ฐ์ฐ์๋ก ์ ์งํด์ผ ํ๋์ง ์ฌ๋ถ์
๋๋ค. ๋น๊ณต์ก adjoint์ ๊ฒฝ์ฐ ์ฌ๊ท์ ์
๋๋ค. ์ด๊ฒ์ ์ข
์ข
์ ์น์ ๋์ผํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๋์ผํ ์์
์ ์๋๋๋ค. ์ ํ ๋์ํ ์ฌ๋๋ค์ด .'
๊ฐ ์ผ๋ฐ ๋ฐฐ์ด ์ ์น๋ฅผ ์๋ฏธํ๋๋ก ๊ธฐ๊บผ์ด ํ์ฉํ๋ค๋ฉด ๊ทธ๊ฒ์ ๋ค๋ฅธ ์ด์ผ๊ธฐ์ด์ง๋ง ๋ด ์ธ์์ ๋ฐ์๋ค์ผ ์ ์๋ค๋ ๊ฒ์
๋๋ค.
@Ismael-VC, ์ ์ฒจ์์ ๋ํ ์ ๋ฏธ์ฌ ํจ์ ๊ตฌ๋ฌธ์ผ๋ก (x)แต
๋ฅผ ํ์ฉํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ๋ค๋ฅธ ์๋ฏธ๋ ๋ฌด์์
๋๊น? ๋๋ ๋น์ ์ ์ ์์ด ์ฌ๋๋ค์ ์๋ชป๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์ง๋ฅด๊ธฐ ์์ํ๋ ๊ณณ์์ ๋ชจ๋ ์๋ณ์๊ฐ ์ ๋ฏธ์ฌ ๊ตฌ๋ฌธ์ ํจ์๋ก ์ ์ฉ๋ ์ ์๋๋ก ํ์ฉํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์์ฒจ์๋ก ์ ํํ ๊ฒ์ด๋ค.
@StefanKarpinski , ๋๋ ํฉ์๊ฐ ์ ํํ .'
๊ฐ ๋น์ฌ๊ท์ , ๋น๊ณต์ก ๋ฐฐ์ด ์ ์น(์ด ์ฐ์ฐ์๊ฐ ์๋ ๊ฒฝ์ฐ)๋ฅผ ์๋ฏธํ๋ ๋ฐ๋ฉด '
๋ ์ฌ๊ท, ๊ณต์ก ๋ถ์์์ .
์ ๋ ํ์ ์ ์น ์ฐ์ฐ์์ แต
๋ฅผ ์ฌ์ฉํ๋ ์์ด๋์ด๋ฅผ ์ ๋ง ์ ๋ง ์ซ์ดํฉ๋๋ค. aแตa
๋๋ LแตDL = ltdlfact(A)
์ ๊ฐ์ด ๋ณ์ ์ด๋ฆ์ ์ ์ฒจ์๋ก ์ฌ์ฉ ํ๋ ๊ฒ์ ๋๋ฌด ์ ์ฉํฉ๋๋ค. (์ฐ์ฐ์์ แต
๋ง ์ฌ์ฉํ๊ณ ๋ค๋ฅธ ์ ์ฒจ์๋ ์๋ณ์ ์ ํจํ๋ค๋ ์ฌ์ค ์ธ์๋ ์ด์ํ ๊ฒ์
๋๋ค.)
๊ทธ๊ฒ์ ์ ํ ์ดํด๊ฐ ๋์ง ์์์ต๋๋ค. ์ ๋ linalg ์ฌ๋๋ค์ด a.'
๋ฅผ ๊ทธ๋๋ก ์ ์งํ๋ ๊ฒ์ ์ ํธํ๋ค๊ณ ์๊ฐํ์ต๋๋ค. ์ฆ, conj(a)'
์ ์๋ฏธํฉ๋๋ค. .'
๋ฅผ ์ ์งํ์ง๋ง ๋ฐฐ์ด ์ ์น๋ก ์๋ฏธ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์๋นํ ๋ค๋ฆ
๋๋ค. ์ ๋ ๊ทธ๊ฒ์ ๋ํด ์ด๋ป๊ฒ ๋๋ผ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ํ์ ์ฐ์ฐ์๋ก แต
์ฌ์ฉํ๋ ๊ฒ์ด ์ง์ฆ๋๊ณ ์ผ๊ด์ฑ์ด ์๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ๋๋ @Ismael-VC์ (a)แต
์ ์์ ์ข์ํ์ง๋ง aแต
๋ฅผ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋ง์ง๋ ์์ต๋๋ค.
๊ทธ ํ ๋ก ์ ๋ํ ๋์ ๊ธฐ์ต์ Steven์ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค. ์ฌ๊ท์ ์ด๊ณ ๋น๊ณต์ก ์ ์น๋ ๋๋ฌผ๊ณ ์ผ๋ฐ์ ์ผ๋ก ๊ฝค ์ด์ํฉ๋๋ค. ์ฌ๊ธฐ์ ์ ์ ํ ์์ฝ์ด ์์ต๋๋ค: https://github.com/JuliaLang/julia/issues/20978#issuecomment -316141984.
๋๋ ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ์ ๋ฏธ์ฌ '
๊ฐ ์ธ์ ํ๊ณ ์์ด์ผ ํ๋ค๋ ๋ฐ ๋์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฐ๋ฆฌ ๋ชจ๋๋ ์ ๋ฏธ์ฌ .'
๊ฐ ์ฐจ์ ์ฑ
์ด๋ผ๋ ๋ฐ ๋์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ๋น์ฌ๊ท์ (๊ตฌ์กฐ์ ) ์ ์น๊ฐ ์ฌ๊ท์ ์ ์น๋ณด๋ค ๋ ์ ์ฉํ๋ค๋ ๋ฐ ๋์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์, ๋ชจ๋๊ฐ ๋์ํ๋ ์์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
adjoint(a)
a'
์ฌ์ฉconj(a)'
๋๋ conj(a')
๋ฅผ ์ฌ์ฉํฉ๋๋ค.๋ฐ๋ผ์ ์ ์ผํ ๊ฒฝํฉ ์ง์ ์ ๋ฐฐ์ด ์ ์น๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
a.'
๋๋transpose(a)
๋๋(a)แต
.์ด ํ๊ฐ๊ฐ ๋ง์ต๋๊น?
์, ๊ทธ๋ ๊ฒ ์๊ฐํฉ๋๋ค("๋ฐฐ์ด ์ ์น"๊ฐ ์ฌ๊ท์ ์ด์ง ์์ ๊ฒฝ์ฐ).
๋ํ ๋ด๊ฐ ์ดํดํ๋ ๊ฒ์ฒ๋ผ transpose(a)
๋ ํ์คํ ์ ํจํ ๊ตฌ๋ฌธ(๋ฐ ๋น์ฌ๊ท์ )์ด์ด์ผ ํ๋ค๋ ๋ฐ ๋์ํ๊ณ ๋์ํ์ง ์๋ ์ ์ผํ ์ง์ ์ .'
๋ฐ/๋๋ (a)แต
์ฌ๋ถ์
๋๋ค.
https://github.com/JuliaLang/julia/issues/20978#issuecomment -315902532์์ ์ ๊ทผ (1), ์๋นํ ์ง์์ ๋ฐ์์ต๋๋ค(์: https://github.com/JuliaLang/julia/issues/20978# issuecomment-316080448), ๊ฐ๋ฅ์ฑ์ด ๋จ์ ์์ต๋๋ค. ๊ฒ์ํ ์ ์๋ ์ ๊ทผ ๋ฐฉ์( flip(A)
์๊ฐ)์ ์คํํ๋ ์ง์ ์ด ์์ต๋๋ค.
๊ทธ ๊ฐ์น๋ฅผ ์ํด ์ ๋ .'
์ง์ ์ค๋จ์ ์ง์งํฉ๋๋ค. ์ด ์ค๋ ๋์ ํผ๋๊ณผ ๋ชจํธ์ฑ์ ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ ์์ฒด์ ๋ํ ๊ฐ๋ ฅํ ์ฃผ์ฅ์
๋๋ค. ์ต์์!
๋๋ ์ฐ๋ฆฌ๊ฐ '
์ ๋ฏธ์ฌ๋ฅผ ๊ฐ์ง๊ณ ์๋ ํ ์ฌ๋๋ค์ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ฌ f.(v, w')
๋ฒกํฐ์ ๋ฐ์นด๋ฅดํธ ๊ณฑ์ ํตํด f
๋ธ๋ก๋์บ์คํธํ๊ธฐ๋ฅผ ์ํ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๋๋ค์ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด ๋ฒกํฐ๋ฅผ ํ
์ด๋ธ๊ณผ ๊ฐ์ ๊ตฌ์กฐ์ ๋ํ ํค๋์ ํ ๋ฒกํฐ๋ก ์ฌ๊ตฌ์ฑํ๋ ค๊ณ ํ ๊ฒ์
๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ค์ ์ง์ํ ์ ์๋ ๊ฐ๋จํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ๊ต์ฒดํ์ด ์๋ค๋ ๊ฒ์ด ์ ๊ฒ๋ ๋งค๋ ฅ์ ์
๋๋ค.
์ฌ๊ธฐ ์ฐ๋ฆฌ๊ฐ ๊ณ ๋ คํ์ง ์์ ์ต์
์ด ์์ต๋๋ค: A*'
โ ์๋ก์ด bigraph. ์ผ๋ฐ์ ์ธ ์ํ ํ๊ธฐ๋ฒ์ ์ด๊ฒ์ conj(A)'
๋ก ํด์ํ ์ ์์ต๋๋ค. ์ด๋ ์ค์ ๋ก ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๊น์ต๋๋ค. 0.6์์๋ ์ฌ์ฉํ ์ ์์์ง๋ง 0.7์์๋ *
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ์ ํ์ฉํฉ๋๋ค. ๊ทธ๋๋ ์ฌ์ ํ ์๋ ๊ฐ๋ฅํฉ๋๋ค.
์ค ๋์ ๋์ด ๊ตฌ๋ฌธ ๋ถ์ํ๋ ์ฌ์ฉ์ ์ง์ ๋ฌธ์์ด ๋ฆฌํฐ๋ด๋ก ์ธํด ์ ๋ฏธ์ฌ "
๋ฐ `
๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ฐ์ ์ด์ ๋ก ์ ๋ฏธ์ฌ *
์์ฒด๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ๋ฏธ์ฌ ์์ Aโฒ
๋ ์๋ง๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ ๋์ฝ๋ ์๋ณ์ ์ค ํ๋์ด๋ฏ๋ก Aแต
๋ณด๋ค ํจ์ฌ ๋ ๋ง์ต๋๋ค.
์์งํ ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด .'
๋ฅผ ์ ํ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ transpose(a)
์ ๋๋ ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฐฉ๊ธ ๋ฑ๋ก๋ ํจํค์ง๋ฅผ ๊ฒ์ํ๊ณ .'์ 600๊ฐ ์ด์์ ์ฌ์ฉ๋ฒ์ ์ฐพ์์ผ๋ฏ๋ก ๊ทธ๋ค์ง ๋๋ฌธ ์ผ์ด ์๋๋๋ค.
'
.'
๊ฐ ์ฌ์ฉ๋์ง ์์๋์ง ํ์ธํ๊ธฐ ์ํด ์ด ์ง์ ์ ์ ํ ํ์ธํ์ต๋๊น? ๋๋ ๊ทธ๊ฒ์ด ์ฌ์ค์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ ๋ง๋ค๊ณ ์๊ฐํ๊ธฐ ์์ํ์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด, .'
์ ํฉ๋ฒ์ ์ธ ์ฌ์ฉ์ ๋ณธ ์ ์ผํ ๊ณณ์ Plots.jl ๋ ์ด๋ธ์ด ๋ฒกํฐ๋ฅผ ํ์ฉํ๊ธฐ ์ ์ด์์ต๋๋ค(๋์ ๋ฌธ์์ด์ ํ ๋ฒกํฐ๋ฅผ ์ํจ). ๊ทธ๋ฌ๋ ๋ณ๊ฒฝ๋์์ต๋๋ค. ์ด๊ฒ์ด ์์ฃผ ํ์ํ ์ฝ๋์ ๊ฒฝ์ฐ T = transpose
๋ก์ปฌ์์ ์์ํ๊ฑฐ๋ '
๋ฅผ transpose
๋ก ๋ณ๊ฒฝํ๋ ๋งคํฌ๋ก๋ฅผ ๋์ง๋๋ค.
<strong i="17">@transpose</strong> A = A'*A*B'*B*C'*C
๊ทธ ๋๋ฌธ ๊ฒฝ์ฐ์ ๋์ ํจ๊ป ๊ด์ฐฎ์ ๊ฒ์ ๋๋ค.
์ฌ๋๋ค์ f.(v, w')๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒกํฐ์ ๋ฐ์นด๋ฅดํธ ๊ณฑ์ ํตํด f๋ฅผ ๋ธ๋ก๋์บ์คํธํ๋ ๋ฐ ์ฌ์ฉํ๋ ค๊ณ ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๋๋ค์ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด ๋ฒกํฐ๋ฅผ ํ ์ด๋ธ๊ณผ ๊ฐ์ ๊ตฌ์กฐ์ ๋ํ ํค๋์ ํ ๋ฒกํฐ๋ก ์ฌ๊ตฌ์ฑํ๋ ค๊ณ ํ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ค์ ์ง์ํ ์ ์๋ ๊ฐ๋จํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ๊ต์ฒดํ์ด ์๋ค๋ ๊ฒ์ด ์ ๊ฒ๋ ๋งค๋ ฅ์ ์ ๋๋ค.
๋ช
๋ น๋ฌธ์ ํ ๋ฒ๋ง ๋ํ๋๋ฉด transpose
๋ง ์ฌ์ฉํ๋ฉด ๋์ง ์์ต๋๊น?
conjugate-adjoint์ ๋ํ a*'
๊ตฌ๋ฌธ์ ๊ฝค ํ๋ฅญํ์ง๋ง ์ค์ ๋ก ๋ ๋์ ๊ตฌ๋ฌธ์ด ํ์ํ ์์
์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. &a
๋ ๊ณง ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ์ด์ ๋ํ ๊ธฐ์กด ํ๊ธฐ๋ฒ๊ณผ ์๋นํ ๋ค๋ฅด์ง๋ง ๊ตํ์ ์ ์ํฉ๋๋ค.
๋ฐ์ง ํฌํ๋ฅผ ํ ์๊ฐ์ด ์๋๊น์?
(๋๋ต ์ ์ ์์๋๋ก, ์ฌ๊ธฐ์์๋ ์ด๋ชจํฐ์ฝ ์ด๋ฆ์ ๋ํ ํ๋จ์ด ์์ต๋๋ค)
A.'
โ ์๋ฏธ๋ง ๋ณ๊ฒฝํ๊ณ ๊ตฌ๋ฌธ์ ๋์ผํ๊ฒ ์ ์งtranspose(A)
โ ํน๋ณํ ๊ตฌ๋ฌธ ์์t(A)
๋๋ tr(A)
โ ํน๋ณํ ๊ตฌ๋ฌธ์ ์์ง๋ง ๋ ์งง์ ์ด๋ฆ์ ๋ด๋ณด๋
๋๋ค.Aแต
โ แต
์ ์๋ณ์์ ํน์ ๋ฌธ์๋ก ๋ ํ๋ ๋๋ ๋ ๊ฐ์ ์ ์ฒจ์ ํฌํจ(A)แต
โ ๋ชจ๋ ์ ์ฒจ์๋ ์๋ณ์์ ๋ถ๋ฆฌ๋์ด ํ์ ์ฐ์ฐ์์ฒ๋ผ ์๋ํฉ๋๋ค.A*'
โ ๊ทธ ๋ถ์พํ ๊ณ๊ณก ์์ ๋ฐ๋ก ๊ดํ์ด ์์ต๋๋ค. ์ด๋ ๊ตฌ์กฐ์ ์กฐ์ฎ๊น์ ์๋ฏธํฉ๋๋ค.&A
์ ์ ํธํ๋ ๊ฒฝ์ฐ ๋ฐ๋ก ์์ Stefan ๊ฒ์๋ฌผ์ ๐๋ฅผ ๋์ง์ญ์์ค(์ด๋ชจํฐ์ฝ์ด ์์ต๋๋ค)LinAlg ํ ๋ก ์ conj(xโ)
๊ฐ ๋น๊ต์ ๋๋ฌผ๊ธฐ ๋๋ฌธ์ .โ
๋ฅผ ๋น์ฌ๊ท ์ ์น ์ฌ์ฉ์ ์ ๋ฌผํ๋ ๊ฒ์ ๋ํด ์ค์ ๋ก ์ด์ผ๊ธฐํ์ต๋๋ค. ๊ทธ๋ฌ๋ แต
๋ ์ํ์ ๊ตฌ๋ฌธ์ด๋ฉฐ ์ค์ ๋ก ์ํ์ ์๋ฏธ(์๋ ๊ฒฝ์ฐ)๋ฅผ ์ทจํด์ผ ํฉ๋๋ค.
tr(A)
๊ฐ ํ๋ ฌ ์ ์น๋ฅผ ์๋ฏธํ๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๋ ฅํ๊ฒ ๋ฐ๋ํฉ๋๋ค. ๋ชจ๋ ์ฌ๋๋ค์ ์ด๊ฒ์ด ํ๋ ฌ ์ถ์ ์ ์๋ฏธํ๋ค๊ณ ์๊ฐํ ๊ฒ์
๋๋ค: https://en.wikipedia.org/wiki/Trace_ (linear_algebra)
์๋ณ์๋ก ์ ์ฒจ์๋ฅผ ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ(1.0 ์ด์ ์๋ ์ฌ๊ฐํ๊ฒ ๊ณ ๋ ค๋์ด์ผ ํจ) แต(A)
๋ ๊ฐ๋ฅํฉ๋๋ค.
(A)แต
์ ์๊ณผ ๊ด๋ จํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์ธ๊ธ์ผ๋ก ์ด ํ ๋ก ์ ์ฝ๊ฐ ๋ฐฉํดํ ๊ฒ์ ๋ํด ์ฌ๊ณผ๋๋ฆฝ๋๋ค.
์ ๋ โ
๋ฅผ ๋จํญ ์ฐ์ฐ์๋ก ์ฌ์ฉํ ์ ์๋๋ก ํ๋ ๊ฒ์ ๋ํด ๋ณ๋ก ์ ๊ฒฝ์ ์ฐ์ง ์์์ต๋๋ค. ํนํ โ(...)
๋ฅผ ํ๋ ๋๋ ๋ช ๊ฐ์ ๋ฌธ์. ๊ฒ๋ค๊ฐ, ๋๋ ํญ์ aยฒ
์ โa
์ฌ์ด์ ๊ธฐ๋ฅ ์ฐจ์ด๊ฐ ๋งค์ฐ ์ธ์์ ์ด๋ผ๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ ๋์ฝ๋ ํด๋์ค ๋ฑ์ ๋ํด ์๋ค๋ฉด ์๋ง๋ ์ดํด๊ฐ ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ๋ค๋ฅธ ์ฌ๋์๊ฒ๋ ์ด๊ฒ์ด ํฐ๋ฌด๋์๋ ๊ฒ์ฒ๋ผ ๋ณด์ผ ๊ฒ์
๋๋ค. aยฒ
๋ฅผ ์ ํจํ ๋ณ์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ฉํ์ง๋ง ๋ง์ฐฌ๊ฐ์ง๋ก โa
๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ a
์ ์ ๊ณฑ๊ทผ์ ์ ์ฅํ๋ ๋ฐ ์ ์ฉํ ๋ณ์ ์ด๋ฆ์ด ๋ ์ ์์ต๋๋ค. ํ์์ค. ๋๋ aยฒb
๋ฐ ์ ๊ณฑ๊ทผ aโb
์ ๊ฐ์ ๋ ๋ณต์กํ ํํ์์
๋๋ค. ์ฌ๊ธฐ์ ์ ์๋ ์ ํจํ ์๋ณ์์ด๊ณ ํ์๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ๋ฌด์๋ณด๋ค ์ผ๊ด์ฑ์ด ์ข์์.
๋ฐ๋ผ์ ์ผ๊ด์ฑ์ ์ํด ๊ดํธ (A)แต
, (a)ยฒ
๋ฅผ ์ ๋์ฝ๋ ๋จํญ ์ฐ์ฐ์ โ
(๋ฐ ๊ด๋ จ ํญ๋ชฉ) ์ ๊ฑฐ์ ํจ๊ป ์ฌ์ฉํ ๋ ์ ๋ฏธ์ฌ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋ณ์์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค(์ผ๋ฐ ํจ์ ํธ์ถ โ(a)
๋ก ๊ณ์ ์ก์ธ์คํ ์ ์์).
@Jutho์ ๋ง์ 100% ๋์ํ๊ณ ์ฌ๋ฌ ๋ฒ ์๊ฐํ์ต๋๋ค. @Jutho, ์ด์๋ฅผ ์ด์ด์ฃผ์๊ฒ ์ต๋๊น? ์ ์: ์๋ณ์ ์ด๋ฆ์ โ
ํ์ฉ, op๋ก ํธ์ถํ๋ ค๋ฉด โ(x)
ํ์.
๋ค์ ์ง๋ฌธ -> 2 |> โ
๋ ์ด๋ป์ต๋๊น?
๋ค๋ฅธ ์ค๋ ๋์์ โ
์ ๋ํด ๋
ผ์ํด ๋ณด๊ฒ ์ต๋๋ค. ํ์ง๋ง ๊ฐ๋จํ ๋งํด 2 |> โ
๋ โ(2)
๋ฅผ ์๋ฏธํฉ๋๋ค.
ํ์ ๋ณ๊ฒฝ์ด ํ์ํ์ง ์๊ณ ์
๋ ฅํ๊ธฐ ์ฌ์ด ๋ ๋ค๋ฅธ ๋์์ ์ ์น์ ๋ํ A^T
์
๋๋ค( T
๋ฅผ ^
๋ฉ์๋๋ก ์ฑ๊ธํค ์ ํ์ผ๋ก ์ ์). โฆ ์ค, @mbauman ๋ ์ด ์์ด๋์ด๋ฅผ ๊ฐ์ง๊ณ ์๋ค๋ ๊ฒ์ ์์์ต๋๋ค. ์ฝ๊ฐ ๋ชป์๊ฒผ์ง๋ง A.'
์ ๋๋ ์๋๋๋ค.
๋๋ ์ ๋ฌธ ์ง์์ด ์์ง๋ง ๋ด ์์ ๊ณผ์ ์์ ํ๋ ฌ ํํ์์ด ํฌํจ๋ ์์ฒ ์ค์ ์ ๋ ฅํ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฌ๋์ด ๋๊ตฌ์ธ์ง์ ๋ฐ๋ผ ์ด ํ ๋ก ์ ๊ฒฐ๊ณผ์ ๋ง์ ํฌ์๋ฅผ ํ๊ณ ์์ต๋๋ค.
transpose(A) # with no special syntax
๊ฐ ์์ ํ์์ ์ด๊ธฐ๊ณ ์์ง๋ง ๋๊ณผ ์๊ฐ๋ฝ์ด ์ํ๋ค.
ํ์ด์ฌ์์ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ๋ฒ์ ์๋ง๋ numpy์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ ๊ทธ๋ฆฌ ๋์์ง ์์ ๋ง์ ๊ฒ๋ค๊ณผ ํจ๊ป ์์ ๊ฒ์ ๋๋ค:
import numpy as np
# define matrix X of n columns, with m rows of observations
error = X.dot(Theta.T) - Y
gradient = (1 / m) * (X.dot(Theta.T) - Y).T.dot(X)
๋๋ํ๊ณ ์ถ์ง ์์ ๊ฒ์ ๋๋ค :
grad = 1/m * transpose(X * transpose(Theta) - Y)) * X
๊ทธ๊ฒ์ ์ํ ํ๊ธฐ๋ฒ์ด ์ ์ฐฉํ ๊ด์ต์์ ์ ์น์ ์ ์ ์ ๊ฐ๋
์ ์์ ํ ๋ฐ๊ฟ๋๋ค. ์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก Aแต
๋๋ Aแต
์ธ ํ์ ๊ธฐํธ์
๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ๋๋ Julia v.0.6์์ ์๋ํ๋ A'
์ ๋งค์ฐ ๋ง์กฑํฉ๋๋ค. adjoint๊ฐ ์์ฃผ ์ฌ์ฉ๋ฉ๋๊น?
๋ค์์ ํ์ ์๋ ๋ด ์๊ฒฌ์ ๋๋ค.
Aแต or Aแต if the world won't accept unicode operators, let them use transpose(A)
A' close to math notation, easy to type and *especially* easy to read
A^' this could signal `^` not to be parsed as Exponentiation.
A.' conflicts with dotted operator syntax, but at face value OK
A^T or A^t these are pretty good, but what if variable `T` is meant to be an exponent?
A.T same as numpy, same dotted operator collision
t(A) nesting reverses semantics, 3 keystrokes and two of them with shift key.
transpose(A) with no special syntax # please don't do this.
๊ฐ์ธ์ ์ผ๋ก ๋๋ Julia v.0.6์์ ์๋ํ๋
A'
์ ๋งค์ฐ ๋ง์กฑํฉ๋๋ค. adjoint๊ฐ ์์ฃผ ์ฌ์ฉ๋ฉ๋๊น?
์ดํดํ ์ ์์ต๋๋ค. A'
๋ ํญ์ A
์ adjoint์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ผค๋ ์ ์น์ ๋ํด ๊ธฐ๋ณธ ํจ์ ctranspose
๋ฅผ ํธ์ถํ์ง๋ง ๊ธฐ๋ฅ์ ๋ณ๊ฒฝ ์์ด ๋์ผํ ์ฉ์ด adjoint
๋ก ์ด๋ฆ์ ๋ณ๊ฒฝํ์ต๋๋ค.
์ ํ ๋์ํ์ ์ํํ๋ ๊ฒฝ์ฐ ์ด์จ๋ ์ผค๋ ์ ์น๋ฅผ ์ํ ๊ฐ๋ฅ์ฑ์ด ํจ์ฌ ๋์ผ๋ฏ๋ก transpose(A)
A'
๋ฅผ ์
๋ ฅํ๊ฒ ๋ฉ๋๋ค. ๋น๊ณต์ก ์ ์น์ ๋ํ ํน์ ๊ตฌ๋ฌธ์ ์ ์ํ์ง ์๋ ์ธ๊ธฐ๋ (์๋ง๋) ๋ถ๋ถ์ ์ผ๋ก๋ ๋๋ถ๋ถ์ ์ ํ ๋์ํ์์ ๋น๊ณต์ก ์ ์น๋ฅผ ์ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด์ง ์๋ค๋ ์ฌ์ค์ ๋ถ๋ถ์ ์ผ๋ก ๊ธฐ์ธํฉ๋๋ค.
์ ํ ๋์ํ์ ์ํํ๋ ๊ฒฝ์ฐ ...
๋๊ตฌ๊ฐ ๋ง์น๋ผ๋ฉด ... :)
... Julia๊ฐ ์ผ๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ฑ์ฅํ ๊ฐ๋ฅ์ฑ์ ๋ํด ์๊ฐํด์ผ ํฉ๋๋ค.
์๋ ์๋ ์๊ณ ์ ํ ๋์ ๋ฌธ์ ๋ก ๋จ์ ์๋ ์์ต๋๋ค. ์ด๊ฒ์ ์ ์ ๊ฐ์ ํ๋ก๊ทธ๋๋จธ๋ฅผ ์๊ฐํด์ผ ํ๋ ๊ฐ๋ฅ์ฑ์ ๋๋ค. :)
@mahiki , ๋น์ ์ NumPy ์์ ๋๋ค:
import numpy as np
# define matrix X of n columns, with m rows of observations
error = X.dot(Theta.T) - Y
gradient = (1 / m) * (X.dot(Theta.T) - Y).T.dot(X)
Julia๋ก ๋ฌธ์ ๊ทธ๋๋ก ๋ค์๊ณผ ๊ฐ์ด ์์ฑ๋ฉ๋๋ค.
error = X*ฮ' - Y
gradient = (1/m) * (X*ฮ' - Y)' * X
๋๋ ๋ฒกํฐ๊ฐ NumPy ์์ ์ ํ์ด๊ณ Julia์ ์ด์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค.
error = X'ฮ - Y
gradient = (1/m) * (X'ฮ - Y) * X'
๊ทธ๊ฒ์ ๊ทธ๊ฒ์ด ์ป๋๋งํผ ๋ช
ํํ๊ณ ์ํ์ ์ผ๋ก ๋ณด์
๋๋ค. ๋ฐ์ดํฐ๊ฐ ์ค์ ๋ผ๋ฉด adjoint์ transpose๋ ๋์ผํ ์ฐ์ฐ์ด๋ฉฐ, ์ด๊ฒ์ด ์์ transpose๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ํ์ ์ผ๋ก adjoint๋ ์ฌ๋ฐ๋ฅธ ์ฐ์ฐ์
๋๋ค. @ararslan ์ด ๋งํ๋ฏ์ด X'
๋ Julia(๋ฐ Matlab์์๋)์์ ํญ์ adjoint
๋ฅผ ์๋ฏธํ์ต๋๋ค. ์ด์ ์๋ " conjugate transpose "์ ์ค์๋ง๋ก ctranspose
๋ผ๊ณ ๋ถ๋ ธ์ง๋ง ์ฐ์ฐ์์ ์ ์ ์์ฑ์ด
dot(A*x, y) == dot(x, A'y)
์ด๊ฒ์ Hermitian adjoint ์ ์ ์ ์์ฑ์ด์ง๋ง A
๊ฐ ๋ณต์์ ํ๋ ฌ์ผ ๋ ์ผค๋ ์ ์น์ ์ํด ์ถฉ์กฑ๋ฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ "adjoint"๊ฐ ์ด ์ฐ์ฐ์์ ๋ํ ์ฌ๋ฐ๋ฅธ ์ผ๋ฐ ์ฉ์ด์
๋๋ค.
์ฆ, a.'
๊ฐ ๊ตฌ์กฐ์ ์ ์น๋ฅผ ์๋ฏธํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์์์ transpose(a)
๋ฐ a.'
๋ชจ๋์ ํฌํํ์ต๋๋ค. ์์๋๋ก ์๋ํ๋ฉฐ ์ฌ๊ท์ ์ด์ง ์์ ์ผ๋ถ ์ผ๋ฐ ์ฝ๋์์ "์ํ์ ์ผ๋ก ์ ํํ์ง" ์๋๋ผ๋ ์์๋๋ก ์๋ํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํด ๋ณด์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๋๋ค์๊ฒ ์ผ๋ฐ ์ฝ๋์์ conj(a')
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ๋ผ๊ณ ๋งํ๋ ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ ๋ง๋ก ๋จธ๋ฆฌ๋ฅผ ๋ง๋์ผ ํ ํ์๊ฐ ์๋ ๊ฒ์ด ์๋๋ผ ๊ต์ก์ ์ธ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค.
@mahiki ์ด๋ค ์ด์ ๋ก adjoint
transpose
๋ฅผ ์ฝ๋์์ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ $#์ ๋ณ์นญ์ผ๋ก ์ง์ ํ๋ @t
์ ๊ฐ์ ๋ ์งง์ ๋งคํฌ๋ก๋ฅผ ์ ์ํ ์ ์์ต๋๋ค transpose
(์ด ์๋ฃจ์
์ด ์ด์์ ์ด์ง ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ํนํ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ํจ๊ป ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ).
Julia๊ฐ ์ผ๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ฑ์ฅํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ์๊ฐํด์ผ ํฉ๋๋ค.
@Liso77 ๋ฒ์จ ๊ทธ๋ ๊ตฐ์. ๋ง์ ์ ์ค ํ๋์ ๋ถ๊ณผํ Nanosoldier๋ GitHub ์ด๋ฒคํธ๋ฅผ ์์ ๋๊ธฐํ๊ณ ์์ฒญ ์ ์ฑ๋ฅ ๋ฒค์น๋งํฌ๋ฅผ ์คํํ๋ ์น ์๋ฒ๋ฅผ ๋ชจ๋ Julia์์ ์คํํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ํ์ ์ด๋ฉฐ ์ด ์ค๋ ๋๊ฐ ์ฃผ์ ์์ ๋ฒ์ด๋๋ ๊ฒ์ ์ํ์ง ์์ต๋๋ค.
์ซ์๊ฐ ์๋ ๋ฐ์ดํฐ๋ก ์ผ์ข
์ ํ๋ ฌ์ ์ ์นํ๋ ๊ฒฝ์ฐ(์์ ํ ์ ํจํ ์ฌ์ฉ ์ฌ๋ก์) ์ํ์ ์ ์น ํ๊ธฐ๋ฒ์ ์ค์ ๋ก ๋์ ๋ง์ฅ๋์ฒ๋ผ ๋ณด์
๋๋ค. ์ด ๊ฒฝ์ฐ transpose
(๋๋ ํน์ ์๊ตฌ ์ฌํญ์ ๋ฐ๋ผ permutedims
๋ฑ)๊ณผ ๊ฐ์ด ์๊ตฌํ๋ ๋ด์ฉ์ ๋ํด ๋ ๋ช
์์ ์ผ๋ก ์ค๋ช
ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ซ์๊ฐ ์๋ ๋ฐ์ดํฐ๋ก ์ผ์ข ์ ํ๋ ฌ์ ์ ์นํ๋ ๊ฒฝ์ฐ(์์ ํ ์ ํจํ ์ฌ์ฉ ์ฌ๋ก์) ์ํ์ ์ ์น ํ๊ธฐ๋ฒ์ ์ค์ ๋ก ๋์ ๋ง์ฅ๋์ฒ๋ผ ๋ณด์ ๋๋ค.
A.'
๋ ์ผ๋ฐ์ ์ธ ์๋ฏธ์์ ์ค์ ๋ก "์ํ์ ์ ์น ํ๊ธฐ๋ฒ"์ด ์๋๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ์ฐฌ์ฑ ๋๋ ๋ฐ๋์ ๋
ผ๊ฑฐ๊ฐ ์๋๋ผ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
๋๋ @ararslan ์ด ๊ธฐ์กด .'
์ ๋ฐ๋ํ๋ ๊ฒ์ด ์๋๋ผ ์์ฒจ์-T ๊ตฌ๋ฌธ์ ๋์
ํ๋ ๊ฒ์ ๋ฐ๋ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๋์ํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ์ ํ ๋์ํ์ adjoint ๊ฐ๋
์ ์๋ฏธํ๋ค๋ฉด '
๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค(ํ๋ ฌ์ด ์ค์์ธ ๊ฒฝ์ฐ์๋). ๊ทธ๋ฆฌ๊ณ ์ซ์๊ฐ ์๋ ๋ฐ์ดํฐ์ ํ๋ ฌ์ด ์๋ ๊ฒฝ์ฐ ๋ ์ธ๋ฑ์ค๋ฅผ ์นํํ๋ ๊ฒ์ ๋ฌผ๋ก ์๋ฒฝํ๊ฒ ํฉ๋ฒ์ ์ด์ง๋ง ์ด ์ฐ์ฐ์ ์ค์ ๋ก ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์๊ฐํ๋ "์ ์น"๊ฐ ์๋๋ฉฐ ์ํ์ ์์ฒจ์-T ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ช
ํํ ํ๋ ๊ฒ๋ณด๋ค ํผ๋ํ ๊ฐ๋ฅ์ฑ์ด ๋ ํฝ๋๋ค. ์ ์ฒจ์-T ํ๊ธฐ๋ฒ์ด ์ค์ ๋ก ์ ์ ํ ์ ์ผํ ์ํฉ์ ์ธ๋ฑ์ค๋ฅผ ์นํํ๊ณ ์ถ์ง๋ง ์ธ์ ์ ํ ์ฐ์ฐ์๋ฅผ ์ํ์ง ์๋ ์ซ์ ํ๋ ฌ์ด ์๋ ๊ฒฝ์ฐ์
๋๋ค. ๊ทธ๋ฌํ ์ํฉ์ ๋ถ๋ช
ํ ์กด์ฌํ์ง๋ง ์๋ก์ด ๊ตฌ๋ฌธ์ ๋์
ํ๋ ๊ฒ์ ์ ๋นํํ๊ธฐ์๋ ๋๋ฌด ๋๋ฌผ ์ ์์ต๋๋ค.
์ฐธ์กฐ https://github.com/JuliaLang/julia/issues/20978#issuecomment -315902532. ์ต์์!
... ํ์ง๋ง ์ด ์์ ์ ์ค์ ๋ก ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์๊ฐํ๋ "์กฐ์ฎ๊น"์ด ์๋๋๋ค. ...
์ด๊ฒ์ด ๋งค์ฐ ๋น์ ์์ ์ด๋ผ๋ฉด ์ ararslan๊ณผ ๋ค๋ฅธ ๋ง์ ์ฌ๋๋ค์ด transpose(A)
์ฒ ์๋ฒ์ ๋ํด ํฌํ ๋ฅผ ํฉ๋๊น?
@StefanKarpinski @ararslan @ttparker์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๋๋ ์ ํ ๋์ํ ํ ์คํธ๋ก ๋์๊ฐ์ adjoint๋ฅผ ์ฌ๋ฐ๊ฒฌํด์ผ ํ์ต๋๋ค. ๋๋ ๋ณตํฉ ๋ถ์ ์ ์ ๊ทธ๊ฒ์ ๊ฐ์ ธ ๊ฐ๊ณ ์๋ง๋ ์ ๊ทธ๊ฒ์ ๋์น ์ฑ์ง ๋ชปํ์ ๊ฒ์ ๋๋ค.
๋๋ ์ด๊ฒ์ ํ ์ ์๋ค๋ ๊ฒ์ ์ข์ํ๋ค
gradient = (1/m) * (X'ฮ - Y) * X'
๋ด ํผ๋์ ์ฐธ์กฐ ๋ฌธ์, ๋
ผ๋ฌธ, ๊ต๊ณผ์ ๋ฑ์์ 'transpose'(์ ์ฒจ์ T๋ก)์ ๊ด๋ฒ์ํ ์ฌ์ฉ์์ ๋น๋กฏ๋ฉ๋๋ค(์: Andrew Ng์ ์คํ ํฌ๋ CS229 ๊ฐ์ ๋
ธํธ , ์ฌ๊ธฐ์ ํด๋น Julia ์ฝ๋๋ adjoint
๋ฅผ ์์ @StefanKarpinski ์ ๊น๋ํ ์์์. ์ด๊ฒ์ adjoint์ transpose๊ฐ โ์์ ๋์ผํ๊ธฐ ๋๋ฌธ์
๋๋ค (๋ง๋์?) . ์
๋ฐ์ดํธ: ๋ค
์ด์ ๋ด๊ฐ ์ ํธํ๋ ์ ์น ํ๊ธฐ๋ฒ์ ๋
ผ๋ฆฌ์ ์ผ๋ก ์ผ๊ด์ฑ์ด ์๋ ๊ฒ์
๋๋ค. ๋ถ๋ช
ํ .'
๋ ์ ์ผ๋ก ๊ตฌ๋ถ๋ ์ฐ์ฐ์ ๊ตฌ๋ฌธ๊ณผ์ ์ถฉ๋ ๋๋ฌธ์ด ์๋๋ฉฐ ์ ๋์ฝ๋ ์ ์ฒจ์๋ฅผ ์ ์ธํ๊ณ ๋ ์ ์์ ์ธ ํน์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ํน๋ณํ ๊ตฌ๋ฌธ์ด ์๋ transpose(A)
์ ์ด์๊ฐ ์์ต๋๋ค.
transpose
๋ณ์นญ์ ์ง์ ํ๋ ๋ง์ ์กฐ์ฎ๊น ๋งคํฌ๋ก @t
๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ @ttparker ์๋ฃจ์
์ ์ข์ํฉ๋๋ค.
๋ค์ ๋งํ์ง๋ง, ๋๋ ์ค์๋ก ๋ค์๊ณผ ๊ฐ์ด ๋งํ์ต๋๋ค.
transpose(A) with no special syntax # please don't do this.
๋ํ์ ์์ค์ ์ํ ๋ฅ๋ ฅ์ด ๋ถ์กฑํจ์๋ ๋ถ๊ตฌํ๊ณ ์ ์๊ฒฌ์ ์ง์งํ๊ฒ ๋ฐ์์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
( ๋ด๋ก ์์ .)
'
๊ฐ f'
๋ฅผ '(f)
์ ๋งคํํ๋ ์ฌํ ์์ ์ฐ์ฐ์๊ฐ ๋๊ณ ์ถ์ต๋๋ค. ์ฌ๊ธฐ์ Base.:'(x::AbstractMatrix) = adjoint(x)
์ด๊ณ ์ฌ์ฉ์๋ ๋ถ์๋ฌผ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. (์๋ฅผ ๋ค์ด, ์ด๋ค ์ฌ๋๋ค์ f'
๊ฐ df/dt๋ฅผ ์ฐธ์กฐํ๊ธฐ๋ฅผ ์ํ ์ ์์ต๋๋ค.)
0.7์ ๋์
๋ ์ฐ์ฐ์ ์ ๋ฏธ์ฌ๋ฅผ ์ฌ์ฉํ๋ฉด f'แต
๊ฐ 'แต(f)
์ ๋งคํ๋๋ ๊ฒ์ด ์์ฐ์ค๋ฝ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์๊ฐ ์์ ์ ํ์ ์ฐ์ฐ์๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด Base.:'แต(x::AbstractMatrix) = transpose(x)
๋ฐ Base.:'โปยน(x::Union{AbstractMatrix,Number}) = inv(x)
๋ฑ์ ๊ฐ์ง ์ ์์ต๋๋ค.
A'แต
๋ฅผ ์์ฑํ๋ ๊ฒ์ Aแต
๋งํผ ๊นจ๋ํ์ง๋ ์์ง๋ง แต
๋ก ๋๋๋ ๋ณ์ ์ด๋ฆ์ ํ๊ธฐํ ํ์๋ ์์ต๋๋ค.
์ธ๋ป ๋ณด๊ธฐ์๋ ๋ณ๊ฑฐ ์๋ ๊ธฐ๋ฅ์ธ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ์์ฃผ ์๋ฆฌํ ํํ์ ๋๋ค. ์ข์์.
๋์๊ฒ ํฉ๋ฆฌ์ ์ผ๋ก ๋ณด์ธ๋ค. ๊ฐ์ฅ ์ด๋ ค์ด ๋ถ๋ถ์ '
ํจ์์ ์ด๋ฆ์ ์ฐพ๋ ๊ฒ์
๋๋ค. ์ด ๊ฒฝ์ฐ ์ ๋์ฌ ๊ตฌ๋ฌธ์ด ์๋ํ์ง ์์ต๋๋ค.
๊ฐ์ฅ ์ด๋ ค์ด ๋ถ๋ถ์ ' ํจ์์ ์ด๋ฆ์ ์ฐพ๋ ๊ฒ์ ๋๋ค.
apostrophe
? ๋๋ฌด ๋ง ๊ทธ๋๋ก์ผ์ง๋...
์ ๋์ฌ ๊ตฌ๋ฌธ์ด ์๋ํ๋๋ก ํ ์ ์์ต๋๊น(์: ๋ช
์์ ์ธ (')(A)
๊ตฌ๋ฌธ์ผ๋ก?)? ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ https://github.com/JuliaLang ์์ ๋์
ํ if-you-can-define-the-symbol-name-then-you-can-override-its-syntax ๊ท์น์ ์๋ฐํ๋ฏ๋ก ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค.
ํธ์ง: ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
julia> (')(A)
ERROR: syntax: incomplete: invalid character literal
julia> (')(A) = 2
ERROR: syntax: incomplete: invalid character literal
๋ถํํ๋ '
๋ ์๋ณ์ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๊ธฐ ๊ฐ์ฅ ์ด๋ ค์ด ๋ฌธ์ ์ค ํ๋์
๋๋ค. ์๋ํ๋ฉด ์๋ณ์ ์์ฒด์ ์ฐ์ ์์์ ๋งค์ฐ ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ๋ ๋ค๋ฅธ ์ข
๋ฅ์ ์์(๋ฌธ์)๋ฅผ ๋์
ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์๋ฅผ ๋ค์ด, (')'
๋ '
์์ฒด์ ๋ํ ์์ฉ ํ๋ก๊ทธ๋จ์
๋๊น, ์๋๋ฉด ')'
๋ฆฌํฐ๋ด์ด ๋ค๋ฐ๋ฅด๋ ์ด๋ฆฐ ๊ดํธ์
๋๊น?
๋จ๊ธฐ์ ์ผ๋ก๋ ์ค์ฉ์ ์ด์ง ์์ ์ต์
์ค ํ๋๋ ๋ฌธ์ ๋ฆฌํฐ๋ด์ '
๊ฐ์น๊ฐ ์๋ ๊ฒ์ผ๋ก ์ ์ธํ๊ณ ๋์ c"_"
์ ๊ฐ์ ๋ฌธ์์ด ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
'
์์ ์ -์ฝ๋ก ์ด ์ฌ ๋ ์๋ณ์๋ก ๊ตฌ๋ฌธ ๋ถ์ํ์ฌ Base.:'
๊ฐ ์๋ํ๋๋ก ํ๋ฉด ์ด๋ป์ต๋๊น?
๋ฌผ๋ก ํธ์ง: ์๋์, (@__MODULE__).:'(x) = function_body
๋ ์์ฑํ๊ธฐ๊ฐ ์ฝ๊ฐ ๋ฒ๊ฑฐ๋กญ์ง๋ง (x)' = function_body
๋ ๋์ผํ๊ฒ ์๋ํด์ผ ํฉ๋๋ค.(x)'
๋ Base
'
ํธ์ถ์ ๋งคํ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ํ์ฌ ๋ชจ๋์์ '
ํจ์๋ฅผ ์ ์ํ๋ ๊ฒ์ ๋ฒ๊ฑฐ๋กญ์ง๋ง ๊ทธ๋ ๊ฒ ํ ์ด์ ๋ ์์ต๋๋ค.
๋๋ ''
๊ฐ ์๋ณ์ '
๋ก ๊ตฌ๋ฌธ ๋ถ์๋๋๋ก ํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ๊ทธ๋ ์ง ์์ผ๋ฉด ๋น ๋ฌธ์ ๋ฆฌํฐ๋ด(ํ์ฌ ๊ตฌ๋ฌธ ๋ถ์ ์์ค ์ค๋ฅ์)์ผ๋ก ๊ตฌ๋ฌธ ๋ถ์๋์์ ๊ฒ์
๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ''แต
๋ 'แต
๋ฑ์ ์๋ณ์๋ก ๊ตฌ๋ฌธ ๋ถ์๋ฉ๋๋ค.
ํ์ฌ ๊ตฌ๋ฌธ ์ค๋ฅ๊ฐ ์๋ ๋ชจ๋ ๊ฒ์ ์ฌ์ ํ โโ์ด์ ๊ณผ ๊ฐ์ด ๊ตฌ๋ฌธ ๋ถ์๋์ง๋ง(์ 2''
๋ 2 ์ ๋ ๋ฒ ์ ์ฉ๋ ์ ๋ฏธ์ฌ '
2
์
๋๋ค), 2*''
๋ ์ด์ '
๋ ๋ฒ ๊ตฌ๋ฌธ ๋ถ์ํฉ๋๋ค.
a'' === a
ํ์ง๋ง ''(a) === a'
๊ฐ ์๋ค๋ ๊ฒ์ ํผ๋์ค๋ฌ์ด ๊ฒ ๊ฐ์ต๋๋ค. ๋์ Base.apostrophe
๋ฅผ ์ด๋ฆ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋์ ๊ฒ ๊ฐ์ต๋๋ค(๋๋ ์ด์ ์ ์ฌํ ๊ฒ).
ํ๋ ฌ ์ ์น์ ์ง์ ์ ์ธ ๊ด๋ จ์ด ์๋ '
๊ตฌ๋ฌธ์ ๋ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด ํ ๋ก ์ ์๋ก์ด Github ๋ฌธ์ ๋ก ๋๋๋ ๊ฒ์ด ๋ ๋์๊น์?
๋ฌธ์ ๋ฅผ ์๋์ผ๋ก ๋ถํ ํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น, ์๋๋ฉด ๋จ์ํ ์ ๋ฌธ์ ๋ฅผ ์ด๊ณ ์ฌ๊ธฐ์์ ํ ๋ก ์ผ๋ก ์ฐ๊ฒฐํด์ผ ํฉ๋๊น?
ํ์์
์ ์ฒจ์-T ํ๊ธฐ๋ฒ์ด ์ค์ ๋ก ์ ์ ํ ์ ์ผํ ์ํฉ์ ์ธ๋ฑ์ค๋ฅผ ์นํํ๊ณ ์ถ์ง๋ง ์ธ์ ์ ํ ์ฐ์ฐ์๋ฅผ ์ํ์ง ์๋ ์ซ์ ํ๋ ฌ์ด ์๋ ๊ฒฝ์ฐ์ ๋๋ค. ๊ทธ๋ฌํ ์ํฉ์ ๋ถ๋ช ํ ์กด์ฌํ์ง๋ง ์๋ก์ด ๊ตฌ๋ฌธ์ ๋์ ํ๋ ๊ฒ์ ์ ๋นํํ๊ธฐ์๋ ๋๋ฌด ๋๋ฌผ ์ ์์ต๋๋ค.
ํ ๋ก ํ๊ธฐ์๋ ๋๋ฌด ๋ฆ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ธ๊ธํ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํ๋ ํ ๊ฐ์ง ์ฉ๋๋ฅผ ์ง์ ํ๊ณ ์ถ์ต๋๋ค transpose
๊ทธ๊ฒ. (๊ฐ์ธ์ ์ผ๋ก ์ด ํน๋ณํ ์ด์ ๋ก MATLAB๊ณผ julia์์ .'
๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์์๋์ต๋๋ค.)
transpose
๊ฐ ์ฌ๋ฌ ๋ฒ ๋ฐ์ํ๋ ์๋ฅผ ๋ณด์ฌ ๋๋ฆฌ๊ฒ ์ต๋๋ค(์ด ๋ฐฉ๋ฒ์ผ๋ก ํ๋ ๊ฒ์ ํผํ ์ ์์๊น์?)
using LinearAlgebra
# f : Rโฟ โ R
# x โฆ f(x) = xแต * x / 2
f(x) = 0.5 * transpose(x) * x
# Frรฉchet derivative of f
# Df : Rโฟ โ L(Rโฟ, R)
# x โฆ Df(x) : Rโฟ โ R (linear, so expressed via multiplication)
# h โฆ Df(x)(h) = Df(x) * h
Df(x) = transpose(x)
# Complex-step method version of Df
function CSDf(x)
out = zeros(eltype(x), 1, length(x))
for i = 1:length(x)
x2 = copy(x) .+ 0im
h = x[i] * 1e-50
x2[i] += im * h
out[i] = imag(f(x2)) / h
end
return out
end
# 2nd Frรฉchet derivative
# D2f : Rโฟ โ L(Rโฟ โ Rโฟ, R)
# x โฆ D2f(x) : Rโฟ โ Rโฟ โ R (linear, so expressed via multiplication)
# hโ โ hโ โฆ D2f(x)(hโ โ hโ) = hโแต * D2f(x) * hโ
D2f(x) = Matrix{eltype(x)}(I, length(x), length(x))
# Complex-step method version of D2f
function CSD2f(x)
out = zeros(eltype(x), length(x), length(x))
for i = 1:length(x)
x2 = copy(x) .+ 0im
h = x[i] * 1e-50
x2[i] += im * h
out[i, :] .= transpose(imag(Df(x2)) / h)
end
return out
end
# Test on random vector x of size n
n = 5
x = rand(n)
Df(x) โ CSDf(x)
D2f(x) โ CSD2f(x)
# test that the 1st derivative is correct Frรฉchet derivative
xฯต = โeps(norm(x))
for i = 1:10
h = xฯต * randn(n) # random small y
println(norm(f(x + h) - f(x) - Df(x) * h) / norm(h)) # Frรฉchet check
end
# test that the 2nd derivative is correct 2nd Frรฉchet derivative
for i = 1:10
hโ = randn(n) # random hโ
hโ = xฯต * randn(n) # random small hโ
println(norm(Df(x + hโ) * hโ - Df(x) * hโ - transpose(hโ) * D2f(x) * hโ) / norm(hโ)) # Frรฉchet check
end
# Because f is quadratic, we can even check that f is equal to its Taylor expansion
h = rand(n)
f(x + h) โ f(x) + Df(x) * h + 0.5 * transpose(h) * D2f(x) * h
์์ ์ f
๋ฐ Df
๋ transpose
๋ฅผ ์ฌ์ฉํ์ฌ ์ ์๋์ด์ผ ํ๋ฉฐ adjoint๋ฅผ ์ฌ์ฉํด์๋ ์ ๋๋ค๋ ๊ฒ์
๋๋ค.
๋๋ ๋ณต์กํ ๋จ๊ณ ๋ฐฉ๋ฒ์ด ์ค๋ฆฌ์์ ๋งค์ฐ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์ธ์ด๊ฐ ํจ์จ์ ์ธ ๋ด์ฅ ๋ณต์์๋ฅผ ์ง์ํ์ง๋ง ๋๋ฑํ ํจ์จ์ ์ธ Dual
์ซ์ ์ ํ์ ์ ์ํ ์ ์๋ ๊ฒฝ์ฐ ์๋ ๋ฏธ๋ถ์ ์ป๋ ๊ฒ์ ๊น๋ํ ํดํน/ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋๋๊น? ์ ๋ง ๋ฉ์ง ์๋ ๋ฏธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ julia์ ๊ฒฝ์ฐ๋ ๊ทธ๋ ์ง ์์ต๋๋ค.
๋๋ ๋ณต์กํ ๋จ๊ณ ๋ฐฉ๋ฒ ๋์ ์ด์ค ์ซ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋์ํ๊ณ ๊ทธ๊ฒ์ ๋น์ ์ด ๋ง๋ค๊ณ ์๋ ๋งค์ฐ ์ข์ ์ง์ ์ ๋๋ค(์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์ด๋ฏธ ๋ชจ๋ ๋ณต์กํ ๋จ๊ณ ๋ฐฉ๋ฒ ํ๊ฐ๋ฅผ julia์ ์ด์ค ์ซ์ ํ๊ฐ๋ก ๋์ฒดํ์ต๋๋ค). ๊ทธ๋ฌ๋ ๋๋ ์ด๊ฒ์ด ๋ฐ๋ชจ ๋ชฉ์ ์ผ๋ก ํธ๋ฆญ์ ๊ฐ๋ฅด์น๊ณ (์๋ฅผ ๋ค์ด, Julia Con 2018์์ ๋ณต์กํ ๋จ๊ณ ๋ฐฉ๋ฒ์ ๋ํด ์ด์ผ๊ธฐํ๋ Nick Higham ์ฐธ์กฐ), ์ด์์ฑ(์ฆ, ๋ด๊ฐ ๊ฑฑ์ ํ๋ ๋ฐ)์ ์ํ ์ ํจํ ์ฌ์ฉ ์ฌ๋ก๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ณต์์๋ฅผ ์ฌ์ฉํ๋ ์ ์ฝ๋์ MATLAB ๋ฒ์ ์ด ๋ ๊นจ๋ํฉ๋๋ค).
์ค์ ๋ฐฐ์ด๋ณด๋ค ๋ณต์กํ ๋ฐฐ์ด์ ๋ ๋ง์ด ์ฌ์ฉํ๋ ์์ง๋์ด์ ์๋ง๋ ๋ฌผ๋ฆฌํ์์ ์ธ๊ณ์์ ์์ ๋ ์ ์น ์ฐ์ฐ์๊ฐ ์๋ค๋ ๊ฒ์ ์ฝ๊ฐ์ ๊ณ ํต์ ๋๋ค. (๊ณ ์กฐํ ์๊ฐ ์ข ์์ฑ์ ๋ํ ๋ณต์กํ ํ์ด์ ํํ์ ์ฐ๋ฆฌ ๋ถ์ผ์์ ํํ ๋ณผ ์ ์์ต๋๋ค.) ์ ๋ ๊ฐ์ธ์ ์ผ๋ก xH ๋ฐ xT์ numpy ๊ตฌ๋ฌธ์ ์ ํธํ์ง๋ง ์ ์ผํ ๊ณ ๋ ค ์ฌํญ์ ๊ฐ๊ฒฐํจ์ ๋๋ค.
Hermitian ์ ์น์ ๋ํ ์ ์น ์ฐ์ฐ์์ ๋ฐ๋๋ ๋ด ์ฝ๋์์ ์ฝ 1:1์ ๋๋ค. ๋ฐ๋ผ์ ๋น๊ณต์ก ์ ์น๋ ๋์๊ฒ ๋๊ฐ์ด ์ค์ํฉ๋๋ค. ์ ์น์ ๋ง์ ์ฌ์ฉ์ ์ธ์ ์ ์์ฑํ๊ณ ๋ค๋ฅธ ์ฝ๋์์ ์ธํฐํ์ด์ค ๋๋ ํ๋ ฌ ๊ณฑ์ ์ ์ํด ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์กฐ์ ํ๋ ๊ฒ์ ๋๋ค.
์ง๊ธ์ ๋จ์ํ ๋งคํฌ๋ก๋ ํ๋์ ๋ฌธ์ ํจ์๋ฅผ ์คํผ๋ ์ด์ ์ ์ ๊ณตํ๋ ค๊ณ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด์ ๊ธฐ๋ฅ์ธ transpose() ๋๋ permutedims()์ ์์ํ๋ ์ ์ ํ ๊ฒ์ ๋ฌด์์ ๋๊น?
transpose
๋ ์ ํ ๋์ํ์ฉ์ผ๋ก ์ฌ๊ท์ ์ด๋ฉฐ permutedims
๋ ๋ชจ๋ ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ๋น์ฌ๊ท์ ์ผ๋ก ๋ฐฐ์ดํ๊ธฐ ์ํ ๊ฒ์
๋๋ค.
๋น์ ์ด adjoint๋งํผ ์กฐ์ฎ๊น์ ์ฌ์ฉํ๋ค๊ณ ๋งํ๋ ๊ฒ์ด ํฅ๋ฏธ๋กญ์ต๋๋ค. ๋๋ ์์ ๊ณผ ๊ฐ์์ง๋ง ๋๋ถ๋ถ ๋ด ๋ฐ์ดํฐ๊ฐ ์ค์ ์ธ ๊ณณ์์ ์ค์๋ฅผ ํ๋ ๊ฒฝํฅ์ด ์์๊ธฐ ๋๋ฌธ์ ์ ์นํ๋ ๊ฒฝํฅ์ด ์์์ง๋ง ์ค์ ๋ก adjoint๋ ์ฌ๋ฐ๋ฅธ ์ฐ์ฐ์ด์์ต๋๋ค(๋ณต์กํ ๊ฒฝ์ฐ๋ก ์ผ๋ฐํ๋จ - adjoint๋ ๋ด ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ์ฌ๋ฐ๋ฅธ ์ฐ์ฐ์ด์์ต๋๋ค). ๋ฌผ๋ก (๋ง์) ์ ํจํ ์์ธ๊ฐ ์์ต๋๋ค.
์ ๊ธฐ ์ญํ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ๊ฒ์์ ์ข
์ข
๊ณต๊ฐ๊ณผ ๊ฐ์ ๋ฒกํฐ๋ฅผ ์ฌ์ฉํ๊ณ R^n(์ผ๋ฐ์ ์ผ๋ก n=3)์์ ๋ฒกํฐ ์ฐ์ฐ์ ์ฌ์ฉํ๋ ค๊ณ ํฉ๋๋ค. ํนํ transpose
์
๋๋ค. ํธ๋ฆฌ์ ๋ณํ์ ์ทจํ์ต๋๋ค. @mattcbro ๊ฐ ์ด๋ฐ ์ข
๋ฅ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ํด ์ด์ผ๊ธฐํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฆ, ๊ตฌ๋ฌธ ํ ๋ก ์ ์ฝ์ ๋ ๊ฐ์ธ์ ์ผ๋ก ์ฝ๊ฐ ๋ ์ฅํฉํ ๊ตฌ๋ฌธ์ด ํ๋ก๊ทธ๋๋ฐ ์๋๋ ํจ์จ์ฑ์ ๋ฆ์ถ๋ ๊ฒ์ด๋ผ๊ณ ๋ ์์ํ ์ ์๋ค๋ ์๊ฐ์ ์์ฃผ ํฉ๋๋ค. ์๊ณ ๋ฆฌ์ฆ ์์ฒด์ ์ด๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฅ ์์ฐ์ค๋ฝ๊ณ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ๋ํด ์๊ฐํ๋ ๊ฒ์ ํจ์ฌ ๋ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค.
์ ๊ธฐ ์ญํ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ๊ฒ์์ ์ข ์ข ๊ณต๊ฐ๊ณผ ๊ฐ์ ๋ฒกํฐ๋ฅผ ์ฌ์ฉํ๊ณ R^n(์ผ๋ฐ์ ์ผ๋ก n=3)์์ ๋ฒกํฐ ์ฐ์ฐ์ ์ฌ์ฉํ๋ ค๊ณ ํฉ๋๋ค. ๋ณํ.
๋ฐ๋์๋ ์๋๋๋ค. ์ข ์ข ํธ๋ฆฌ์ ์งํญ์์ ์๊ฐ ํ๊ท ์์ ์ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ๋ณต์์ ๋ด์ ์ ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด ยฝโ[๐*ร๐]์ ๋ณต์ ํธ๋ฆฌ์ ๊ตฌ์ฑ์์์ ์๊ฐ ํ๊ท ํฌ์ธํ ํ๋ญ์ค์ด๊ณ ยผฮตโ|๐|ยฒ๋ a์ ๋๋ค. ์๊ฐ ํ๊ท ์ง๊ณต ์๋์ง ๋ฐ๋. ๋ฐ๋ฉด์ Maxwell ์ฐ์ฐ์๋ (์ผ๋ฐ์ ์ผ๋ก) ๋ณต์ ๋์นญ ์ฐ์ฐ์("์ญ์")์ด๋ฏ๋ก ํ๋ ๐(๐ฑ) ๋ฑ์ ๋ํ (๋ฌดํ ์ฐจ์) ๋์์ ๋ํด ๋น๊ณต์ก "๋ด์ "์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ชจ๋ ๊ณต๊ฐ.
๋ง์ต๋๋ค. ์ฒซ ๋ฌธ์ฅ์ ๋จ์ด๊ฐ ์์ฃผ ์์์ง๋ง ๋ถ๋ช ํ ์ ๊ฑฐํ์ต๋๋ค :-).
๊ฑฐ๊ธฐ์ ๊ฐ๊ณ ์ถ๋ค๋ฉด ์ ์๊ธฐ ์์ ์ข ์ข ๊ธฐํ ๋์๋ผ๊ณ ๋ถ๋ฆฌ๋ Clifford Algebraic ๊ณต์์ผ๋ก ํจ์ฌ ๋ ๊ฐ๊ฒฐํ๊ฒ ์์ฑ๋ฉ๋๋ค. ์ด๋ฌํ ๋์ํ์๋ ํนํ ์ฐ๋ ๋ฌธ์ ๋ฅผ ๊ณ ๋ คํ ๋ ์ด๋ก ์ ๊ณต์ํ์ ์ค์ํ ์ญํ ์ ํ๋ ๋ค์ค ์๊ธฐํ์ฑ ๋ฐ ๋ฐ์๋ํ์ฑ์ด ์์ต๋๋ค.
์ด๋ฌํ ๋์ํ์ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๊ฒฐํ ํ๋ ฌ ํํ์ ๊ฐ์ง๋ฉฐ ์ด๋ฌํ ํํ๋ ์ข ์ข ๋ณต์กํ ์ ์น, ์๋ฅด๋ฏธํธ ์ ์น ๋ฐ ์ผค๋ ๋ฅผ ํตํด ์ฝ๊ฒ ๊ณ์ฐ๋ฉ๋๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์์ ์ธ๊ธํ๋ฏ์ด ์ ์น์ ์ฃผ์ ์ฉ๋๋ ์ข ์ข ๋ค๋ฅธ ๋ฐฐ์ด, ๋ค๋ฅธ ์ฝ๋์ ์ธํฐํ์ด์คํ๋๋ก ๋ฐฐ์ด์ ์ ๋ ฌํ๊ณ ํํํ ๋ฐฐ์ด์ ์ฌ๋ฐ๋ฅธ ์ฐจ์์ ๋ํด ์๋ํ๋๋ก ํ๋ ฌ ๊ณฑ์ ์ป๋ ๊ฒ์ ๋๋ค.
๋๋ ๊ฐ์ธ์ ์ผ๋ก xH ๋ฐ xT์ numpy ๊ตฌ๋ฌธ์ ์ ํธํฉ๋๋ค.
์ด์ 1.0์์ ๊ตฌํํ๊ธฐ ์ฝ๊ณ ํจ์จ์ ์ด์ด์ผ ํฉ๋๋ค.
function Base.getproperty(x::AbstractMatrix, name::Symbol)
if name === :T
return transpose(x)
#elseif name === :H # can also do this, though not sure why we'd want to overload with `'`
# return adjoint(x)
else
return getfield(x, name)
end
end
์ด๊ฒ์ ๋๋๋๋ก ์ฝ๊ณ ๊น๋ํฉ๋๋ค. ๋จ์ ์ getproperty
์ ์ง๊ต ์ฌ์ฉ์ด ์๋ก ๊ตฌ์ฑ๋์ง ์๋๋ค๋ ๊ฒ์
๋๋ค. ๋ฐ๋ผ์ ํน์ ํ๋ ฌ ์ ํ์ getproperty
๋ฅผ ๊ตฌํํ๋ ์ฌ๋์ ์์ผ๋ก ์ผ๋ฐ ๋์์ ๊ตฌํํด์ผ ํฉ๋๋ค.
getproperty์ ์ง๊ต ์ฌ์ฉ์ ๊ตฌ์ฑ๋์ง ์์ต๋๋ค.
ํ . ์ด๊ฒ์ด xT "should"๊ฐ getproperty(x, Val(:T))
๋ก ๋ฎ์์ก๋ค๋ ๊ฒ์ ์๋ฏธํ๋์ง ๊ถ๊ธํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ๊ฐ๋ํ ์ปดํ์ผ๋ฌ์๊ฒ ๋ฌด์์ ํ ๊ฒ์ธ์ง ์๊ฐํ๋ฉด ๋ชธ์๋ฆฌ๋ฅผ ์น๋ค.
๋ชจ๋ ์ฌ๋์ด ์์ ์ ์๊ฒฌ์ ๊ฐ๊ณ ์๋ค๊ณ ํ์ ํฉ๋๋ค. ํ์ง๋ง ๋์๊ฒ๋ ์ ๊ตฌ๋ฌธ์ผ๋ก ์ผ๋ฐ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ด๋ ต๋ค๋ ๊ฑฐ์ ํน์ง์ ๋๋ค. ์คํดํ์ง ๋ง์ธ์. ๋ช ๋ช ๋ ํํ๊ณผ ์ ์ฌํ ๊ตฌ์กฐ ๋ฑ์ ์ ์ํ๋ ๋ฐ ์ ๋ง ์ข์ ๊ธฐ๋ฅ์ด๋ฉฐ ํ๋ฅญํฉ๋๋ค.
(๋ํ Val
๋์คํจ์น ๋ ์ด์ด๋ฅผ ์ ํ์ ๋งค์ฐ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์์ต๋๋ค.)
@c42f ์ ์ฝ๋๋ ๋งค๋ ฅ์ฒ๋ผ ์๋ํฉ๋๋ค. ๋ถํํ๋ ์ ๋ ๋ฒ์ 0.64 ์ด์์์ ์๋ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ค๊ณ ํ๊ณ ์์ต๋๋ค. ์ด๋ก ์ธํด ์ ์น ๋๋ ์ ๊ฐ ์ ์ํ ํจ์ T(A) = transpose(A)๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์๋ง๋ ๋งคํฌ๋ก๊ฐ ์กฐ๊ธ ๋ ๊นจ๋ํ๊ณ ์ฝ๊ฐ ๋ ํจ์จ์ ์ด์์ ๊ฒ์ ๋๋ค.
๋ช
ํํ ํ์๋ฉด, ์ด ํน์ getproperty
๋ฅผ ์ ์ํ๋ ๊ฒ์ด ์ฌ์ฉ์ ์ฝ๋์ ์ข์ ์์ด๋์ด๋ผ๊ณ ์ ์ํ๋ ๊ฒ์ ์๋๋๋ค. ์ฅ๊ธฐ์ ์ผ๋ก ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค ;-) ์ธ์ ๊ฐ๋ Base
x.T
๊ฐ ์ ์๋ โโ์ ์๋ ๊ฒฐ๊ณผ์ ๋ํด ์ถฉ๋ถํ ๋๋ ์ ์์ ๊ฒ์
๋๋ค.
๊ทธ๋ฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ผ๋ฐ ์ธํฐํ์ด์ค์์ "๊ฒํฐ"๋ฅผ ์ ์ํ๊ธฐ ์ํ ์ด๋ฌํ ์ข
๋ฅ์ ์์ฑ ์ฌ์ฉ์ด ์ค์ ๋ก ๋์ ์ด์ ๊ฐ ๊ถ๊ธํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ผ๋ฐ ํ๋ getter ํจ์๋ ํ์ฌ getproperty
๋ฅผ ํ๋ช
ํ๊ฒ ์ฌ์ฉํ๋ฉด ๊ฐ๋จํ ํด๊ฒฐ๋๋ ์์ฒญ๋๊ฒ ํฐ ๋ค์์คํ์ด์ค ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. MyModule.A(x)
, get_my_A(x)
์ ๊ฐ์ ๋ ๊ธธ๊ณ ๋ชป์๊ธด ํจ์ ์ด๋ฆ์ ์์ฑํ๊ฑฐ๋ ์ฌ์ฉ์๋ก๋ถํฐ ๋งค์ฐ ์ผ๋ฐ์ ์ธ ์ด๋ฆ A
์ ๋ด๋ณด๋ด๋ ๊ฒ๋ณด๋ค x.A
๋ฅผ ์์ฑํ๋ ๊ฒ์ด ํจ์ฌ ์ข์ต๋๋ค. ๊ธฐ์ค ์น์. ๋ด๊ฐ ๋ณด๋ ์ ์ผํ ๋ฌธ์ ๋ .A
๊ฐ ์ํผ ์ ํ์์ ์ผ๋ฐ์ ์ผ๋ก ์ ์๋๋ ๊ฒ๊ณผ ๋
๋ฆฝ์ ์ผ๋ก ํ์ ์ ํ์ ๋ํด .B
์ ์๋ฏธ๋ฅผ ์ฌ์ ์ํ ์ ์๋ ์์๋๋ ๊ธฐ๋ฅ์
๋๋ค. ๋ฐ๋ผ์ Val
์ ๋ํ ๋ฐ์ฏค ์ง์งํ ์๊ฒฌ์
๋๋ค.
์ฌ๋ฏธ์๋ ์์ด๋์ด:
julia> x'ฬ
ERROR: syntax: invalid character "ฬ"
์ด ์บ๋ฆญํฐ๋ T
์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ ๋ก๋ ๊ทธ ์์ ๋ง๋๊ฐ ์๋ '
์
๋๋ค. ์ฌ๊ฐํ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง...
์, GitHub์์๋ ๊ทธ๋ ๊ฒ ๋ณด์ ๋๋ค. ํ์ง๋ง ์ค๋ฒ๋ฐ์ ๋๋ค. ๋ด ํฐ๋ฏธ๋ ์ผ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๊ธฐ:
๋๋ฌด ๋๋ํ๊ณ ๊ท์ฝ๋ค. ๋๋ ์ฌ์ ํ ๊ฒฐํฉ ๋ฌธ์๋ฅผ ์ข์ํ๊ณ 'แต
๊ฐ ์ข๋ค๊ณ ์๊ฐํฉ๋๋ค.
-100 to ๋ณ๊ฒฝ adjoint, Julia ์ฝ๋ ์์ฑ์ ์ํ ์์ฑ๋งํผ ๋ช ํํ๊ฒ ๋ง๋๋ ๋ฉ์ง ๊ฒ ์ค ํ๋์ ํ๋ฌ์ค ์ผค๋ ์ ์น ์ผ๋ฐ์ ์ผ๋ก ์ํ๋ ๊ฒ์ด๋ฏ๋ก ์ถ์ฝ๋ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด๋ฐ ๋ง์๋ ์ด๋ ์ ๋ ์ค๋งํจ์ด ์์ต๋๋ค. ์ ํํ ๋น์จ์ ๊ฐ๋ฐ์๊ฐ adjoint()
๋ฅผ ๋ช
์์ ์ผ๋ก _์ํ์ง ์์ง๋ง_ transpose()
_ํ์ํฉ๋๋ค.
๊ธฐ๋ณธ '
์ฐ์ฐ์๋ฅผ ๋ชจ๋ธ๋งํ๊ธฐ ์ํ ๊ธฐํธ ๊ณ์ฐ์ผ๋ก ์์
ํ๋ ๊ฒฝ์ฐ์ ์์ ์ ์๋ฅผ ๋ค์ด ์์ฌ ์ญ (A'*A)\(A
*b) ๋๋ 2์ฐจ ํ์ v'*A*v
์ด ์๋ชป ๋ฐํ๋๋ ์์ธ์ด ๋ฉ๋๋ค. ์ค์ผ ์ ์๋ ๊ธธ๊ณ ๋ณต์กํ ๊ฒฐ๊ณผ.
์๋ฃจ์
์ '
์ ์๋ฏธ๋ฅผ ์ ์ธํ๋ ์ผ์ข
์ ์ปดํ์ผ๋ฌ ์ง์๋ฌธ์ผ ์ ์์ต๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
tr(A)
๊ฐ ํ๋ ฌ ์ ์น๋ฅผ ์๋ฏธํ๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๋ ฅํ๊ฒ ๋ฐ๋ํฉ๋๋ค. ๋ชจ๋ ์ฌ๋๋ค์ ์ด๊ฒ์ด ํ๋ ฌ ์ถ์ ์ ์๋ฏธํ๋ค๊ณ ์๊ฐํ ๊ฒ์ ๋๋ค: https://en.wikipedia.org/wiki/Trace_ (linear_algebra)