Julia: ์ „์น˜์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๊ตฌ๋ฌธ

์— ๋งŒ๋“  2017๋…„ 03์›” 15์ผ  ยท  103์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: JuliaLang/julia

์ด์ œ .op ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ op .' ๊ฐ€ ' (adjoint, ์ผ๋ช… ctranspose ). ์ด ๋ฌธ์ œ๋Š” ์ „์น˜ ๋ฐ/๋˜๋Š” adjoint์— ๋Œ€ํ•œ ๋Œ€์ฒด ๊ตฌ๋ฌธ์„ ๋…ผ์˜ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

linear algebra parser

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

tr(A) ๊ฐ€ ํ–‰๋ ฌ ์ „์น˜๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์„ ๋งค์šฐ ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋ฐ˜๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์€ ์ด๊ฒƒ์ด ํ–‰๋ ฌ ์ถ”์ ์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค: https://en.wikipedia.org/wiki/Trace_ (linear_algebra)

๋ชจ๋“  103 ๋Œ“๊ธ€

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_ ํ›„ํ–‰ ์œ„ ์ฒจ์ž๋ฅผ ํ›„์œ„ ์—ฐ์‚ฐ์ž๋กœ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ฝ”๋“œ ์ถ”์ถœ
screenshot from 2017-11-09 22-08-25

์ด ์‹œ์ ์—์„œ ๋ชจ๋“  ์œ„ ์ฒจ์ž๋ฅผ ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๋‹จ์ง€ T ๋ฅผ ์›ํ•˜๊ณ  ๋ฏธ๋ž˜์— ๋ช‡ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ฒƒ์„ ์›ํ•  ๋•Œ ๊ทธ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์–ด๋ฆฌ์„์€ ์ผ๊ด€์„ฑโ€ฆ

์˜ˆ, ์ „์น˜์— .' ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•ฝ๊ฐ„ ์ผ๊ด€์„ฑ์ด ์—†์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€ ์ œ์•ˆ๋œ ๋ชจ๋“  ๋Œ€์•ˆ์€ ๋” ๋‚˜์œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. " .' ๋Š” ์ „์น˜, ์  ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ทœ์น™์˜ ์˜ˆ์™ธ"๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ด ์„ธ์ƒ์—์„œ ๊ฐ€์žฅ ๋‚˜์œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋ฐฐ์šฐ๊ณ  ๊ณ„์† ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

.' ๊ฐ€ ์  ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ๊ฒƒ์— ๋Œ€ํ•œ ์ž ์žฌ์ ์ธ ํ˜ผ๋™์— ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ํ•œ ๊ฐ€์ง€ ์œ ์˜ํ•  ์ ์€ ์ ‘๋‘์‚ฌ ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…์ด op. ์ด๊ณ  ์ค‘์œ„๊ฐ€ .op ์ธ ๋ฐ˜๋ฉด ์ ‘๋ฏธ์‚ฌ ์—ฐ์‚ฐ์ž๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” . ๊ฐ€ ์ ‘๋ฏธ์‚ฌ์ผ ๋•Œ ๋ธŒ๋กœ๋“œ์บ์ŠคํŠธ๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ‘๋ฏธ์‚ฌ . ์˜ ๋‹ค๋ฅธ ์šฉ๋„๋Š” ํ•„๋“œ ์กฐํšŒ์ด๋ฉฐ getfield(x, ') ๋Š” ์˜๋ฏธ๊ฐ€ ์—†์œผ๋ฏ€๋กœ ๋‹ค๋ฅธ ์˜๋ฏธ์™€ ๊ตฌ๋ณ„๋ฉ๋‹ˆ๋‹ค.

(์ฆ‰, ๋‚˜๋Š” $ .' transpose(x) ๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.)

@stevengj ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋“ฑ๋ก๋œ ํŒจํ‚ค์ง€์—์„œ .' ์˜ 600๊ฐœ ์ด์ƒ์˜ ์‚ฌ์šฉ ์ค‘ ๋งŽ์€ (์•„๋งˆ๋„ ๋Œ€๋ถ€๋ถ„) ๊ฐ€๋…์„ฑ์— ๋Œ€ํ•œ ๋น„์šฉ ์—†์ด ' ๋กœ ๋Œ€์ฒด๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ฝ”๋“œ ๊ณ„์† ์ผํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ธ๊ธฐ๊ฐ€ ์—†์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์ ‘๋ฏธ์‚ฌ " ๋ฐ ` ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

'์˜ ์šฉ๋„ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋“ฑ๋ก๋œ ํŒจํ‚ค์ง€์—์„œ ๊ฐ€๋…์„ฑ์— ๋Œ€ํ•œ ๋น„์šฉ ์—†์ด '๋กœ ๋Œ€์ฒด๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ฝ”๋“œ๋Š” ๊ณ„์† ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

#23424 ๊ฐ€ ๋„์ฐฉํ•˜๋ฉด ๋ฌธ์ž์—ด ๋ฐฐ์—ด ๋“ฑ์— transpose ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ adjoint ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. x.' ์˜ ์„ ํ˜• ๋Œ€์ˆ˜ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ๋ชจ๋ฒ” ์‚ฌ๋ก€๋Š” ์•„๋งˆ๋„ conj(x') ์™€ ๊ฐ™์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(์ด๊ฒƒ์ด ๊ฒŒ์œผ๋ฅธ, ์ฆ‰ ๋ฌด๋ฃŒ์ž„). ๊ฐ„๊ฒฐํ•จ์„ ์œ„ํ•ด .' ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•˜์ง€๋งŒ ์ด๋ฅผ ์ œ๊ฑฐํ•˜๋ฉด ์„ ํ˜• ๋Œ€์ˆ˜ํ•™ ์‚ฌ์šฉ์ž๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ณ  ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด ์‚ฌ์šฉ์ž๊ฐ€ ์ฒ ์ž๋ฒ• transpose ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ์ „ํžˆ ์ ‘๋ฏธ์‚ฌ "์™€ `?

transpose() ์— ๋Œ€ํ•œ ์ƒˆ ๊ตฌ๋ฌธ์€ ๋‹ค์†Œ ์‹œ๊ธฐ์ƒ์กฐ์ž…๋‹ˆ๋‹ค. IMHO ํ•„์š”์— ๋”ฐ๋ผ conj(x') ๋ฐ transpose ๋กœ ์ œ์•ˆํ•œ ๋Œ€๋กœ .' ๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” .' ์ด matlab์—์„œ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค๋Š” ๋Š๋‚Œ์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ฃผ๋กœ "๋ชจ๋“  ๊ฒƒ์ด ํ–‰๋ ฌ์ด๋‹ค"๋ผ๋Š” matlab์˜ ์ฃผ์žฅ๊ณผ ๋‹ค์–‘ํ•œ ์œ„์น˜์— ๋ฌด์ž‘์œ„ ์ „์น˜๋ฅผ ์‚ฝ์ž…ํ•ด์•ผ ํ•˜๋Š” ์ผ๊ด€๋œ ์Šฌ๋ผ์ด์‹ฑ ๊ทœ์น™์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ผ์„ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

์—ฌ๊ธฐ์—์„œ ์ฃผ์žฅ์„ ์š”์•ฝํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. .' ๋Š” ์ด์ œ "์ ์œผ๋กœ ๊ตฌ๋ถ„๋˜์ง€ ์•Š์€ ์—ฐ์‚ฐ์ž๋ฅผ ์š”์†Œ๋ณ„๋กœ ์ ์šฉ"์„ ์˜๋ฏธํ•˜์ง€ ์•Š๋Š” ์  ์—ฐ์‚ฐ์ž๋กœ์„œ ์œ ์ผํ•˜๊ฒŒ ๋ˆˆ์— ๋•๋‹ˆ๋‹ค. Matlab์—์„œ ์˜ค์ง€ ์•Š๋Š” ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž๋Š” ์ด๊ฒƒ์ด ๋†€๋ผ์šด ํ•จ์ •์ž„์„ ์•Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  2. .' ๋Š” ์ด์ œ ์‚ฌ์‹ค์ƒ ๋ชจํ˜ธํ•ฉ๋‹ˆ๋‹ค. 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 ํŒจํ‚ค์ง€๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์—ฌ๊ธฐ์—์„œ ๊ฐ€์žฅ ์ข‹์€ ๊ฒƒ์„ ์ฐพ๋Š” ๋ฐ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ ์ด ๊ตฌ๋ฌธ ์ œํ•œ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์‹๋ณ„์ž์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— ์ˆซ์ž ์ƒ์œ„ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • superindex 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.

๋‚˜๋Š” ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ์ ‘๋ฏธ์‚ฌ ' ๊ฐ€ ์ธ์ ‘ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ์ ‘๋ฏธ์‚ฌ .' ๊ฐ€ ์ฐจ์„ ์ฑ…์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ๋น„์žฌ๊ท€์ (๊ตฌ์กฐ์ ) ์ „์น˜๊ฐ€ ์žฌ๊ท€์  ์ „์น˜๋ณด๋‹ค ๋” ์œ ์šฉํ•˜๋‹ค๋Š” ๋ฐ ๋™์˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ž, ๋ชจ๋‘๊ฐ€ ๋™์˜ํ•˜๋Š” ์š”์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. adjoint(a) a' ์‚ฌ์šฉ
  2. (non-)conjugate adjoint์— 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 ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋กœ๋Š” ๊ทธ ์œ„์— ๋ง‰๋Œ€๊ฐ€ ์žˆ๋Š” ' ์ž…๋‹ˆ๋‹ค. ์‹ฌ๊ฐํ•œ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ...

screen shot 2018-09-10 at 11 29 56

์˜ˆ, GitHub์—์„œ๋„ ๊ทธ๋ ‡๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์˜ค๋ฒ„๋ฐ”์ž…๋‹ˆ๋‹ค. ๋‚ด ํ„ฐ๋ฏธ๋„ ์‡ผ์— ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ๊ธฐ:

screen shot 2018-09-10 at 10 31 24 am

๋„ˆ๋ฌด ๋˜‘๋˜‘ํ•˜๊ณ  ๊ท€์—ฝ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ๊ฒฐํ•ฉ ๋ฌธ์ž๋ฅผ ์ข‹์•„ํ•˜๊ณ  'แต€ ๊ฐ€ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

-100 to ๋ณ€๊ฒฝ adjoint, Julia ์ฝ”๋“œ ์ž‘์„ฑ์„ ์ˆ˜ํ•™ ์ž‘์„ฑ๋งŒํผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฉ‹์ง„ ๊ฒƒ ์ค‘ ํ•˜๋‚˜์— ํ”Œ๋Ÿฌ์Šค ์ผค๋ ˆ ์ „์น˜ ์ผ๋ฐ˜์ ์œผ๋กœ ์›ํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ถ•์•ฝ๋œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ง์—๋Š” ์–ด๋Š ์ •๋„ ์˜ค๋งŒํ•จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ํ•œํ•œ ๋น„์œจ์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ adjoint() ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ _์›ํ•˜์ง€ ์•Š์ง€๋งŒ_ transpose() _ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ' ์—ฐ์‚ฐ์ž๋ฅผ ๋ชจ๋ธ๋งํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐํ˜ธ ๊ณ„์‚ฐ์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ฒฝ์šฐ์™€ ์š”์ ์€ ์˜ˆ๋ฅผ ๋“ค์–ด ์˜์‚ฌ ์—ญ (A'*A)\(A *b) ๋˜๋Š” 2์ฐจ ํ˜•์‹ v'*A*v ์ด ์ž˜๋ชป ๋ฐ˜ํ™˜๋˜๋Š” ์›์ธ์ด ๋ฉ๋‹ˆ๋‹ค. ์ค„์ผ ์ˆ˜ ์—†๋Š” ๊ธธ๊ณ  ๋ณต์žกํ•œ ๊ฒฐ๊ณผ.

์†”๋ฃจ์…˜์€ ' ์˜ ์˜๋ฏธ๋ฅผ ์„ ์–ธํ•˜๋Š” ์ผ์ข…์˜ ์ปดํŒŒ์ผ๋Ÿฌ ์ง€์‹œ๋ฌธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰