Julia: ๋ฒกํ„ฐ ์ „์น˜๋ฅผ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด ๊ธฐ

์— ๋งŒ๋“  2013๋…„ 11์›” 10์ผ  ยท  417์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: JuliaLang/julia

@alanedelman์—์„œ :

๋ฒกํ„ฐ์˜ ์ „์น˜๊ฐ€ ๋‹ค์–‘ํ•œ A_*op*_B* ๋ฉ”์†Œ๋“œ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์‹ ์ค‘ํ•˜๊ฒŒ ์ƒ๊ฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์œ ํ˜•๊ณผ ์ถ”์•…ํ•œ ์ˆ˜ํ•™์„ ํ”ผํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด vector'vector yielding a vector (# 2472, # 2936), vector 'yielding a matrix, vector' 'yielding matrix (# 2686)๋Š” ๋ชจ๋‘ ์ž˜๋ชป๋œ ์ˆ˜ํ•™์ž…๋‹ˆ๋‹ค.

์ €์—๊ฒŒ ์ˆ˜ํ•™์ ์œผ๋กœ ํšจ๊ณผ๊ฐ€์žˆ๋Š” ๊ฒƒ์€ (์ƒˆ๋กœ์šด ์œ ํ˜•์„ ๋„์ž…ํ•˜์ง€ ์•Š์Œ) 1 ์ฐจ์› Vector v .

  • v' ์€ ์•„๋ฌด ์ž‘์—…๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (์ฆ‰, v ๋ฐ˜ํ™˜).
  • v'v ๋˜๋Š” v'*v ๋Š” ์Šค์นผ๋ผ์ž…๋‹ˆ๋‹ค.
  • v*v' ๋Š” ํ–‰๋ ฌ์ด๊ณ 
  • v'A ๋˜๋Š” v'*A (์—ฌ๊ธฐ์„œ A ๋Š” AbstractMatrix )๋Š” ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ _N_ ์ฐจ์› ์ „์น˜๋Š” ์ธ๋ฑ์Šค์˜ ์ˆœ์„œ๋ฅผ ๋ฐ˜๋Œ€๋กœํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๊ฐ€ ํ•˜๋‚˜ ์ธ ๋ฒกํ„ฐ๋Š” ์ „์น˜์—์„œ ๋ถˆ๋ณ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ v' ๋Š” ๋ถ„๋ฆฌ๋˜์–ด ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ ํ–‰๋ ฌ-๋ฒกํ„ฐ ๊ณฑ๊ณผ ํ–‰๋ ฌ-ํ–‰๋ ฌ ๊ณฑ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์˜ˆ๋Š” ์ผค๋ ˆ ๊ธฐ์šธ๊ธฐ, Rayleigh ๋ชซ ๋“ฑ์— ์‚ฌ์šฉ๋˜๋Š” ์Œ ์„ ํ˜• ํ˜•์‹ v'A*w ๋ฐ 2 ์ฐจ ํ˜•์‹ v'A*v ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด Transpose{Vector} ์œ ํ˜•์„ ๋„์ž…ํ•˜๋Š” ์œ ์ผํ•œ ์ด์œ ๋Š” ๋ฐ˜ ๋ณ€์„ฑ ๋ฒกํ„ฐ์™€ ๊ณต ๋ณ€์„ฑ ๋ฒกํ„ฐ์˜ ์ฐจ์ด๋ฅผ ๋‚˜ํƒ€ ๋‚ด๊ธฐ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

arrays breaking design linear algebra

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

BAM

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

์˜ˆ๋ฅผ ๋“ค์–ด vector'vector yielding a vector (# 2472, # 2936), vector 'yielding a matrix, vector' 'yielding matrix (# 2686)๋Š” ๋ชจ๋‘ ์ž˜๋ชป๋œ ์ˆ˜ํ•™์ž…๋‹ˆ๋‹ค.

์œ ํ•œ ์ฐจ์› ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์ด์ค‘ ์ด์ค‘์€ ๋™์ผํ•˜์ง€ ์•Š๊ณ  ๋™ํ˜•์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋‚˜์œ ์ˆ˜ํ•™์ธ์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ธ๊ฐ„์˜ ๋‘๋‡Œ๋Š” ๊ทธ๋Ÿฐ ์ข…๋ฅ˜์˜ ๋ฏธ๋„๋Ÿฝ๊ณ  ๋ชจํ˜ธํ•œ ๊ฒƒ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ์ผ์„ํ•˜๋Š” ๋ฐ ๋Šฅ์ˆ™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜ํ•™์—์„œ ๋™ํ˜• ์ธ ๊ฒƒ ์‚ฌ์ด์˜ ๊ตฌ๋ณ„์— ๋Œ€ํ•ด ๊ด‘ํƒ์ด ๋‚˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ด๊ฒƒ์ด ๊ฐœ์„ ๋˜์–ด์•ผํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ ์ˆ˜ํ•™์ ์œผ๋กœ ๋ถ€์ •ํ™•ํ•ด์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ์งœ์ฆ๋‚˜ ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

v' == v ํ•˜์ง€๋งŒ v'*v != v*v ์–ด๋–ป๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? x' * y ๊ฐ€ ์ž์ฒด ์—ฐ์‚ฐ์ž๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ๋ณด๋‹ค ๋” ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์œ ํ•œ ์ฐจ์› ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์ด์ค‘ ์ด์ค‘์€ ๋™์ผํ•˜์ง€ ์•Š๊ณ  ๋™ํ˜•์ž…๋‹ˆ๋‹ค.

(์ง€๊ธˆ ๋‚˜ ์ž์‹ ์œผ๋กœ ๋งํ•˜๋ฉด์„œ) ๊ทธ๊ฒƒ์€ ๋‹จ์ˆœํ•œ ๋™ํ˜•์ด ์•„๋‹ˆ๋ผ ์ž์—ฐ์ ์œผ๋กœ ๋™ํ˜•์ž…๋‹ˆ๋‹ค. ์ฆ‰ ๋™ํ˜•์€ ๊ธฐ๋ณธ ์„ ํƒ๊ณผ ๋ฌด๊ด€ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๋™ํ˜•๊ณผ ์ •์ฒด์„ฑ์„ ๊ตฌ๋ณ„ ํ•  ๊ฐ€์น˜๊ฐ€์žˆ๋Š” ์‹ค์šฉ์ ์ธ ์‘์šฉ์„ ์ƒ๊ฐํ•  ์ˆ˜ ์—†๋‹ค. IMO์˜ ์„ฑ๊ฐ€์‹ฌ ์š”์ธ์€ ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๊ตฌ๋ณ„์—์„œ ๋น„๋กฏ๋ฉ๋‹ˆ๋‹ค.

x' * y ๊ฐ€ ์ž์ฒด ์—ฐ์‚ฐ์ž๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ๊ฒƒ๋ณด๋‹ค ๋” ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๊ฒƒ์ด ์ œ๊ฐ€ ์˜ค๋Š˜ ์˜คํ›„ @alanedelman๊ณผ์˜ ํ† ๋ก ์—์„œ ์–ป์€ ์ธ์ƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

Jeff๊ฐ€ ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์ด ๋ˆ์— ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๊ทธ ์–ด๋Š ๋•Œ๋ณด ๋‹ค ๊ฐ๊ฐ.

@stefan๊ณผ ํญ๋ ฅ์ ์œผ๋กœ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์œ ์ˆ˜ํ•™์€ ์˜๋ฏธ๊ฐ€ ์•„๋‹ˆ๋ผ ์ž˜๋ชป๋œ ์ˆ˜ํ•™์ด์—ˆ์Šต๋‹ˆ๋‹ค.
์„ฑ๊ฐ€์‹  ์ˆ˜ํ•™์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ ์˜ณ์ง€ ๋งŒ ๊ทธ๋‹ค์ง€ ์ข‹์ง€ ์•Š์€ ๊ฒƒ๋“ค์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค ....

์ด ๋…ผ๋ฆฌ๋กœ ๊ฐ€๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ์„ ํƒ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

x_x๋Š” ์˜ค๋ฅ˜๋กœ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค. ..... ์•„๋งˆ๋„ "์ ์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ์ œ์•ˆ๊ณผ ํ•จ๊ป˜
๋˜๋Š” x_x๋Š” ๋‚ด์ ์ž…๋‹ˆ๋‹ค (์ €๋Š” ๊ทธ ์„ ํƒ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)

x ์™€ x' ๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ (x')*y ๊ฐ€ dot(x,y) ๋ฅผ ์˜๋ฏธํ•˜๋„๋กํ•˜๋ ค๋Š” ๊ฒฝ์šฐ x*y ๋„ dot(x,y) ์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค x'y ์™€ x'*y ๋ฅผ ๋‹ค๋ฅธ ์ž‘์—…์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๊ฒŒ ์ข‹์€ ์ƒ๊ฐ์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ์ด๊ฒƒ์„ ๋ช…๋ฐฑํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ด„ํ˜ธ๋กœ ๋ฌถ๊ณ  ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด์ ์„ ์˜๋ฏธํ•˜๋Š” x*x ๋ฅผ ํ—ˆ์šฉํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋˜๋Œ์•„ ๊ฐˆ ์ˆ˜ ์—†๋‹ค๋Š” ์ ์„ ์ง€์ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ชจ๋“  ๊ณณ์—์„œ ์‚ฌ๋žŒ๋“ค์˜ ์ฝ”๋“œ์— ๋“ค์–ด๊ฐˆ ๊ฒƒ์ด๊ณ  ๊ทธ๊ฒƒ์„ ๊ทผ์ ˆํ•˜๋Š” ๊ฒƒ์€ ์•…๋ชฝ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ, ์ž์—ฐ ๋™ํ˜• ์ด๊ฑด ์•„๋‹ˆ๊ฑด, ์ด๊ฒƒ์€ ์ˆœ์ˆ˜ํ•œ ์ˆ˜ํ•™์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์ปดํ“จํ„ฐ์˜ ๋‹ค๋ฅธ ๊ฒƒ๋“ค์ด ๋‹ค๋ฅด๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋‹ค๋ฃจ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋‚ด๊ฐ€ ์ข‹์•„ํ•˜๋Š” "up tuples"์™€ "down tuples"๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ์‹ค์งˆ์ ์ธ ๋…ผ์˜์ž…๋‹ˆ๋‹ค.

http://mitpress.mit.edu/sites/default/files/titles/content/sicm/book-ZH-79.html# % _idx_3310

์„ฑ๊ฐ€์‹  ์‚ฌ๋žŒ๋“ค์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด "๋ฒกํ„ฐ"๋ฐ "์ด์ค‘"๊ณผ ๊ฐ™์€ ๋‹จ์–ด๋Š” ์กฐ์‹ฌ์Šค๋Ÿฝ๊ฒŒ ํ”ผํ•ฉ๋‹ˆ๋‹ค. ํŽธ๋„ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ ์šฉ์ด ๋งค๋ ฅ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

http://mitpress.mit.edu/sites/default/files/titles/content/sicm/book-ZH-79.html# % _sec_Temp_453

M[1,:] ์™€ M[:,1] ๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์ด์œ ๋Š” ํ˜„์žฌ ๋ฐฉ์†ก ๋™์ž‘์ด ๋งค์šฐ ํŽธ๋ฆฌํ•œ ๋™์ž‘์„ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. M./sum(M,1) ๋Š” ์—ด ํ™•๋ฅ  ์ ์ด๋ฉฐ M./sum(M,2) ๋Š” ํ–‰ ํ™•๋ฅ  ์ ์ž…๋‹ˆ๋‹ค. . norm ํ•จ์ˆ˜๋ฅผ "๊ณ ์ •"ํ•˜์—ฌ ํ–‰๊ณผ ์—ด์— ๋Œ€ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์‰ฝ๊ฒŒ ํ—ˆ์šฉํ•˜๋ฉด ์ •๊ทœํ™”์— ๋Œ€ํ•ด์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก , ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ์œ„์•„๋ž˜ ๋ฒกํ„ฐ ๋Œ€์‹  sum(M,1) ๋ฐ sum(M,2) ๋ฐ˜ํ™˜ ํ–‰๋ ฌ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ์•ฝ๊ฐ„ ๋ฒ—์–ด๋‚œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์œ„์•„๋ž˜ ๋ฒกํ„ฐ์˜ ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์™„์ „ํžˆ ๋ฏธ์นœ ๊ฒƒ์ด ์•„๋‹Œ ๋ฐฉ์‹์œผ๋กœ ๋” ๋†’์€ ์ฐจ์›์œผ๋กœ ์ผ๋ฐ˜ํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜๋Š” ๋ฒกํ„ฐ๋ฅผ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ๋„ ์ž˜๋ชป๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์œ„ / ์•„๋ž˜๊ฐ€ ๋ณ„๋„์˜ ์ด๋ก  ์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜ํ™”์— ๋Œ€ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ค‘์ฒฉ ๊ตฌ์กฐ๋กœ ๋ณด์ด๋ฉฐ ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด ๋ฒกํ„ฐ๋ผ๊ณ  ๋ถ€๋ฅด์ง€ ์•Š๋Š” ์ด์œ ๊ฐ€์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ x*y = dot(x,y) ๋Š” x*(y*z) ๋Œ€ (x*y)*z ์—์„œ์™€ ๊ฐ™์ด * ๋น„์—ฐ ๊ด€์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์ •๋ง๋กœ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์˜ˆ. ๋‚˜์—๊ฒŒ ๊ทธ๊ฒƒ์€ ์™„์ „ํžˆ ์šฉ๋‚ฉ ํ•  ์ˆ˜์—†๋Š” ์ผ์ž…๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์ ์œผ๋กœ ๋ถ€๋™ ์†Œ์ˆ˜์  * ์€ (๋Š”) ๋น„์—ฐ ๊ด€์ ์ด์ง€๋งŒ ๊ฑฐ์˜ ์—ฐ๊ด€์„ฑ์ด์žˆ๋Š” ๋ฐ˜๋ฉด ์ด๊ฒƒ์€ ๋ช…๋ฐฑํ•˜๊ฒŒ ๋น„์—ฐ ๊ด€์ ์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ ๋ชจ๋‘๋Š” x*x ์ด ๋‚ด์ ์ด๋˜์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

v'w ์™€ v'*w ๋ฅผ ๋‚ด์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์€ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.
์ €๋Š”์ด ๋ฐฉ์‹์ด ์ •๋ง ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค.

@JeffBezanson ๊ณผ ๋‚˜๋Š” ์ฑ„ํŒ…์„ํ–ˆ๋‹ค

์ œ์•ˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

v' ๋Š” ๋ฒกํ„ฐ์— ๋Œ€ํ•œ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค (์ด๊ฒƒ์€ mathematica๊ฐ€ํ•˜๋Š” ์ผ์ž…๋‹ˆ๋‹ค).
v'w ๋ฐ v'*w ๋Š” ๋‚ด์  (๊ฒฐ๊ณผ = ์Šค์นผ๋ผ)์ž…๋‹ˆ๋‹ค.
v*w ๋Š” ์™ธ์  ํ–‰๋ ฌ (๊ฒฐ๊ณผ = ํ–‰๋ ฌ)์ž…๋‹ˆ๋‹ค.

ํ–‰ ๋ฒกํ„ฐ์™€ ์—ด ๋ฒกํ„ฐ๋Š” ๊ตฌ๋ถ„๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์–ด์จŒ๋“  ์ด๊ฒƒ์„ ์ข‹์•„ํ–ˆ๋‹ค
mathematica์˜ ์„ ๋ก€๋ฅผ๋ณด๊ณ  ๊ธฐ๋ปค์Šต๋‹ˆ๋‹ค
Mathematica์—์„œ : http://reference.wolfram.com/mathematica/tutorial/VectorsAndMatrices.html
Mathematica๊ฐ€ ๋ชฉ๋ก์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ธํ•ด "ํ–‰"๋ฒกํ„ฐ์™€ "์—ด"๋ฒกํ„ฐ๋ฅผ ๊ตฌ๋ถ„ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๋Š” ํ–‰ ๋ฒกํ„ฐ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„์•ผํ•ฉ๋‹ˆ๋‹ค. .... ๊ธฐ๊ฐ„.

๋”ฐ๋ผ์„œ M ์ด ํ–‰๋ ฌ์ด๋ฉด

M[1,:]*v ๋Š” ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ..... ( M[1,:] ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ์Šค์นผ๋ผ
๊ฒฝ๊ณ ๋Š” dot ๋˜๋Š” '* ๋˜๋Š” M[i:i,:] ์‹œ๋„๋ฅผ ์ œ์•ˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

M[[1],:]*v ๋˜๋Š” M[1:1,:]*v ๋Š” ๊ธธ์ด๊ฐ€ 1 ์ธ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค (์–ด์จŒ๋“  julia์˜ ํ˜„์žฌ ๋™์ž‘์ž…๋‹ˆ๋‹ค).

https://groups.google.com/forum/#!topic/julia -users / L3vPeZ7kews์˜ ๋ฐ€์ ‘ํ•œ ๊ด€๋ จ ๋ฌธ์ œ์— ๋Œ€ํ•ด

Mathematica๋Š” ์Šค์นผ๋ผ์™€ ์œ ์‚ฌํ•œ ๋ฐฐ์—ด ์„น์…˜์„ ์••์ถ•ํ•ฉ๋‹ˆ๋‹ค.

m = Array[a, {2, 2, 2}] 


Out[49]= {{{a[1, 1, 1], a[1, 1, 2]}, {a[1, 2, 1], 
   a[1, 2, 2]}}, {{a[2, 1, 1], a[2, 1, 2]}, {a[2, 2, 1], a[2, 2, 2]}}}

In[123]:= Dimensions[m]
Dimensions[m[[All, 1, All]]]
Dimensions[m[[2, 1, All]]]
Dimensions[m[[2, 1 ;; 1, All]]]

Out[123]= {2, 2, 2}

Out[124]= {2, 2}

Out[125]= {2}

Out[126]= {1, 2}

[ํŽธ์ง‘ : ์ฝ”๋“œ ์„œ์‹ โ€“ @StefanKarpinski]

์•ˆ๋…•ํ•˜์„ธ์š”.

M [1 ,:]์ด ์Šค์นผ๋ผ๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด

M [1 ,:]์ด ๋‹จ์ง€ ๋ฒกํ„ฐ๋ผ๋Š” ๋œป์ธ๊ฐ€์š”?

๋„ค ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ๋งˆ์Œ์€ M [1 ,:]์ด ์Šค์นผ๋ผ 1์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค. :-)

Mathematica๋Š” ๋ณ„ํ‘œ * ๋Œ€์‹  ๋งˆ์นจํ‘œ . ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ ์ „์ฒด 9 ์•ผ๋“œ๋ฅผ ์ด๋™ํ•˜์—ฌ (vector. vector)๋ฅผ ์Šค์นผ๋ผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
๋ณ„ํ‘œ์™€ ํ•จ๊ป˜.

์˜์‹ฌ ํ•  ์—ฌ์ง€์—†์ด์ด ๊ธฐ๊ฐ„์—๋Š” ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜๋Š”
๋‚ด์ ์˜ "์ "์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š”
์ ์˜ "์  ๋‹จ์œ„ ์—ฐ์‚ฐ"ํŒ๋…,

์œ ๋‹ˆ ์ฝ”๋“œ๋Š” "์  ์—ฐ์‚ฐ์ž"๋ผ๋Š” ์ด๋ฆ„์˜ ๋ฌธ์ž๋ฅผ ๋งค์šฐ ๋ฉ‹์ง€๊ฒŒ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
โ‹… (char(8901)) ์šฐ๋ฆฌ๊ฐ€ ์ƒ์ƒํ•  ์ˆ˜์žˆ๋Š” ์ œ์•ˆ

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” (v โ‹… w) ๊ฐ€ (v'*w) ์™€ ๋™์˜์–ด๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์•ฝํ•˜์ž๋ฉด ํ˜„์žฌ ํ† ๋ก  ์ฃผ์ œ๋Š”

  1. ์Šค์นผ๋ผ ์ธ๋ฑ์‹ฑ์€ ์ฐจ์›์„ ์ฃฝ์ž…๋‹ˆ๋‹ค.
    A[i,:] ๋Š” A[:,i,j] ๊ทธ๋Œ€๋กœ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.
  2. ๋ฒกํ„ฐ ์ธ๋ฑ์‹ฑ์ด ๋‘๊ป์Šต๋‹ˆ๋‹ค.
    A[ i:i , : ] ๋˜๋Š” A[ [i], : ] ๋Š” ํ–‰์ด ํ•˜๋‚˜ ์ธ ํ–‰๋ ฌ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  3. v'w ๋˜๋Š” v'*w ๋Š” ๋ฒกํ„ฐ์˜ ๋‚ด์  (์™ธ์ ์˜ ๊ฒฝ์šฐ v*w' ๊ณผ ์œ ์‚ฌ ํ•จ)์ž…๋‹ˆ๋‹ค.
  4. v' ๋Š” ๋ฒกํ„ฐ์— ๋Œ€ํ•ด ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค (์‚ฌ์šฉ์ž๋ฅผ permutedims(v,1) ????๋กœ ๊ฐ€๋ฆฌํ‚ด).
  5. v*A ๋Š” A๊ฐ€ ํ–‰๋ ฌ์ด๋ฉด ๋ฒกํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  6. vโ‹…w ๋„ ๋‚ด์ ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค (๊ทธ๋Ÿฌ๋‚˜ ํ–‰๋ ฌ ์ž‘์—…์„ ํ†ตํ•ด mathematica์˜ . ๋งŒํผ ๋ฉ€๋ฆฌ ๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  7. v*w ๋Š” ๋ฒกํ„ฐ์— ๋Œ€ํ•ด ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ข‹์€ ์ œ์•ˆ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฒฝ๊ณ ๊ฐ€ ํ‘œ์‹œ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    โ‹…

๊ฒฐ๊ณผ๋Š”

ใ…. ๋ชจ๋“  ๋ฒกํ„ฐ๋ฅผ ์—ด ๋ฒกํ„ฐ๋กœ ๊ณ ์ˆ˜ํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
๋น„. ๋ชจ๋“  ๊ฒƒ์„ ํ–‰๋ ฌ๋กœ ๋งŒ๋“ค๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ํ™•์‹คํžˆ ์ž‘๋™ํ•˜๋ฉฐ ๋ชจ๋“  ๊ฒƒ์„ ํ–‰๋ ฌ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์‰ฝ์Šต๋‹ˆ๋‹ค.
์”จ. ๋‹น์‹ ์˜ ๋งˆ์Œ์ด ํ–‰ ๋ฒกํ„ฐ์™€ 1 ํ–‰ ํ–‰๋ ฌ์„ ๊ตฌ๋ณ„ ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด, ๋‹น์‹ ์€ ๊ต์œก์„๋ฐ›์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ •์ค‘ํ•˜๊ณ  ์šฐ์•„ํ•˜๊ฒŒ
๋””. ์ด ์  ํ‘œ๊ธฐ๋ฒ• โ‹… ์€ ๋ˆˆ์— ์พŒ์ ํ•ฉ๋‹ˆ๋‹ค

์ œ์•ˆ 5) ๋‚˜์—๊ฒŒ ๋งค์šฐ ์ด์ƒํ•˜๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค. ์ €๋Š” v'*A ์„ ํ˜ธํ•˜๋ฏ€๋กœ ์ด์ค‘ ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Œ์„ ๋ถ„๋ช…ํžˆ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด์ค‘์ด ๋‹จ์ˆœํ•œ "๋ชจ์–‘"๋ณ€ํ™˜์ด ์•„๋‹Œ ๋ณต์žกํ•œ ๋ฒกํ„ฐ ๊ณต๊ฐ„์—์„œ ํŠนํžˆ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š”์ด ๋ชจ๋“  ๊ฒƒ์—์„œ ์šฐ๋ฆฌ์˜ ๊ฐ„๊ฒฐํ•œ ๋ฐฉ์†ก ํ–‰๋™์„ ์žƒ๋Š” ๊ฒƒ์ด ์˜คํžˆ๋ ค ๋ถˆํ–‰ ํ•  ๊ฒƒ์ด๋ผ๊ณ  v ๋ฅผ ์ทจํ•˜๊ณ  ํ–‰๋ ฌ A ์˜ ์—ด์„ ํ•ด๋‹น ๊ฐ’์œผ๋กœ ์ •๊ทœํ™”ํ•˜๋Š” ๊ฐ„๊ฒฐํ•œ ๊ตฌ๋ฌธ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ํ˜„์žฌ A ./ v' ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฐ์ดํ„ฐ ์กฐ์ž‘์— ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค.

์ข‹์€ ์งˆ๋ฌธ

๋‚ด ๊ณ„ํš์€ v์˜ ๋ณต์žกํ•œ ์ผค๋ ˆ๋ฅผ ์ทจํ•˜๊ณ  A๋กœ ๋‹ค์ค‘ํ™”ํ•˜๋Š” ๊ฒƒ์„ v'*A ๋ฐฐ์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ œ๊ฐ€ ์•„์ง ๋ช…์‹œ ์ ์œผ๋กœ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์‰ฝ๊ฒŒ

์šฐ๋ฆฌ๋Š” 5๋ฅผ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
์•„๋งˆ๋„ ๊ทธ๊ฒƒ์€ ๋ฐ”๋žŒ์งํ•˜๋‹ค
๋‚ด ์—ด ๋ฒกํ„ฐ ๊ทœ์น™์„ ์ค€์ˆ˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐฉ์†ก์— ๋Œ€ํ•œ ์ด๋Ÿฐ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๊ท€์—ฝ๊ณ  ์–ด์„คํ”ˆ
์ด์ œ ํ•˜๋‚˜์˜ ์†”๋ฃจ์…˜์€ A ./ v[:,[1]]

์–ด๋Š ์ฐจ์›์—์„œ ๋ฐฉ์†ก๋˜๊ณ  ์žˆ๋Š”์ง€ ๋ฌธ์„œํ™”ํ•˜๋Š” ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋” ๋†’์€ ์ฐจ์›์˜ ๋ฐฐ์—ด๋กœ ์ผ๋ฐ˜ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์•„ ๊ทธ๋ฆฌ๊ณ  v[:,[1]] ์†”๋ฃจ์…˜์€ ๋ณต์žกํ•œ ์ผค๋ ˆ๋ฅผ ์ทจํ•˜์ง€ ์•Š๋Š” ๋ฏธ๋•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์•„๋งˆ๋„ ์‚ฌ์šฉ์ž๊ฐ€ ์˜๋„ ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค .....

์ฒซ ๋ฒˆ์งธ๋Š” LINEAR ALGEBRA ์˜ˆ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์—์ด ๋‘ ์˜ˆ์ œ๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.
๋ณต์žกํ•œ ์ผค๋ ˆ๊ฐ€ ๋งค์šฐ ์ž์ฃผ ํ•„์š”ํ•˜์ง€๋งŒ ๋‘ ๋ฒˆ์งธ ์˜ˆ๋Š”
๋ชจ๋“  ์ฐจ์›์—์„œ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๋‹ค์ฐจ์› ๋ฐ์ดํ„ฐ ์˜ˆ์ œ
ํ–‰๋ ฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ณต์žกํ•œ ์ผค๋ ˆ๋ฅผ ์›ํ•˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.

โ‹… ์—๋Š” # 552๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ง€๋‚œ 2 ์ฃผ ๋™์•ˆ ์„ธ ๋ฒˆ์งธ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

M [1 ,:]๊ณผ M [:, 1]์„ ๊ตฌ๋ณ„ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ์ด์œ ๋Š” ํ˜„์žฌ ์šฐ๋ฆฌ์˜ ๋ฐฉ์†ก ๋™์ž‘์ด ๋งค์šฐ ํŽธ๋ฆฌํ•œ ๋™์ž‘์„ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. M./sum(M,1)์€ ์—ด ํ™•๋ฅ  ์ ์ด๋ฉฐ M./sum(M, 2) ํ–‰ ํ™•๋ฅ  ์ ์ž…๋‹ˆ๋‹ค. ํ–‰๊ณผ ์—ด์„ ์‰ฝ๊ฒŒ ์ ์šฉ ํ•  ์ˆ˜ ์žˆ๋„๋ก norm ํ•จ์ˆ˜๋ฅผ "๊ณ ์ •"ํ•˜๋ฉด ์ •๊ทœํ™”์— ๋Œ€ํ•ด์„œ๋„ ๋™์ผํ•˜๊ฒŒ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ sum (M, 1) ๋ฐ sum (M, 2)์ด ์œ„์•„๋ž˜ ๋ฒกํ„ฐ ๋Œ€์‹  ํ–‰๋ ฌ์„ ๋ฐ˜ํ™˜ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์•ฝ๊ฐ„ ๋ฒ—์–ด๋‚œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฐฉ์†ก ๋™์ž‘์ด ์ข‹์€ ํŽธ์ด๊ธดํ•˜์ง€๋งŒ, ๊ทธ ์—ฌ๋ถ„์˜ ์œ ๋‹›์„ ์ž์ฃผ ์งœ ๋‚ด์•ผํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ์Šคํ…œ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์ด ๋” ์ข‹์œผ๋ฉด ์–ด๋Š ์ •๋„ ๋ฐ˜๋Œ€์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค (๊ทธ๋ฆฌ๊ณ  ์Šค์นผ๋ผ ์ฐจ์›์ด ๋–จ์–ด์ง€๋ฉด ์‹œ์Šคํ…œ์ด ๋” ์ข‹์•„์งˆ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค). ๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

julia> widen(A::AbstractArray,dim::Int) = reshape(A,insert!([size(A)...],dim,1)...)
# methods for generic function widen
widen(A::AbstractArray{T,N},dim::Int64) at none:1

M ./ widen(sum(M,2),2) ๋˜๋Š” A ./ widen(v,1) ์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค (์œ„์˜ @blakejohnson ์˜ˆ์ œ ์ฐธ์กฐ).

M [:, 0 ,:] ๋ฐ v [:, 0] ?????

๋‚˜๋Š” ๊ฐ์†Œ ๋ฌธ์ œ์— ๋Œ€ํ•ด @blakejohnson ๊ณผ ๋” ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฐœ์ธ์ ์œผ๋กœ๊ฐ€ ๋ช…ํ™•ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ squeeze ๋ณด๋‹ค๋Š” ์น˜์ˆ˜ widen ๊ทธ๋“ค. ๋‚˜๋Š” widen ๊ฐ€ ํ‘œ์‹œ๋œ ์ธ๋ฑ์Šค ๋˜๋Š” ๊ทธ ๋’ค์— ์ฐจ์›์„ ์‚ฝ์ž…ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌธ์„œ๋ฅผ ๊ณ„์† ์‚ดํŽด๋ณด๊ณ ์žˆ์„ ๊ฒƒ์ด๋ฉฐ, ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ์ฐจ์›์„ ๋„“ํžˆ๋ ค๋ฉด ๋ฒˆํ˜ธ ๋งค๊ธฐ๊ธฐ๊ฐ€ ์กฐ๊ธˆ ๋” ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. (๋ฒกํ„ฐ v widen(v, (1, 2)) ๋Œ€ํ•œ squeeze ๋Œ€ํ•œ ๋ฌธ์ œ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™•๋Œ€ํ•˜๋“  ์ถ•์†Œํ•˜๋“  ๊ด€๊ณ„์—†์ด Julia๋Š” ํ™•์žฅ์— ๊ด€ํ•ด์„œ๋Š” numpy์˜ ์„ ๋‘๋ฅผ ๋”ฐ๋ผ์•ผํ•˜๊ณ  v[:, newaxis] ์™€ ๊ฐ™์€ ๊ฒƒ์„ ํ—ˆ์šฉํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์น˜์ˆ˜๋ฅผ ๋ฒ„๋ฆฌ๋Š” ๋Œ€์‹  ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ, ์ž˜๋ชป๋œ ๋ฐฉ๋ฒ•์„ ๋ˆŒ๋ €์„ ๋•Œ (์ผ๋ฐ˜์ ์œผ๋กœ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ ํ•จ)๋ณด๋‹ค ์‹ค์ˆ˜๋กœ ์ž˜๋ชป๋œ ๋ฐฉ๋ฒ•์„ ํ™•์žฅ ํ•œ ๋ฒ„๊ทธ๋ฅผ ์žก๋Š” ๊ฒƒ์ด ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

@alanedelman ๋ชฉ๋ก์—์„œ
๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋Š๋‚€๋‹ค

v * A๋Š” A๊ฐ€ ํ–‰๋ ฌ์ด๋ฉด ๋ฒกํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ข‹์ง€ ์•Š๋‹ค.

A๊ฐ€ 1x1 (์ธ๋ฑ์Šค ๋ฒ”์œ„ ๋ถˆ์ผ์น˜)์ด ์•„๋‹ˆ๋ฉด v_A๋Š” ์˜ค๋ฅ˜ ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค.
v'_A๋Š” ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ๋ฒกํ„ฐ v๋ฅผ nx1 ํ–‰๋ ฌ๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (ํ•„์š”ํ•œ ๊ฒฝ์šฐ).
v '๋ฅผ ํ•ญ์ƒ 1xn ํ–‰๋ ฌ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค (๋ฒกํ„ฐ ๋˜๋Š” nx1 ํ–‰๋ ฌ๋กœ ๋ณ€ํ™˜ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค)
๋˜ํ•œ 1x1 ํ–‰๋ ฌ์„ ์Šค์ผ€์ผ๋Ÿฌ ๋ฒˆํ˜ธ๋กœ ์ž๋™ ๋ณ€ํ™˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (ํ•„์š”ํ•œ ๊ฒฝ์šฐ).

๋‚˜๋Š” ์ด๊ฒƒ์ด ์„ ํ˜• ๋Œ€์ˆ˜์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋Š” ์ผ๊ด€๋˜๊ณ  ๊ท ์ผ ํ•œ ๋ฐฉ์‹์„ ๋‚˜ํƒ€๋‚ธ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (์ข‹์€ ์ˆ˜ํ•™)

์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ฌธ์ œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ผ๊ด€๋œ ๋ฐฉ๋ฒ•์€ ์ž๋™ (์œ ํ˜•?) ๋ณ€ํ™˜ (ํ•„์š”ํ•œ ๊ฒฝ์šฐ)์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํฌ๊ธฐ (n), (n, 1), (n, 1,1), (n, 1,1,1) ๋“ฑ์˜ ๋ฐฐ์—ด ์‚ฌ์ด (ํฌ๊ธฐ๊ฐ€ (n, 1) ๋ฐ (1, n) ์ธ ๋ฐฐ์—ด ์‚ฌ์ด๋Š” ์•„๋‹˜) )
(ํ•„์š”ํ•  ๋•Œ ์‹ค์ˆ˜๋ฅผ ๋ณต์†Œ์ˆ˜๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.)

์ด ๊ฒฝ์šฐ ํฌ๊ธฐ (1,1)์˜ ๋ฐฐ์—ด์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (ํ•„์š”ํ•œ ๊ฒฝ์šฐ) (# 4797 ์ฐธ์กฐ).

Xiao-Gang (๋ฌผ๋ฆฌํ•™ ์ž)

์ด๊ฒƒ์€ v'_A๋ฅผ ๋‚จ๊ฒจ ๋‘์ง€ ๋งŒ .... ๋‚˜๋Š” v'_A * w๊ฐ€ ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ์ •๋ง๋กœ ์›ํ•ฉ๋‹ˆ๋‹ค

์ค„๋ฆฌ์•„์˜ ์„ ํ˜• ๋Œ€์ˆ˜์— ๋Œ€ํ•œ ๋‚ด ์ธ์ƒ์€ ์Šค์นผ๋ผ์™€ ์‹ค์ œ ๋ฒกํ„ฐ๊ฐ€ ์กด์žฌํ•˜์ง€๋งŒ (์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!) ํ–‰๋ ฌ ๋Œ€์ˆ˜์ฒ˜๋Ÿผ ๋งค์šฐ ์กฐ์งํ™”๋˜์–ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

x*y*z*w ์™€ ๊ฐ™์€ ์ œํ’ˆ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๊ฐ ์š”์†Œ๋Š” ์Šค์นผ๋ผ, ๋ฒกํ„ฐ ๋˜๋Š” ํ–‰๋ ฌ ์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ „์น˜๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋ ฌ ๋Œ€์ˆ˜๋Š” ํ–‰๋ ฌ์˜ ํฌ๊ธฐ๊ฐ€ n x m ์ธ ํ–‰๋ ฌ์˜ ๊ณฑ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์€์ด ์ •์˜๋ฅผ ํ™•์žฅํ•˜์—ฌ n ๋˜๋Š” m ์„ absent ๋กœ ๋Œ€์ฒดํ•˜์—ฌ ์ œํ’ˆ์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•œ 1์˜ ๊ฐ’์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋„๋กํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. , ๊ทธ๋Ÿฌ๋‚˜ ํ–‰๋ ฌ๊ณผ ์Šค์นผ๋ผ ๋ฐ ๋ฒกํ„ฐ๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์Šค์นผ๋ผ๋Š” absent x absent
  • (์—ด) ๋ฒกํ„ฐ๋Š” n x absent
  • ํ–‰ ๋ฒกํ„ฐ๋Š” absent x n

์ด์ƒ์ ์œผ๋กœ๋Š” ํ–‰ ๋ฒกํ„ฐ๋ฅผ ํ‘œํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ๋ฐฐ์—ดํ•˜๊ณ  ์‹ถ์ง€๋งŒ x'*y ๋ฐ x*y' ๊ฐ™์€ ์—ฐ์‚ฐ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ์šฐ๋ฆฌ ์ค‘ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ฐพ๊ณ ์žˆ๋Š” ๊ณ„ํš์˜ ๋ง›์ด๋ผ๋Š” ๋Š๋‚Œ์„ ๋ฐ›๋Š”๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๊ณ„ํš์—์„œ ํ–‰ ๋ฒกํ„ฐ๋ฅผ ๊ธˆ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋†’์€ ๋น„์šฉ์„ ์ดˆ๋ž˜ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์˜์‹ฌํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ : ์ค‘๊ฐ„ ๋‹จ๊ณ„์—์„œ ํ–‰ ๋ฒกํ„ฐ๊ฐ€ ํ˜•์„ฑ๋˜์ง€ ์•Š๋„๋ก ์ œํ’ˆ์„ ๊ด„ํ˜ธ๋กœ ๋ฌถ๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ( a ๋Š” ์Šค์นผ๋ผ, u ๋ฐ v ๋Š” ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค)

a*u'*v = a*(u'*v) // a*u' is forbidden
v*u'*a = (v*u')*a // u'*a is forbidden

ํ–‰ ๋ฒกํ„ฐ ์ƒ์„ฑ์„ ํ”ผํ•˜๋ฉด์„œ ์ œํ’ˆ x*y'*z ์„ ํ‰๊ฐ€ํ•˜๋ ค๋ฉด ๊ณฑ์…ˆ ์ˆœ์„œ๋ฅผ ์„ ํƒํ•˜๊ธฐ ์ „์— ์š”์ธ ์œ ํ˜•์„ ์•Œ์•„์•ผํ•ฉ๋‹ˆ๋‹ค! ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ํ•ด์•ผํ•œ๋‹ค๋ฉด ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์žฅ์• ๊ฐ€๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Julia๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž๋™์œผ๋กœ ์ •์ƒ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ณฑ์…ˆ ์ˆœ์„œ๋ฅผ ๋ฏธ๋ฆฌ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š” ๋˜ ๋‹ค๋ฅธ ์ด์œ  : ํ•„์š”ํ•œ ์—ฐ์‚ฐ ์ˆ˜๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด *(x,y,z,w) ์˜ ์ตœ์  ํ‰๊ฐ€ ์ˆœ์„œ๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•ด ๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‚ฌ์šฉํ•˜๋Š” ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ–‰ ๋ฒกํ„ฐ ํ˜•์„ฑ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ˆ˜ํ–‰ํ•˜๋Š” ๋ชจ๋“  ์ž‘์—…์ด์ด๋ฅผ ๋ฐฉํ•ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

์กฐ์˜ฎ๊น€์€ ๋ชจ๋“œ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํŠน๋ณ„ํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. v ๊ฐ€ ๋ฒกํ„ฐ ์ธ v.' ๋ฅผ ํ—ˆ์šฉํ•˜๋ฉด permutedims(v,[2 1]) ๋Š” ๋˜‘๊ฐ™์€ ๊ฒƒ์„ ๋ฐ˜ํ™˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ํŠน์ˆ˜ ํ–‰ ๋ฒกํ„ฐ ์œ ํ˜•์„ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ์ƒˆ ์ฐจ์›์„ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์œ ํ˜•์˜ ๋ชจ๋“œ -n ๋ฒกํ„ฐ (์˜ˆ : permutedims([1:4],[3 2 1]) ๋ฌด์—‡์„ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๊ธฐ ์ „์— ๋‹ค ์„ ํ˜• ๋Œ€์ˆ˜๋„ ๊ณ ๋ คํ•ด ๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

@toivoh๊ฐ€ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

"ํ•œ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์€ n ๋˜๋Š” m์ด ๋ถ€์žฌ๋กœ ๋Œ€์ฒด ๋  ์ˆ˜ ์žˆ๋„๋ก์ด ์ •์˜๋ฅผ ํ™•์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ œํ’ˆ์„ ๊ณ„์‚ฐํ•˜๋Š” ํ•œ 1์˜ ๊ฐ’์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜์ง€๋งŒ ์Šค์นผ๋ผ์™€ ๋ฒกํ„ฐ๋ฅผ ํ–‰๋ ฌ๊ณผ ๊ตฌ๋ณ„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  1. ์Šค์นผ๋ผ๋Š” ๋ถ€์žฌ x ๋ถ€์žฌ
  2. (์—ด) ๋ฒกํ„ฐ๋Š” nx๊ฐ€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  3. ํ–‰ ๋ฒกํ„ฐ๋Š” xn "์ด ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์ค‘ ์„ ํ˜• ๋Œ€์ˆ˜ (๋˜๋Š” ๋†’์€ ๋žœ๋“œ ํ…์„œ์˜ ๊ฒฝ์šฐ)์—์„œ ์œ„์˜ ์ œ์•ˆ์€
๋ฒ”์œ„ 1์˜ ๋งŽ์€ ์ธ๋ฑ์Šค, ์ฆ‰ ํฌ๊ธฐ (m, n, absent)๋Š” (m, n), (m, n, 1), (m, n, 1,1) ๋“ฑ์— ํ•ด๋‹น ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

absent์— ๋Œ€ํ•œ์ด ํ•ด์„์„ ์‚ฌ์šฉํ•˜๋ฉด 1.๊ณผ 2.๋Š” ๊ดœ์ฐฎ๊ณ  ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด ์ข‹์ง€๋งŒ 3.์€ ๊ดœ์ฐฎ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํฌ๊ธฐ๊ฐ€ (1, n)๊ณผ (1,1, n) ์ธ ๋ฐฐ์—ด์„ ํ˜ผํ•ฉํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ…์„œ ์ด๋ก ์˜ ์ „๋ฌธ๊ฐ€๋Š” ์•„๋‹ˆ์ง€๋งŒ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ์‹ค์งˆ์ ์ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์œ„ํ•ด ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ๋ชจ๋“  ์‹œ์Šคํ…œ (์• ๋“œ์˜จ ํŒจํ‚ค์ง€์—†์ด)์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

[TL; DR : ์š”์•ฝ์œผ๋กœ ๊ฑด๋„ˆ ๋›ฐ๊ธฐ]

๋‹ค์Œ์€ ์ผ๋ฐ˜์ ์ธ ํ–‰๋ ฌ-๋ฒกํ„ฐ ์—ฐ์‚ฐ๋ณด๋‹ค ๋ฐฐ์—ด ์ฒ˜๋ฆฌ์—์„œ ๋” ํฐ ์ผ๋ฐ˜์„ฑ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌ ํ•œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค.

(1) ํ•จ์ˆ˜ ๋ถ„์„ : ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฒกํ„ฐ ๊ฐ’ ํ•จ์ˆ˜์˜ ํ—ค์„ธ ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•˜๋Š” ์ฆ‰์‹œ ์ž‘๋™ํ•˜๋ ค๋ฉด ๊ณ ์ฐจ ํ…์„œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜ํ•™์„ ๋งŽ์ด ์ž‘์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— ํŠน์ˆ˜ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒƒ์€ ํฐ ๊ณ ํ†ต์ž…๋‹ˆ๋‹ค.

(2) ํ‰๊ฐ€ ์ œ์–ด : ์˜ˆ๋ฅผ ๋“ค์–ด ๊ณ„์‚ฐํ•  ์ˆ˜์žˆ๋Š” ์ œํ’ˆ์ด ์ฃผ์–ด์ง€๋ฉด ํ•ด๋‹น ์ œํ’ˆ์˜ ํ•˜์œ„ ํ•ญ๋ชฉ์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ํ•˜์œ„ ํ•ญ๋ชฉ๊ณผ ๊ฒฐํ•ฉํ•˜์—ฌ ์„œ๋กœ ๋‹ค๋ฅธ ์ œํ’ˆ์„ ํ˜•์„ฑ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ˆ๋ฅผ ๋“ค์–ด a*u' ๊ธˆ์ง€์— ๋Œ€ํ•œ Toivo์˜ ์šฐ๋ ค๋Š” ์ปดํŒŒ์ผ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ํ›จ์”ฌ ๋” ์ผ๋ฐ˜์ ์ธ ๋ณ€ํ˜•์€ x'Q ๋ฅผ ์‚ฌ์ „ ๊ณ„์‚ฐํ•˜์—ฌ 2 ์ฐจ ํ˜•์‹ x'Q*y1 , x'Q*y2 , ... (์—ฌ๊ธฐ์„œ๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•จ)์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

(3) ์ฝ”๋“œ ๋‹จ์ˆœํ™” : ๋‹ค์ฐจ์› ๋ฐ์ดํ„ฐ ์„ธํŠธ์— ๋งคํ•‘ ๋œ ์‚ฐ์ˆ  ์—ฐ์‚ฐ์„ ๋‹ค๋ฃฐ ๋•Œ ์—ฌ๋Ÿฌ ๋ฒˆ, ์‹œ์Šคํ…œ์—์„œ 6-7 ์ค„์˜ ์•Œ ์ˆ˜์—†๋Š” ๋ฃจํ•‘ ๋˜๋Š” ํ•จ์ˆ˜ ๋งคํ•‘ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜ ๋˜๋Š” ๋‘ ๊ฐœ์˜ ๊ฐ„๋‹จํ•œ ๋ฐฐ์—ด ์—ฐ์‚ฐ์œผ๋กœ ๋Œ€์ฒด ํ•  ์ˆ˜ ์žˆ์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ๋ณดํŽธ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ›จ์”ฌ ๋” ์ฝ๊ธฐ ์‰ฝ๊ณ  ํ›จ์”ฌ ๋น ๋ฆ…๋‹ˆ๋‹ค.

์œ„ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ฒฝํ—˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

MATLAB : ํ•ต์‹ฌ ์–ธ์–ด๋Š” ์ผ๋ฐ˜์ ์ธ ํ–‰๋ ฌ-๋ฒกํ„ฐ ์—ฐ์‚ฐ ์ด์ƒ์œผ๋กœ ์ œํ•œ๋˜๋ฏ€๋กœ ์ผ๋ฐ˜์ ์œผ๋กœ ์ธ๋ฑ์‹ฑ์œผ๋กœ ๋ฃจํ”„๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

NumPy : MATLAB๋ณด๋‹ค ๋” ์ผ๋ฐ˜์ ์ธ ๊ธฐ๋Šฅ์ด์ง€๋งŒ ์ง€์ €๋ถ„ํ•˜๊ณ  ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋ชจ๋“  ์‚ฌ์†Œํ•˜์ง€ ์•Š์€ ๋ฌธ์ œ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•ด ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•ด์•ผํ–ˆ๊ณ , ๊ทธ ํ›„์—๋„ ๊ฐ€๋”์€ ์ง๊ด€์ ์œผ๋กœ ์ •์˜ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ๋ฐฐ์—ด ์ž‘์—…์„ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ์— ๋„ˆ๋ฌด ๋งŽ์€ ๊ฐœ๋ณ„ ์•„์ด๋””์–ด๊ฐ€์žˆ์–ด ํŠน์ • ์‚ฌ์šฉ์ž์™€ ๊ฐœ๋ฐœ์ž๋Š” ์ƒ๋Œ€๋ฐฉ์ด ์–ด๋–ค ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋–ป๊ฒŒ ์ƒ๊ฐํ• ์ง€ ์ž๋™์œผ๋กœ ์ถ”์ธกํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์„ ๊ฒช์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์งง๊ณ  ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ทธ ๋ฐฉ๋ฒ•์ด ์ž‘๊ฐ€ ๋‚˜ ๋…์ž์—๊ฒŒ ํ•ญ์ƒ ๋ถ„๋ช…ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, ํ™•์žฅ ๋ฐ ๋‹จ์ผ ์ฐจ์›์˜ ํ•„์š”์„ฑ์€ ์—ฐ์‚ฐ์ž ์ ์šฉ ๊ตฌํ˜„์˜ ์ผ๋ฐ˜์„ฑ์ด ๋ถ€์กฑํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ฐ˜์˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (์ผ๋ถ€๋Š” ๋” ์ง๊ด€์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค).

Mathematica : ๊นจ๋—ํ•˜๊ณ  ๋งค์šฐ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ๋ชจ๋“  ๊ด€๋ จ ์—ฐ์‚ฐ์ž๋Š” ๊ณ ์ฐจ ํ…์„œ ๋™์ž‘์„ ์—ผ๋‘์—๋‘๊ณ  ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Dot ์™ธ์—๋„ Transpose, Flatten / Partition ๋ฐ Inner / Outer์— ๋Œ€ํ•œ ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์ด๋Ÿฌํ•œ ์—ฐ์‚ฐ ๋งŒ ๊ฒฐํ•ฉํ•˜๋ฉด ์ด๋ฏธ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐฐ์—ด ์ €๊ธ€๋ง ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฒ„์ „ 9์—์„œ๋Š” ํ•ต์‹ฌ ์–ธ์–ด์— ์ถ”๊ฐ€ ํ…์„œ ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ ์€ Mathematica๊ฐ€ ๋ฌด์–ธ๊ฐ€๋ฅผํ•˜๋Š” ๋ฐฉ์‹์ด ๊นจ๋—ํ•˜๊ณ  ๋ง์ด๋˜์ง€๋งŒ (์–ธ์–ด๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด), ๊ทธ๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ์ˆ˜ํ•™์  ํ‘œ๊ธฐ๋ฒ•๊ณผ ๋ถ„๋ช…ํžˆ ์ผ์น˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ผ๋ฐ˜์„ฑ์œผ๋กœ ์ธํ•ด ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰๋˜๋Š”์ง€ ์•Œ๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

scmutils : ๊ธฐ๋Šฅ ๋ถ„์„์˜ ๊ฒฝ์šฐ ๊น”๋”ํ•˜๊ณ  ์ผ๋ฐ˜์ ์ด๋ฉฐ ์œ„์˜ ์ž‘์—… ์ค‘ ๊ฐ€์žฅ ์ˆ˜ํ•™์ ์œผ๋กœ ์ง๊ด€์  ์ธ ์ž‘์—… (์“ฐ๊ธฐ ๋ฐ ์ฝ๊ธฐ ๋ชจ๋‘)์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. up / down ํŠœํ”Œ ์•„์ด๋””์–ด๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ „์น˜ ๊ธฐํ˜ธ, ๋ฏธ๋ถ„ ๊ด€๋ก€ ๋ฐ ๊ธฐํƒ€ ์ค€ ํ‘œ์ค€ํ™” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ฉด ์ˆ˜ํ•™์—์„œ ์ข…์ข…ํ•˜๋Š” ์ผ์„ ๋” ์ผ๊ด€๋˜๊ณ  ๋” ์ผ๋ฐ˜์ ์œผ๋กœ ํ™•์žฅ ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. (๋ฐ•์‚ฌ ํ•™์œ„ ๋…ผ๋ฌธ์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ „ํ†ต์ ์ธ ์ˆ˜ํ•™ ํ‘œ๊ธฐ๋ฒ•๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ Sussman & Wisdom์˜ SICM ๊ตฌ๋ฌธ๊ณผ ๋™ํ˜• ์ธ ์ผ๊ด€๋˜๊ณ  ๋ชจํ˜ธํ•˜์ง€ ์•Š์€ ํ‘œ๊ธฐ๋ฒ•์„ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.) ๊ทธ๋“ค์€ ๋˜ํ•œ ๋ฏธ๋ถ„ ๊ธฐํ•˜ํ•™ ๊ตฌํ˜„ [1]์„ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. SymPy [2] ๋กœ์˜ ์ด์‹์— ์˜๊ฐ์„์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ถ„์„์— ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ ํ•œ ์ข…๋ฅ˜์˜ ํŠœํ”Œ (์˜ˆ : Mathematica์˜ ๋ชฉ๋ก) ๋งŒ ์›ํ•˜๋Š” ์ผ๋ฐ˜ ๋ฐฐ์—ด ์ปจํ…์ŠคํŠธ์—์„œ๋Š” ๊ด€๋ก€์— ๋”ฐ๋ผ ํ•˜๋‚˜ ( "up") ๋งŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ, ์ผ๋ฐ˜์„ฑ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ ์„ฑ๋Šฅ ๊ณ ๋ ค ์‚ฌํ•ญ์„ ๋ชจํ˜ธํ•˜๊ฒŒํ•˜์ง€๋งŒ ์ด๊ฒƒ์ด Julia๊ฐ€ ๋›ฐ์–ด๋‚œ ๋ถ„์•ผ๊ฐ€๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์š”์•ฝ

์ œ์•ˆ ๋œ ์ „์น˜ ๋ฒกํ„ฐ ์œ ํ˜•์€ scmutils์—์„œ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ "๋‹ค์šด"ํŠœํ”Œ๋กœ ํŠน์„ฑํ™”๋˜์–ด์•ผํ•˜๋ฉฐ ์ผ๋ฐ˜ ๋ฒกํ„ฐ๋Š” "์—…"ํŠœํ”Œ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. "๋ฒกํ„ฐ"๋ฐ "์ „์น˜ ๋ฒกํ„ฐ"์™€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์€ "์œ„๋กœ"๋ฐ "์•„๋ž˜๋กœ"(๊ฐ„๊ฒฐ์„ฑ์„ ํฌ์ƒํ•˜์—ฌ)๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ๋ณด๋‹ค ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋” ํ•ฉ๋ฆฌ์  ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์„ธ ๊ฐ€์ง€ ์‚ฌ์šฉ ๋ฒ”์ฃผ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

(1) ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ์œ„ํ•ด ์‚ฌ๋žŒ๋“ค์ด ์ค‘์ฒฉ ๋ฐฐ์—ด์„ ์›ํ•˜๋ฉด "๋ฒกํ„ฐ"๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
(2) ๊ธฐ๋ณธ์ ์ธ ํ–‰๋ ฌ-๋ฒกํ„ฐ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ์œ„ํ•ด, ์‚ฌ๋žŒ๋“ค์€ ์ˆ˜ํ•™์  ๊ด€๋ก€์— ์ง์ ‘์ ์œผ๋กœ ๋Œ€์‘ํ•˜์—ฌ "๋ฒกํ„ฐ"์™€ "์ „์น˜ ๋ฒกํ„ฐ"๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ( "ํ–‰๋ ฌ"์€ "๋ฒกํ„ฐ"์˜ "์ „์น˜ ๋ฒกํ„ฐ"์™€ ๋™์ผ ํ•จ).
(3) ๊ณ ์ฐจ ํ…์„œ ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ (ํ‘œ์ค€ํ™”๊ฐ€ ์ ๊ณ  ์‚ฌ๋žŒ๋“ค์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์–ด์จŒ๋“  ์ƒ๊ฐํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ) ๊ตฌํ˜„์€ 2 ์ข…๋ฅ˜ ํŠœํ”Œ ์‚ฐ์ˆ  ์‹œ์Šคํ…œ์˜ ์™„์ „ํ•œ ์ผ๋ฐ˜์„ฑ์„ ์ง€์›ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ด์ „ ๊ฒŒ์‹œ๋ฌผ์—์„œ ์˜ค๋ฅ˜๋ฅผ ๊ณ ๋ คํ•œ ์‚ฌ๋ก€ ( v' ๋ฐ v*A )๊ฐ€ ์‹ค์ œ๋กœ ์˜๋ฏธ ์žˆ๊ณ  ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋‹ค์–‘ํ•œ ์ž‘์—… ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ์œ„์˜ ์ƒˆ๋กœ์šด ํ•ฉ์˜๋ฅผ ๋ฐ˜์˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ) ๊ฒฐ๊ณผ.

[1] http://dspace.mit.edu/handle/1721.1/30520
[2] http://krastanov.wordpress.com/diff-geometry-in-python/

@thomasmcoffee๋Š” ๊ณต๋ณ€๋Ÿ‰ ๋ฒกํ„ฐ์™€ ๋ฐ˜

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ผ๋ฐ˜์ ์ธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ์˜นํ˜ธํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ง€๋‚˜์น˜๊ฒŒ ๊ตฌ์ฒด์ ์ž…๋‹ˆ๋‹ค. ์ €์—๊ฒŒ ๊ทธ๊ฒƒ์€ (์ขŒํ‘œ ํ‘œํ˜„์„ ์œ„ํ•ด) ์ˆซ์ž์˜ ์ง์‚ฌ๊ฐํ˜• ํ…์„œ์— ๋Œ€ํ•œ ์ œํ•œ์„ ์•”์‹œํ•˜๋Š” ๊ธฐํ•˜ํ•™์  ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ถ„์•ผ์— ๋Œ€ํ•œ ์ „๋ฌธ ์ง€์‹ ์—†์ด๋Š” ํ‘œ์ค€ ๋ฐฐ์—ด์ด์žˆ๋Š” ํ…์„œ ๋Œ€์ˆ˜ ํ•จ์ˆ˜์˜ ์ ์ ˆํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ์ด ๋ชฉ์ ์— ์ถฉ๋ถ„ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ด๊ฒƒ๋งŒ์œผ๋กœ๋Š” ๋‘ ์ข…๋ฅ˜์˜ ์‹œ์Šคํ…œ์„ ํ•ต์‹ฌ ์–ธ์–ด.

์ €๋Š” ์ฃผ๋กœ ๋” ์ผ๋ฐ˜์ ์ธ ์ค‘์ฒฉ ๊ตฌ์กฐ์— ์˜์กดํ•˜๋Š” ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ˜ผํ•ฉ ์ฐจ์›์˜ ์—ฌ๋Ÿฌ ์ธ์ˆ˜ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๋ฏธ์ ๋ถ„์€ ํ•ต์‹ฌ ์–ธ์–ด๊ฐ€ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‚˜์ค‘์— "์ถ”๊ฐ€ ๊ธฐ๋Šฅ"์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ธฐ๊ฐ€ ๋” ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๊ตฌ๋ณ„. ์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” ๊ฐ™์€ ๊ฒƒ์„ ์˜๋ฏธ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ƒํ–ฅ ๋ฐ ํ•˜ํ–ฅ ๋ฒกํ„ฐ์˜ ๋ฌธ์ œ์ ์€ ์•„์ด๋””์–ด๋ฅผ ์ผ๋ฐ˜ ๋ฐฐ์—ด๋กœ ํ™•์žฅํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฒกํ„ฐ๋Š” ๋ฐฐ์—ด์˜ 1 ์ฐจ์› ์ผ€์ด์Šค ๋Œ€์‹ ์— ํŠน๋ณ„ํ•œ ๋ฌด์–ธ๊ฐ€๊ฐ€๋˜๊ณ  ๋ฐฐ์—ด๊ณผ ๋ถ„๋ฆฌ๋˜์–ด ๋”์ฐํ•œ ๋ฌธ์ œ๋กœ ์ด์–ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋งŽ์€ ์ƒ๊ฐ์„ํ–ˆ์ง€๋งŒ ๋ฐ›์•„ ๋“ค์ผ๋งŒํ•œ ๋ฐฉ๋ฒ•์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์œ„์•„๋ž˜ ๋ฒกํ„ฐ๋ฅผ ๋ฐฐ์—ด๋กœ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ผ๋ฐ˜ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ข‹์€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด ๋“ฃ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ด ์•„์ด๋””์–ด๋ฅผ ์™ธ์‚ฝํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ดํ•ดํ–ˆ๋“ฏ์ด ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์œ„์•„๋ž˜ ๋ฒกํ„ฐ๋กœ ๊ณ„์‚ฐํ•˜๋ ค๋ฉด ๊ฐ ์ฐจ์›์— ๋Œ€ํ•ด ์œ„์•„๋ž˜์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ํ‘œ์‹œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๊ฒƒ์€ ๋ฐฐ์—ด์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ์‹ธ์„œ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

immutable UpDownTensor{T, N, UPMASK} <: AbstractArray{T, N}
    A::AbstractArray{T, N}
end

์—ฌ๊ธฐ์„œ UPMASK ๋Š” ์–ด๋–ค ์ฐจ์›์ด ์˜ฌ๋ผ ๊ฐ”๋Š”์ง€ ๋‚˜ํƒ€๋‚ด๋Š” ๋น„ํŠธ ๋งˆ์Šคํฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋น„ ๊ฐ์‹ธ ๋ฐฐ์—ด์— ๋Œ€ํ•œ ์ž‘์—…์ด ๊ธฐ๋ณธ์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ ๊ตฌํ˜„ ๋  ์ˆ˜ UPMASK ์˜ ํ•จ์ˆ˜๋กœ N : ๋ฒกํ„ฐ๋Š” ํ•˜๋‚˜์˜ ์ตœ๋Œ€ ๊ธฐ๋ณธ ๊ฒƒ, ์ฒซ ๋ฒˆ์งธ ์œ„ ๋‘ ๋ฒˆ์งธ ์•„๋ž˜์— ๋งคํŠธ๋ฆญ์Šค; ๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ป๊ฒŒ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๊ณ„์† ๋ ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ž„์˜์˜ ์ƒ๊ฐ :

  • 2 ์ฐจ / ์Œ ์„ ํ˜•์ด 2 ์ฐจ์›์œผ๋กœ ๋” ์ž˜ ํ‘œํ˜„ ๋ ๊นŒ์š”?
  • ํŠธ๋žœ์Šค ํฌ์ฆˆ๊ฐ€ ๊ฐ ์ฐจ์›์˜ ์œ„ / ์•„๋ž˜๋ฅผ ๋’ค์ง‘๋Š” ๊ฒƒ์— ํ•ด๋‹นํ•œ๋‹ค๋ฉด, ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ์ฒซ ๋ฒˆ์งธ ์ฐจ์›์ด ์•„๋ž˜๋กœ, ๋‘ ๋ฒˆ์งธ๊ฐ€ ์œ„๋กœ์žˆ๋Š” ์ „์น˜ ํ–‰๋ ฌ ์œ ํ˜•์„ ์–ป์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
  • ๊ธฐ๋ณธ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ์—… ํŒจํ„ด์€ ๋ž˜ํ•‘ํ•˜๋Š” ๋Œ€์‹  ๊ธฐ๋ณธ ๋ฐฐ์—ด๋กœ ์ง์ ‘ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์Œ, ์ด๊ฒƒ์€ ํ™•์‹คํžˆ Transposed ์œ ํ˜•์˜ ์ผ๋ฐ˜ํ™”์ด๋ฉฐ ํ™•์‹คํžˆ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” Toivo์˜ ์ œ์•ˆ์ด ๋‚ด๊ฐ€ ์œ„์—์„œ ์˜นํ˜ธํ–ˆ๋˜ ๊ฒƒ์— ๋Œ€ํ•œ ํ•ฉ๋ฆฌ์ ์ธ ์‹คํ˜„์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ๊ฐ€์žฅ ํ˜„๋ช…ํ•œ ๊ธฐ๋ณธ๊ฐ’์€ ๋” ๋†’์€ ์ˆœ์„œ๋กœ ๋ฐฉํ–ฅ์„ ๊ณ„์† ๋ฐ”๊พธ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋ฉฑ๊ธ‰์ˆ˜์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ž˜ํ•‘๋˜์ง€ ์•Š์€ ๋ฐฐ์—ด๋กœ ์ œ๊ณตํ–ˆ๋‹ค๋ฉด ์ด๊ฒƒ์€ ์˜ฌ๋ฐ”๋ฅธ ์ผ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋” ๊นŠ์ด ์ƒ๊ฐํ•ด ๋ณด๋ฉด ๋‘ ๊ฐ€์ง€ ์•„์ด๋””์–ด๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ๊ฐ•๋ ฅ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (1) ์œ„์•„๋ž˜ ๋ฒกํ„ฐ ๊ฐ„์˜ ๊ตฌ๋ณ„๊ณผ (2) ๋ฐฐ์—ด๊ณผ ๋ฒกํ„ฐ ๊ฐ„์˜ ๊ตฌ๋ณ„์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ผ๋ถ€ ์ฐจ์›์€ ์œ„๋กœ, ์ผ๋ถ€๋Š” ์•„๋ž˜๋กœ, ์ผ๋ถ€๋Š” "์ค‘๋ฆฝ"์ธ ๊ฐ์ฒด๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด๊ณผ ๋ฒกํ„ฐ๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ์ด์œ ๋Š” ์˜๋ฏธ ์ƒ ๋ฐฐ์—ด์€ ๊ตฌ์„ฑ (๋™์ผํ•œ ์ข…๋ฅ˜์˜ ์—ฌ๋Ÿฌ ํ•ญ๋ชฉ ์ˆ˜์ง‘)์„์œ„ํ•œ ๋ฐ˜๋ฉด ๋ฒกํ„ฐ๋Š” ์กฐ์ • (๋‹ค์ฐจ์› ๊ณต๊ฐ„์„ ๋‚˜ํƒ€๋ƒ„)์„์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ๊ฐ์ฒด์—์„œ ๋‘ ๊ฐ€์ง€ ๊ตฌ๋ณ„์„ ๊ฒฐํ•ฉํ•˜๋Š” ํž˜์€ ๋‘ ๊ฐ€์ง€ ๋ชฉ์ ์„ ๋™์‹œ์— ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ค‘๋ฆฝ ์ฐจ์›์€ ๋ฐฉ์†ก ๊ทœ์น™์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋˜๊ณ  ์œ„ / ์•„๋ž˜ ์ฐจ์›์€ ํ…์„œ ์‚ฐ์ˆ  ๊ทœ์น™์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

์ด์ „ ์˜ˆ์ œ๋กœ ๋Œ์•„๊ฐ€์„œ ๋‹ค๋ฅธ ๋ฒกํ„ฐ y1, y2, ... ๋Œ€ํ•ด ์—ฌ๋Ÿฌ 2 ์ฐจ ํ˜•์‹ x'Q*y1, x'Q*y2, ... ์„ ๊ณ„์‚ฐํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. SICM ์ด์–ด ์˜ํ•ด ํŠœํ”Œ (์—ด ๋ฒกํ„ฐ)๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค (...) ์˜ํ•ด ํŠœํ”Œ (ํ–‰ ๋ฒกํ„ฐ) ์•„๋ž˜ [...] . ์ด ๋ชจ๋“  ์ž‘์—…์„ ํ•œ ๋ฒˆ์— ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ๊ณ  ์œ„ / ์•„๋ž˜๋กœ๋งŒ ๊ณ ์ฐฉ ๋œ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ yi ๋ฅผ ์•„๋ž˜๋กœ ํŠœํ”Œ์„ ์‚ฌ์šฉํ•˜์—ฌ Y = [y1, y2, ...] ํ–‰๋ ฌ๋กœ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. up tuples), ๊ทธ๋ฆฌ๊ณ  r = x'Q*Y ๊ณ„์‚ฐํ•˜๋ฉด ๊ฒฐ๊ณผ๋Š” down tuple r ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๊ฐ ๊ฒฐ๊ณผ์— (์—ด) ๋ฒกํ„ฐ v ๋ฅผ ๊ณฑํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? r*v ๋ฅผ ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ˆ˜์ถ• (๋‚ด์ )์ด ์ƒ๊ธฐ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. r ๋ฅผ ์—… ํŠœํ”Œ์œผ๋กœ ๋ณ€ํ™˜ ํ•œ ๋‹ค์Œ ๊ณฑํ•˜๋ฉด ์—… ํŠœํ”Œ (์—… ํŠœํ”Œ)์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์œ„ํ•ด ๋‹ค์šด ํŠœํ”Œ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๊นŒ? ์˜๋ฏธ ๋ก ์ ์œผ๋กœ, ๋‹น์‹ ์€ ํ•ญ์ƒ ๋ฐฉ์†ก๋˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๊ฒƒ๋“ค์˜ ๋ชจ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ณ„์‚ฐ์„ ๊ฑฐ์น˜๋Š” ์ฐจ์›์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—„๊ฒฉํ•˜๊ฒŒ ์—… / ๋‹ค์šด ์„ธ๊ณ„์—์„œ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๋ ค๋ฉด ์˜ฌ๋ฐ”๋ฅธ ๋™์ž‘์„ ์ด๋Œ์–ด ๋‚ด๊ธฐ ์œ„ํ•ด ์ž„์˜์˜ ์ปจํ…์ŠคํŠธ ์ข…์† ๋ณ€ํ™˜์„ ๊ณ„์† ์ˆ˜ํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ {...} ๋กœ ํ‘œ์‹œ๋œ ์ค‘๋ฆฝ ํŠœํ”Œ (๋ฐฐ์—ด)๋„ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ys = {y1, y2, ...} ๋ฅผ ๋ฐฐ์—ด (์—… ํŠœํ”Œ)๋กœ ์ž‘์„ฑํ•˜์—ฌ r = x'Q*ys ๊ฐ€ ๋ฐฐ์—ด์ด๊ณ  r*v ๋„ ๋ฐฐ์—ด (์—… ํŠœํ”Œ)์ด๋˜๋„๋กํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ฉฐ ์ž„์˜์˜ ๋ณ€ํ™˜์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Stefan์€ 1-D ๋ฐฐ์—ด๊ณผ up / down ๋ฒกํ„ฐ๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ๊ฒƒ์€ ๋น„์ฐธํ•œ ์ผ์ด๋ผ๊ณ  ์ œ์•ˆํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ํ•จ์ˆ˜๊ฐ€ ๋ฐฐ์—ด์˜ ๋ฒกํ„ฐ _or_์—์„œ ์ž‘๋™ํ•˜์ง€๋งŒ _ ๋‘˜ ๋‹ค _๊ฐ€ ์•„๋‹ˆ๋ผ ์ž‘๋™ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์— ์˜ํ•ด์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (๋˜๋Š” ๋ฒกํ„ฐ ๋ฐฐ์—ด์˜ ํ–‰๋ ฌ _or_ ๋ฐฐ์—ด ๋ฒกํ„ฐ์˜ ๋ฐฐ์—ด _or_ ๋ฐฐ์—ด ๋ฐฐ์—ด์˜ _or_ ๊ทธ๋Ÿฌ๋‚˜ _ either_ ์•„๋‹˜. ๋“ฑ๋“ฑ.) ๋”ฐ๋ผ์„œ ์ ์ ˆํ•œ ๋ณ€ํ™˜ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋ฉด ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์„ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ž๋™์œผ๋กœ ์˜ณ์€ ์ผ. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด [1] scmutils๊ฐ€ ์‹ค์ œ๋กœ "๋ฒกํ„ฐ"๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ๊ณผ ํ›„๋“œ ์•„๋ž˜์˜ ์œ„์•„๋ž˜ ํŠœํ”Œ์„ ๊ตฌ๋ณ„ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ˜„์žฌ ๋ณ€ํ™˜ ๊ทœ์น™์€ ์ด๋Ÿฌํ•œ "๋ฒกํ„ฐ"๊ฐ€ ์—… / ๋‹ค์šด ์„ธ๊ณ„์— ๋“ค์–ด๊ฐˆ ๋•Œ๋งˆ๋‹ค ์—… ํŠœํ”Œ์— ๋งคํ•‘๋˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค (์•ž์„œ ์ œ์•ˆํ–ˆ๋“ฏ์ด). "์šฐ๋ฆฌ๋Š”์ด ๊ตฌํ˜„์„ ๊ตฌ๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ€๊ฒฝํ•  ๊ถŒ๋ฆฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—… ํŠœํ”Œ์˜ ์Šคํ‚ค๋งˆ ๋ฒกํ„ฐ. " (์•„๋งˆ๋„ ์บ ํผ์Šค์—์žˆ๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ GJS์—๊ฒŒ ๊ตฌ์ฒด์ ์ธ ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋Š”์ง€ ๋ฌผ์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.) Sage ์‹œ์Šคํ…œ [2]์€ ๋ฐฐ์—ด ์ฒ˜๋ฆฌ๋ฅผ ๋ฒกํ„ฐ ๋ฐ ํ–‰๋ ฌ (ํ˜„์žฌ ํ…์„œ์— ๋Œ€ํ•œ ํ•ต์‹ฌ ์ง€์›์ด ์—†์Œ)๊ณผ ํฌ๊ฒŒ ๋ถ„๋ฆฌํ•˜๋ฉฐ ์ œ๊ฐ€ ๊ฒฝํ—˜ ํ•œ ์œ ์ผํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ถ„๋ช…ํžˆ ์˜๋ฏธ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ์— ๊ทธ๋“ค ์‚ฌ์ด์— ๋‚ด์žฅ ๋œ ๋ณ€ํ™˜์˜ ๋ถ€์กฑ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

[1] http://groups.csail.mit.edu/mac/users/gjs/6946/refman.txt --- "๊ตฌ์กฐํ™” ๋œ ๊ฐ์ฒด"์—์„œ ์‹œ์ž‘
[2] http://www.sagemath.org/

๋‚˜๋Š” ์ ์‹ฌ ํ…Œ์ด๋ธ”์—์„œ @jiahao ์™€ ์ด์•ผ๊ธฐํ•˜๊ณ 

์ž ์‹œ ๋™์•ˆ ๋‘ ์–ด๋ ˆ์ด ๊ฐ„์˜ ๊ณฑ๋งŒ ๊ณ ๋ คํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์ž‘์—…์€ ์œ ์‚ฌํ•œ ์ผ๋ฐ˜ํ™”๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด์„ ๋‹ค๋ฃฐ ๋•Œ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์„ธ โ€‹โ€‹๊ฐ€์ง€ ์œ ํ˜•์˜ ์ œํ’ˆ์€ ์™ธ๋ถ€ ์ œํ’ˆ, ๋‚ด๋ถ€ ์ œํ’ˆ ๋ฐ ์š”์†Œ ๋ณ„ ์ œํ’ˆ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ inner(A,B) ๋˜๋Š” A*B ์™€ ๊ฐ™์€ ๋‘ ๊ฐœ์ฒด๊ฐ„์— ์ด์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ณ ์ฐจ์› ๋ฐฐ์—ด์—์„œ ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ๋•Œ๋Š” ๋ฐฐ์—ด ์ „์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐฐ์—ด์˜ ํŠน์ • ์ฐจ์›๊ฐ„์— ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์™ธ๋ถ€ / ๋‚ด๋ถ€ / ์š”์†Œ ๋ณ„ ํ•˜์œ„ ์ž‘์—…์€ ๋‘ ๋ฐฐ์—ด ์‚ฌ์ด์˜ ๋‹จ์ผ ์ž‘์—…์—์„œ ๋ฐœ์ƒํ•˜๋ฉฐ ๊ฐ ๋ฐฐ์—ด์˜ ๊ฐ ์ฐจ์›์€ ์ •ํ™•ํžˆ ํ•˜๋‚˜์˜ ํ•˜์œ„ ์ž‘์—… (๋ช…์‹œ ์ ์œผ๋กœ ๋˜๋Š” ๊ธฐ๋ณธ๊ฐ’)์— ํ• ๋‹น๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ๋ฐ ์š”์†Œ ๋ณ„ ์ œํ’ˆ์˜ ๊ฒฝ์šฐ ์™ผ์ชฝ์—์žˆ๋Š” ํ•˜๋‚˜์˜ ์ฐจ์›์€ ์˜ค๋ฅธ์ชฝ์—์žˆ๋Š” ๋™์ผํ•œ ํฌ๊ธฐ์˜ ์ฐจ์›๊ณผ ์Œ์„ ์ด๋ฃจ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ์ œํ’ˆ ์น˜์ˆ˜๋Š” ์Œ์„ ์ด๋ฃฐ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๋Š” ํ•œ ์Œ์˜ ์ฐจ์›๊ณผ ๋‹ค๋ฅธ ๋ชจ๋“  ์ œํ’ˆ์— ๋Œ€ํ•œ ์™ธ๋ถ€ ์ œํ’ˆ ์‚ฌ์ด์—์„œ ๋‚ด๋ถ€ ์ œํ’ˆ ๋˜๋Š” ์š”์†Œ ๋ณ„ ์ œํ’ˆ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ถ€ ์ œํ’ˆ์€ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ด๊ณ  ์Œ์„ ์ด๋ฃฐ ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์€ ๊ธฐ๋ณธ๊ฐ’์ด๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋ณดํ†ต ํ”Œ๋กฏ์˜ x, y, z ์ถ•๊ณผ ๊ฐ™์ด ์ˆœ์„œ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š๊ณ  ์ด๋ฆ„์ด ์ง€์ •๋˜๋Š” ๊ฒƒ์œผ๋กœ ์น˜์ˆ˜๋ฅผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์›ํ•œ๋‹ค๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ œ๋กœ ์ฃผ๋ฌธ ์ธ๋ฑ์‹ฑํ•˜์—ฌ ๋ฐฐ์—ด์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ๋„๋ก (๊ฐ™์€ A[1,2,5] ๋ณด๋‹ค๋Š” A[a1=1, a3=5, a2=2] ) ๋‹น์‹ ์€ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌ ํ•  ์ˆ˜์žˆ๋Š” ์ผ๊ด€๋œ ๋ฐฉ๋ฒ•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์ฐจ์›์„ ๋‚˜์—ดํ•œ ๋‹ค์Œ ๋‘ ๋ฒˆ์งธ ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์ฐจ์›์„ ๋‚˜์—ดํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ ฌ ํ•  ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ๊ณฑ์— ์ฐธ์—ฌํ•œ ๋ชจ๋“  ์ฐจ์›์ด ์••์ฐฉ๋˜๊ณ  ์š”์†Œ ๋ณ„ ๊ณฑ์— ์ฐธ์—ฌํ•œ ์ฐจ์›์˜ ๊ฒฝ์šฐ ๋‘ ๋ฒˆ์งธ ๋ฐฐ์—ด์˜ ์ฐจ์› ๋งŒ ์••์ฐฉ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ํ‘œ๊ธฐ๋ฒ•์„ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ Juliafy ์ž์œ ๋กญ๊ฒŒ ๋Š๋ผ์‹ญ์‹œ์˜ค. A a1 x a2 x a3 ์ธ ๋ฐฐ์—ด๋กœ, B ๋ฅผ b1 ๋ฐฐ์—ด๋กœ ์ง€์ • b2 . array_product(A, B, inner=[2, 1], elementwise=[3, 2]) ์ด ์ฐจ์› a2 ๋ฐ b1 ์‚ฌ์ด์˜ ๋‚ด๋ถ€ ๊ณฑ, a3 ๋ฐ b2 ์‚ฌ์ด์˜ ์š”์†Œ ๋ณ„ ๊ณฑ์„ ์ทจํ•œ๋‹ค๊ณ  ๊ฐ€์ • ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. a1 ์˜ ์™ธ๋ถ€ ์ œํ’ˆ. ๊ฒฐ๊ณผ๋Š” a1 x a3 ๋ฐฐ์—ด์ด๋ฉ๋‹ˆ๋‹ค.

์ดํ•ญ ๋˜๋Š” ๋‹จํ•ญ ์—ฐ์‚ฐ์ž๋Š” ๊ณ ์ฐจ์› ๋ฐฐ์—ด์˜ ๋งฅ๋ฝ์—์„œ ๋งŽ์€ ์˜๋ฏธ๋ฅผ ๊ฐ–์ง€ ์•Š์„ ๊ฒƒ์ž„์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ์ฐจ์›์œผ๋กœ ์ˆ˜ํ–‰ ํ•  ์ž‘์—…์„ ์ง€์ •ํ•˜๋ ค๋ฉด ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Matlab ์—ฐ์‚ฐ์ž๋ฅผ ์ฒ˜์Œ ๋‘ ์ฐจ์›์— ๋Œ€ํ•œ ๋ฐฐ์—ด ์—ฐ์‚ฐ์˜ ์•ฝ์ž๋กœ ๋งŒ๋“ค์–ด ์„ ํ˜• ๋Œ€์ˆ˜์˜ ์šฉ์ด์„ฑ์„ ๋‹ค์‹œ ์บก์ฒ˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Matlab์˜ A*B ์€ array_product(A, B, inner=[2,1]) ์ž…๋‹ˆ๋‹ค.

Matlab์˜ A.' ๋Š” permute(A, B, [2,1]) ์ด๋ฉฐ, ์—ฌ๊ธฐ์„œ permute๋Š” ์„ธ ๋ฒˆ์งธ ์ธ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ณด๋‹ค ๋†’์€ ๋ชจ๋“  ์ฐจ์›์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

Mathematica๊ฐ€ ๋ฒกํ„ฐ ์ „์น˜์™€ ๊ฐ™์ด ๋ฐฐ์—ด์˜ ์ฐจ์›์ด 2๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ 2์™€ ๊ฐ™์ง€ ์•Š์„ ๋•Œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ ์‹œํ‚ฌ์ง€ ์—ฌ๋ถ€๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด ๊ณ„์‚ฐ ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ชจ๋“  (n, m) ๋ฐฐ์—ด์„ (n, m, 1) ๋ฐ (n, m, 1)๋กœ ํ•ด์„ํ•˜๊ธฐ ์œ„ํ•ด @wenxgwen ์˜ ์ œ์•ˆ์„ ๋ฐ›์•„ @wenxgwen ์˜ ์ œ์•ˆ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ์—ด ๋ฏธ์ ๋ถ„์— ๋Œ€ํ•œ ์ฒด์ธ ๊ทœ์น™ ๋ฐ ๊ณฑ ๊ทœ์น™๊ณผ ํ•จ๊ป˜ ๋”ํ•˜๊ธฐ, ์ง€์ˆ˜ํ™” ๋ฐ ๋ฏธ๋ถ„์„ ํฌํ•จํ•˜๋Š” ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ด€์ ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! ๋‚˜๋Š” ์ด๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด * ๋ฐฐ์—ด ์ œํ’ˆ์ด ์‹ค์ œ๋กœ ์–ด๋–ค ์ข…๋ฅ˜์˜ ์ง์Šน์ธ์ง€ ์ดํ•ดํ•˜๋Š” ๋ฐ ์ƒ๋‹นํžˆ ๊ณ„๋ชฝ ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

PEP 0465 ์—์„œ ํ–‰๋ ฌ ๊ณฑ์…ˆ ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด ์ œ์•ˆ ๋œ ์˜๋ฏธ๋ก ๊ณผ ๋‹ค์ฐจ์› ๋ฐฐ์—ด ๊ณฑ์…ˆ์— ๋Œ€ํ•œ ์ œ์•ˆ์„ ์ƒํ˜ธ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ด ํฅ๋ฏธ๋กœ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ:

1d ๋ฒกํ„ฐ ์ž…๋ ฅ์€ ๋ชจ์–‘ ์•ž์— '1'์„ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•˜์—ฌ 2d๋กœ ์Šน๊ฒฉ๋˜๊ณ  ์ž‘์—…์ด ์ˆ˜ํ–‰ ๋œ ๋‹ค์Œ ์ถ”๊ฐ€ ๋œ ์ฐจ์›์ด ์ถœ๋ ฅ์—์„œ โ€‹โ€‹์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. 1์€ ํ•ญ์ƒ ๋ชจ์–‘์˜ "์™ธ๋ถ€"์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์™ผ์ชฝ ์ธ์ˆ˜์—๋Š” ์•ž์— ์ถ”๊ฐ€๋˜๊ณ  ์˜ค๋ฅธ์ชฝ ์ธ์ˆ˜์—๋Š” ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ํ–‰๋ ฌ @ ๋ฒกํ„ฐ์™€ ๋ฒกํ„ฐ @ ํ–‰๋ ฌ์€ ๋ชจ๋‘ ํ•ฉ๋ฒ•์ ์ด๋ฉฐ (ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•œ ๋ชจ์–‘์„ ๊ฐ€์ •) ๋‘˜ ๋‹ค 1d ๋ฒกํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ @ ๋ฒกํ„ฐ๋Š” ์Šค์นผ๋ผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค ... 1d ๋ฒกํ„ฐ์— ๋Œ€ํ•œ์ด ์ •์˜์˜ ์ž˜๋ชป๋œ ์ ์€ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ @๊ฐ€ ๋น„์—ฐ ๊ด€์ ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค ((Mat1 @ vec) @ Mat2! = Mat1 @ (vec @ Mat2)). ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์‹ค์šฉ์„ฑ์ด ์ˆœ์ˆ˜์„ฑ์„ ๋Šฅ๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค

ํŒŒ์ด์ฌ์—์„œ ๋”ํ‚น ํƒ€์ดํ•‘์€ ํŠน๋ณ„ํ•œ ๋ฌธ์ œ๋ฅผ ์ผ์œผ ํ‚ต๋‹ˆ๋‹ค. ๋‹น์—ฐํžˆ ๋ฐฐ์—ด๊ณผ ํ–‰๋ ฌ์€ ์ƒํ˜ธ ๊ตํ™˜ ๊ฐ€๋Šฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (๋™์ผํ•œ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ). ๊ทธ๋Ÿฌ๋‚˜ ํŒŒ์ด์ฌ์€ ์œ ํ˜• ๊ฒ€์‚ฌ๋ฅผ ๊ถŒ์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์„ ์˜ˆ์ƒํ•˜๋Š” ํ•จ์ˆ˜์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ํ–‰๋ ฌ์ด ์˜ฌ๋ฐ”๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์บ์ŠคํŒ…๋˜์ง€ ์•Š์œผ๋ฉฐ ๊ทธ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹ค๋ฅธ ์—ฐ์‚ฐ์ž ๋ฌธ์ž๋ฅผ ๊ฐ€์ ธ์•ผํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋Ÿฐํƒ€์ž„ ์œ ํ˜• ๊ฒ€์‚ฌ ๋ฐ convert ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Julia๋Š” ์ด๋Ÿฌํ•œ ๋ชจํ˜ธํ•จ์„ ๊ฒช์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

PEP 0465์—์„œ :

1d ๋ฒกํ„ฐ์— ๋Œ€ํ•œ์ด ์ •์˜์˜ ์ž˜๋ชป๋œ ์ ์€ ์ผ๋ถ€ ๊ฒฝ์šฐ @ ๋น„์—ฐ ๊ด€์  ((Mat1 @ vec) @ Mat2! = Mat1 @ (vec @ Mat2))

๋•Œ๋ฌธ์— ํŠนํžˆ ์ •์˜๊ฐ€ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜, ํ‹ฐ์นด์— ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑ ํ•  ์ˆ˜ Dot ( . ) (ํšŒํ•ฉ ๊ฒƒ์œผ๋กœ ๊ฐ€์ • Flat ์™€ ๊ฐ™์ด (๊ธฐํ˜ธ๋กœ ํ‰๊ฐ€ ๋  ๋•Œ) f ์•„๋ž˜ ( g ์ œ์™ธ) :

In[1]:= f=X.(y.Z);
g:=X.(y.Z)

In[3]:= Block[{
X=Array[a,{2,2}],
y=Array[b,2],
Z=Array[c,{2,2}]
},{f,g}]

Out[3]= {{(a[1,1] b[1]+a[1,2] b[2]) c[1,1]+(a[2,1] b[1]+a[2,2] b[2]) c[2,1],(a[1,1] b[1]+a[1,2] b[2]) c[1,2]+(a[2,1] b[1]+a[2,2] b[2]) c[2,2]},{a[1,1] (b[1] c[1,1]+b[2] c[2,1])+a[1,2] (b[1] c[1,2]+b[2] c[2,2]),a[2,1] (b[1] c[1,1]+b[2] c[2,1])+a[2,2] (b[1] c[1,2]+b[2] c[2,2])}}

In[4]:= SameQ@@Expand[%]
Out[4]= False

@drhagen์—์„œ :

๋Ÿฐํƒ€์ž„ ์œ ํ˜• ๊ฒ€์‚ฌ ๋ฐ convert ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Julia๋Š” ์ด๋Ÿฌํ•œ ๋ชจํ˜ธํ•จ์„ ๊ฒช์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ฐ”๋กœ ์ค„๋ฆฌ์•„์—๊ฒŒ ์ ํ•ฉํ•œ ์†”๋ฃจ์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ž์ฒด๊ฐ€ ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ์˜๋ฏธ๋ก  (์œ ๋‹ˆ๋ฒ„์„ค ๋ฐฉ์†ก์šฉ)๊ณผ ํ…์„œ ํ˜• ์˜๋ฏธ๋ก  (๊ฐ€๋Šฅํ•œ ์ถ•์†Œ๋ฅผ ์œ„ํ•ด)์„ ๊ตฌ๋ถ„ํ•˜๋„๋กํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ฒฐ์ฝ” ์—ฌ๊ธฐ์„œ ๊ถŒ์œ„์ž๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ์ž„์˜ ์ฐจ์› ์ปฌ๋ ‰์…˜ ์œ ํ˜• ( Array )์ด ๋‚ด์ ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ฐ์‚ฐ์ž๋ฅผ ์ง€์›ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด์ ์€ ๋‘ ์ฐจ์› ์‚ฌ์ด์—์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ดํ•ญ ์—ฐ์‚ฐ์ž์— ์ œ๊ณต ํ•  ์ˆ˜์—†๋Š” ์ถ”๊ฐ€ ์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—์ด ์—ฐ์‚ฐ์ž๋Š”์ด ์œ ํ˜•์— ๋Œ€ํ•ด ํ˜„๋ช…ํ•˜๊ฒŒ ์ •์˜ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์„ ํ˜• ๋Œ€์ˆ˜ ์—ฐ์‚ฐ, inv , transpose ๋“ฑ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

์„ ํ˜• ๋Œ€์ˆ˜์˜ ์ˆ˜ํ•™์  ๋ถ„์•ผ์—์„œ ์ž‘๋™ํ•˜๋ ค๋ฉด ๋ชจ๋“  ์ผ๋ฐ˜ ์„ ํ˜• ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์ž์™€ ํ•จ์ˆ˜๊ฐ€์žˆ๋Š” Matrix , ColumnVector ๋ฐ RowVector ์„ธ ๊ฐ€์ง€ ์œ ํ˜•์ด ๋” ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์œ ํ˜• ๊ตฌ์กฐ๊ฐ€ ์ž˜ ์ •์˜๋˜์—ˆ์œผ๋ฏ€๋กœ Matrix ์—์„œ Array{2} , ColumnVector ์—์„œ Array{1} ๋กœ์˜ ์•”์‹œ ์  ๋ณ€ํ™˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ RowVector ~ Array{2} (์ด ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๊ฒ  ์Œ), Array{2} ~ Matrix ๋ฐ Array{1} ~ ColumnVector .

์œ„์˜ ์ œ์•ˆ (https://github.com/JuliaLang/julia/issues/4774#issuecomment-32705055)์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์ฐจ์› ๊ตฌ์กฐ์˜ ๊ฐ ์ฐจ์›์ด ์ค‘๋ฆฝ ( "์ปฌ๋ ‰์…˜"/ "๋ฐฐ์—ด"), ์œ„์ชฝ ( " ์—ด ") ๋˜๋Š” ์•„๋ž˜ ("ํ–‰ ") ์˜๋ฏธ ์ฒด๊ณ„. ๋‚˜๋Š” ๋‹น์‹ ์ด ๋ฌ˜์‚ฌํ•˜๋Š” ๊ฒƒ์ด ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ์ผ๋ฐ˜์ ์ธ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์žฅ์ ์€ ๋ฐ์ดํ„ฐ ๋˜๋Š” ๊ณต๊ฐ„์˜ ๋งŽ์€ ์ฐจ์›์ด์žˆ๋Š” ๊ณ„์‚ฐ์—์„œ๋„ ์—ฐ์‚ฐ์ž๊ฐ€ ์–ด๋–ค ์ฐจ์›์—์„œ ์ž‘๋™ํ•ด์•ผํ•˜๋Š”์ง€ ๋ช…์‹œ ์ ์œผ๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ์˜ฌ๋ฐ”๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ ์–ด๋„ Julia์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์œ ํ˜• ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์„ ํƒํ•˜์—ฌ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์˜๋ฏธ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ˜ธ์ถœํ•˜์—ฌ ๋ชจ๋“  ์ž‘์—…์˜ โ€‹โ€‹์˜๋ฏธ๋ฅผ ์ง€์ •ํ•ด์•ผํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์ง๊ด€์ ์ด๊ณ  ์ฝ๊ธฐ ์‰ฝ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ฐจ์› ์ธ๋ฑ์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ถ”๊ฐ€ ์ธ์ˆ˜. ์•”์‹œ ์  ๋˜๋Š” ๋ช…์‹œ ์  ๋ณ€ํ™˜์€ ์˜๋ฏธ๊ฐ€ ๋น„์ •์ƒ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ค‘๊ฐ„ ์ŠคํŠธ๋ฆผ์—์„œ ๋ณ€๊ฒฝ๋˜์–ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ ์ „์ฒด ์ฐจ์›์˜ ์ผ๋ฐ˜ ์„ฑ๊ณผ ํ•จ๊ป˜ ์—ฌ์ „ํžˆ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@thomasmcoffee ๋‚˜๋Š” ๋‹น์‹ ์˜ ์ œ์•ˆ์„ ๋งค์šฐ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ ์›์น™ (์ผ๋ช… ๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ)์„ ์‚ฌ์šฉํ•˜์—ฌ DSL (์˜ค๋ž˜ ์ „์— ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ์Œ)์—์„œ ๋ชจํ˜ธํ•˜๊ฒŒ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ตฌ๋ณ„๋˜๋Š” ์ด์ค‘์˜ ๊ฐœ๋…์€ ๋ถ„๋ณ„ ์ ์œผ๋กœ ์ผ๊ด€๋œ ์˜๋ฏธ๋ก ์— ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.
  2. ๋งค๊ฐœ ๋ณ€์ˆ˜ํ™” ๋œ ์—ฐ์‚ฐ์ž (๋˜๋Š” ํ•ด๋‹น ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ์™ธ๋ถ€์˜ ๋ชจ๋“  ๊ฒƒ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…์„œ ๋Œ€์ˆ˜๋ฅผ ์ž„์‹œ๋กœ ์‹œํ–‰ํ•˜๋Š” ๊ฒƒ์€ ์‹ฌ๋ฏธ์ ์œผ๋กœ ๋งค์šฐ ๋ถˆ์พŒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋•Œ ์ œ๊ฐ€๋ฐ›์€ ๊ฐ€์žฅ ํฐ ๋ถˆ๋งŒ์€ (๊ทธ๋ฆฌ๊ณ  ์‹œ๋„๋Ÿฌ ์› ์Šต๋‹ˆ๋‹ค) 3๊ฐ€ ์˜๋ฏธ๋ก  (์ค‘๋ฆฝ ์ปฌ๋ ‰์…˜ ๊ฐœ๋… ์ถ”๊ฐ€)์ด ํ•ด๊ฒฐํ•˜๋Š” ๋ถˆํŽธ ํ•จ์˜ ์ข…๋ฅ˜์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ข‹์€! ๊ทธ ์•„์ด๋””์–ด๋Š” ๋‚˜์—๊ฒŒ ๊ฒฐ์ฝ” ๋– ์˜ค๋ฅด์ง€ ์•Š์•˜์ง€๋งŒ, ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์„ ๋ฐ–์œผ๋กœ ๋‚ด๋†“์•˜ ๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ์€ ๋„ˆ๋ฌด๋‚˜ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๊ทธ๋Ÿฌํ•œ ์‹œ์Šคํ…œ์„ ์ •๋ง๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ์ž‘์—…์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Julia๊ฐ€ ์ด๊ฒƒ์„ ์ˆ˜์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

์—ฌ๋Ÿฌ๋ถ„์ด ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜ ํ…์„œ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋‘ ๊ฐ€์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€ (์ปฌ๋ ‰์…˜ ๋ฐ ์„ ํ˜• ๋Œ€์ˆ˜)๊ฐ€ ํ›จ์”ฌ ๋” ์ผ๋ฐ˜์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์ด ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์žˆ๋Š” ๊ฒƒ์„ ์ •๋‹นํ™” ํ• ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉ ๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ง€์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฒกํ„ฐ ํ–‰๋ ฌ ๊ณฑ์…ˆ, ์Šค์นผ๋ผ ๋ฐฐ์—ด ๊ณฑ์…ˆ, ๋ฐฐ์—ด ๋ฐฐ์—ด์— ํ•˜๋‚˜์˜ ๋ฐฐ์—ด ์ถ”๊ฐ€ ๋ถ„๋ฐฐ ๋“ฑ๊ณผ ๊ฐ™์ด์ด ์‹œ์Šคํ…œ์—์„œ ๋ณผ ์ˆ˜์žˆ๋Š” ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๋‹น์‹ ์ด ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค David. ์šฐ๋ฆฌ๋Š” ์‹ค์ œ๋กœ ๋‘ ๊ฐ€์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Linear Algebra์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์€ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๋งํ•˜๋‹ค. ๊ทธ๊ณณ์—์„œ๋„ ๋‚˜๋Š” v์™€ v '๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ๊ฒƒ์„ ์˜นํ˜ธํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ •๋ง๋กœ ์›ํ•˜๋Š” ๊ฒƒ์€ (์—ฌ๊ธฐ์— ํƒ์š•์— ๋Œ€ํ•œ ๊ณต๊ฐœ ์‚ฝ์ž…) Tensors with
์ผ๋ฅ˜ (๋˜๋Š” ์ข…๊ฐ€) ์ƒํƒœ ... ๊ธฐ๋ณธ ์†๋„์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค (์ œํ•œ์ ์ธ ๊ฒฝ์šฐ,
์„ ํ˜• ๋Œ€์ˆ˜ ์„ฑ๋Šฅ๊ณผ ๋น„๊ต) ์‰ฌ์šด ๊ตฌ๋ฌธ์œผ๋กœ ๊ณผ์žฅ๋˜์ง€ ์•Š์Œ
์ž…๋ ฅ ๋ฌธ์ œ, ๋ฐ์ดํ„ฐ์— ์ธ์ฝ”๋”ฉ ๋œ ๊ณต / ๋ฐ˜๊ณต ๋ณ€์„ฑ์ด ์•„๋‹ˆ๋ผ
์—ฐ์‚ฐ์ž. ๋ฐ์ดํ„ฐ ์˜๋ฏธ๋ฅผ ์ •์˜ํ•˜๋ฉด ์ž‘์—…์€
๊ทธ๋ƒฅ ์ผ์ด์•ผ. Tensoral Duck ํƒ€์ดํ•‘.

์•„๋งˆ๋„ ํ…์„œ์™€ TDT๋Š” ์ฝ”์–ด๊ฐ€ ์•„๋‹Œ ํŒจํ‚ค์ง€์— ์†ํ•ฉ๋‹ˆ๋‹ค.
์ƒ๋Œ€์ ์ธ ์ธ๊ธฐ์˜ ๊ทผ๊ฑฐ. ๊ทธ๋Ÿฌ๋‚˜ Julia ์„ ์–ธ์ฒ˜๋Ÿผ
๋…๋ฆฝ์€ ์ค„๋ฆฌ์•„๋Š” ํƒ์š•์—์„œ ํƒœ์–ด ๋‚ฌ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. Gordon Gecko๊ฐ€ ๋งํ–ˆ๋“ฏ์ด
ํƒ์š•์ด ์ข‹๋‹ค. :)
2014 ๋…„ 3 ์›” 21 ์ผ ์˜ค์ „ 3:14์— "David Hagen" [email protected]์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„์ด ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ฐ˜ ํ…์„œ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด
ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์žˆ๋Š” ๊ฒƒ์„ ์ •๋‹นํ™”ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํžˆ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๋‘ ๊ฐ€์ง€ ์‚ฌ์šฉ ์‚ฌ๋ก€ (์ปฌ๋ ‰์…˜ ๋ฐ ์„ ํ˜• ๋Œ€์ˆ˜)๋Š” ํ›จ์”ฌ ๋”
ํ”ํ•œ. ๊ทธ๋Ÿฌ๋‚˜ ์›ํ™œํ•˜๊ฒŒ ํ†ตํ•ฉ ๋  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ง€์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋ช‡ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์ด ์–ด๋–ป๊ฒŒ ๋ณด์ผ์ง€์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ๋“ค์–ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ
์ด ์‹œ์Šคํ…œ์—์„œ ๋ฒกํ„ฐ ํ–‰๋ ฌ ๊ณฑ์…ˆ, ์Šค์นผ๋ผ ๋ฐฐ์—ด
๊ณฑ์…ˆ, ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์˜ ์ถ”๊ฐ€๋ฅผ ๋ฐฐ์—ด์˜ ๋ฐฐ์—ด์— ๋ถ„๋ฐฐ
๋ฐฐ์—ด ๋“ฑ?

์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ Gi tHub์—์„œ ํ™•์ธ ํ•˜์„ธ์š”.
.

ํ’๋ถ€ํ•œ ์œ ํ˜•์˜ ์ œํ’ˆ๊ตฐ์„ ๊ณ ๋ คํ•  ๋•Œ ์›ํ™œํ•œ ํ†ตํ•ฉ์ด ํ™•์‹คํžˆ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ Toivo์˜ https://github.com/JuliaLang/julia/issues/4774#issuecomment -32693110์„ ํ™•์žฅํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐœ๋…์ ์œผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

immutable AbstractTensorArray{T, N, UPMASK, DOWNMASK} <: AbstractArray{T, N}
    A::AbstractArray{T, N}
end
# where !any(UPMASK & DOWNMASK)

typealias AbstractColumnVector{T} AbstractTensorArray{T, 1, [true], [false]}
typealias AbstractRowVector{T} AbstractTensorArray{T, 1, [false], [true]}
typealias AbstractMatrix{T} AbstractTensorArray{T, 2, [false, true], [true, false]}

(ํ˜„์žฌ AbstractMatrix{T} ๋‹จ์ˆœํžˆ AbstractArray{T, 2} ๋ณ„์นญ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž ์žฌ์ ์œผ๋กœ ์—ฌ๊ธฐ์—์„œ ๋‹ค๋ฅธ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

์—ฌ๊ธฐ์—์„œ ๋‹ค์Œ ๊ตฌํ˜„์€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

  1. ์ผ๋ฐ˜ํ™” ๋œ transpose ๋ฉ”์„œ๋“œ๋Š” ์ฐจ์›๊ณผ ํ•ด๋‹น UPMASK ๋ฐ DOWNMASK ์ธ๋ฑ์Šค๋ฅผ ๋‹ค์‹œ ์ •๋ ฌ ํ•œ ํ›„ UPMASK์™€ DOWNMASK๋ฅผ ๊ตํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ค‘๋ฆฝ ์น˜์ˆ˜๋Š” ์˜ํ–ฅ์„๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. ๋ชจ๋“  AbstractArray{T, N} ํ•˜์œ„ ์œ ํ˜•์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ…์„œ ์ž‘์—…์—์„œ ํ•ด๋‹นํ•˜๋Š” ๋Œ€์ฒด AbstractTensorArray{T, N, [..., false, true, false, true], [..., true, false, true, false]} ํ•˜์œ„ ์œ ํ˜•์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ์— ๋Œ€ํ•œ Julia์˜ ํŠน๋ณ„ํ•œ ๋ฐฐ์—ด ๊ตฌ๋ฌธ์˜ ๊ธฐ์กด ์˜๋ฏธ๋ฅผ ๋ณด์กดํ•ฉ๋‹ˆ๋‹ค.
  3. AbstractTensorArray ๋Œ€ํ•œ ์ƒ์„ฑ์ž ๋ฉ”์„œ๋“œ (์˜ˆ : array )๋Š” ์ค‘๋ฆฝ ์ฐจ์›์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ ๋‹ค๋ฅธ AbstractTensorArray s (๋˜๋Š” ๋ณ€ํ™˜ ๊ฐ€๋Šฅํ•œ ์œ ํ˜•)๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ฒฐํ•ฉ ๋œ AbstractTensorArray ๋ฅผ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค AbstractTensorArray .

@drhagen ์˜ ์˜ˆ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

๋ฒกํ„ฐ ํ–‰๋ ฌ ๊ณฑ์…ˆ, ์Šค์นผ๋ผ ๋ฐฐ์—ด ๊ณฑ์…ˆ

c = 1               # Int
v = [1, 2]          # Array{Int, 1}
M = [[1, 2] [3, 4]] # Array{Int, 2}

# scalar-array
c * M               # UNCHANGED: *(Int, Array{Int, 2}) => Array{Int, 2}

# matrix-vector
M * v               # *(Array{Int, 2}, Array{Int, 1}) => *(Matrix{Int}, ColumnVector{Int}) => ColumnVector{Int}

# vector-matrix
v' * M              # transpose(Array{Int, 1}) => transpose(ColumnVector{Int}) => RowVector{Int}
                    # *(RowVector{Int}, Array{Int, 2}) => *(RowVector{Int}, Matrix{Int}) => RowVector{Int}

# (1-array)-(2-array)
v .* M              # UNCHANGED: .*(Array{Int, 1}, Array{Int, 2}) => Array{Int, 2}

( Matrix ์˜ AbstractMatrix ์ •์˜์— ํ•ด๋‹นํ•˜๋Š” ์ •์˜์™€ ํ•จ๊ป˜ Matrix ์‚ฌ์šฉ)

ํ•˜๋‚˜์˜ ์–ด๋ ˆ์ด ์ถ”๊ฐ€๋ฅผ ์–ด๋ ˆ์ด ์–ด๋ ˆ์ด์— ๋ถ„๋ฐฐ

์ด๊ฒƒ์€ ์˜๋ฏธ ์ƒ ๋ฒกํ„ฐ ๋ฐฐ์—ด์— ํ•˜๋‚˜์˜ ๋ฒกํ„ฐ ์ถ”๊ฐ€, ํ–‰๋ ฌ ๋ฐฐ์—ด์— ํ•˜๋‚˜์˜ ํ–‰๋ ฌ ์ถ”๊ฐ€ ๋“ฑ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

# vector-(vector-array)
ws = array([1, 2], [3, 4])
                    # TensorArray{Int, 2, [false, true], [false, false]}
v + ws              # +(Array{Int, 1}, TensorArray{Int, 2, [false, true], [false, false]}) => +(ColumnVector{Int}, TensorArray{Int, 2, [false, true], [false, false]}) => TensorArray{Int, 2, [false, true], [false, false]}
# => array([2, 4], [4, 6])

# array-(vector-array)
u = array(1, 2)     # TensorArray{Int, 1, [false], [false]}
u + ws              # +(TensorArray{Int, 1, [false], [false]}, TensorArray{Int, 2, [false, true], [false, false]}) => TensorArray{Int, 2, [false, true], [false, false]}
# => array([2, 3], [5, 6])
# alternatively:
v .+ ws             # .+(Array{Int, 1}, TensorArray{Int, 2, [false, true], [false, false]}) => TensorArray{Int, 2, [false, true], [false, false]}
# => array([2, 3], [5, 6])
# same effect, but meaning less clear:
v .+ M              # UNCHANGED: .+(Array{Int, 1}, Array{Int, 2}) => Array{Int, 2}
# => [[2, 4] [4, 6]]

# matrix-(matrix-array)
Ns = array([[1, 2] [3, 4]], [[5, 6] [7, 8]])
                    # TensorArray{Int, 2, [false, false, true], [false, true, false]}
M + Ns              # +(Array{Int, 2}, TensorArray{Int, 2, [false, false, true], [false, true, false]}) => +(Matrix{Int}, TensorArray{Int, 2, [false, false, true], [false, true, false]}) => TensorArray{Int, 2, [false, false, true], [false, true, false]}
# => array([[2, 4] [6, 8]], [[6, 8] [10, 12]])

์ตœ์ข… ๊ฒฐ๊ณผ x'M*w1*v, x'M*w2*v, ... ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ 2 ์ฐจ ํ˜•์‹ x'M*w1, x'M*w2, ... ์œผ๋กœ ๋ฒกํ„ฐ v ๋ฐฐ์œจ์„ ์กฐ์ •ํ•˜๋Š” ์ด์ „ ์˜ˆ์ œ๋ฅผ ๊ณ ๋ คํ•ด๋ณด์‹ญ์‹œ์˜ค.

x = v
x' * M * ws * v     # *(RowVector{Int}, Array{Int, 2}) => *(RowVector{Int}, Matrix{Int}) => RowVector{Int}
                    # *(RowVector{Int}, TensorArray{Int, 2, [false, true], [false, false]}) => TensorArray{Int, 1, [false], [false]}
                    # *(TensorArray{Int, 1, [false], [false]}, Array{Int, 1}) => *(TensorArray{Int, 1, [false], [false]}, ColumnVector{Int}) => TensorArray{Int, 1, [false, true], [false, false]}
# => array([27, 54], [59, 118])

์ด ๊ฐœ๋…์  ๊ตฌํ˜„์—์„œ๋Š” AbstractArray ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ์œผ๋ฏ€๋กœ AbstractTensorArray ๊ฐ€ ์œ ํ˜• ๊ณ„์ธต ๊ตฌ์กฐ์—์„œ ์ž์ฒด "๊ณต๊ฐ„"์„ ํ˜•์„ฑํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด AbstractArray ํŒจ๋ฐ€๋ฆฌ๊ฐ€ ๋‹จ์ˆœํžˆ AbstractTensorArray ๋กœ ๋Œ€์ฒด๋˜๋ฉด ์ƒํ™ฉ์ด ๋‹จ์ˆœํ™” ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ๋˜ ๋‹ค๋ฅธ ๋…ผ์˜์ž…๋‹ˆ๋‹ค.

์–‘์ž ๋ฌผ๋ฆฌํ•™์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ์œ„ํ•œ ํŒจํ‚ค์ง€์˜ ๋งฅ๋ฝ์—์„œ, ๋‚˜๋Š” ๋‚ด ์ž์‹ ์˜ ํ…์„œ ์œ ํ˜• (์‹ค์ œ๋กœ๋Š” ๋‘˜ ์ด์ƒ)์„ ์ •์˜ํ•˜๋Š” ๋ฐ ๋†€์•„์™”๋‹ค. ์ฒ˜์Œ์—๋Š” ๋‘ ๊ฐ€์ง€ ์œ ํ˜• (์œ„์ชฝ ๋ฐ ์•„๋ž˜์ชฝ, ์ˆ˜์‹  ๋ฐ ๋ฐœ์‹ , ๊ณต๋ณ€ ๋ฐ ๋ฐ˜๋ฐ˜ ๋ณ€์„ฑ)์œผ๋กœ ์˜ค๋Š” ์ธ๋ฑ์Šค์— ๋Œ€ํ•œ ๊ฐœ๋…๋„์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.์ด ์ •๋ณด๋Š” ์œ ํ˜•์˜ ํ•„๋“œ ๋˜๋Š” ์œ ํ˜• ๋งค๊ฐœ ๋ณ€์ˆ˜. ์ž ์‹œ ํ›„ ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋งค์šฐ ๋ฒˆ๊ฑฐ ๋กญ๋‹ค๊ณ  ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…์„œ์˜ ์ธ๋ฑ์Šค๋ฅผ ๋ฒกํ„ฐ ๊ณต๊ฐ„ (๋‚ด๊ฐ€ ์ด๋ฏธํ–ˆ๋˜)์— ์—ฐ๊ด€์‹œํ‚ค๊ณ ์ด ๋ฒกํ„ฐ ๊ณต๊ฐ„์ด ๋‹ค๋ฅธ ์ด์ค‘์„ ๊ฐ–๋„๋กํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋ฒกํ„ฐ ๊ณต๊ฐ„์ด๋ž€ ๊ณต๊ฐ„์˜ ์ฐจ์›๊ณผ ์ด์ค‘ ์—ฌ๋ถ€๋ฅผ ๊ฐ์‹ธ๋Š” ๋‹จ์ˆœํ•œ ์ค„๋ฆฌ์•„ ์œ ํ˜•์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ…์„œ ์ธ๋ฑ์Šค๊ฐ€ ์ผ๋ฐ˜ ๋ฒกํ„ฐ ๊ณต๊ฐ„์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด ์—… ์ธ๋ฑ์Šค์ด๊ณ  ์ด์ค‘ ์ธ๋ฑ์Šค์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด ๋‹ค์šด ์ธ๋ฑ์Šค์ž…๋‹ˆ๋‹ค. ๊ตฌ๋ณ„์ด์—†๋Š” ํ…์„œ / ๋ฐฐ์—ด๋กœ ์ž‘์—…ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ? ์ผ๋ฐ˜ ๋ฒกํ„ฐ ๊ณต๊ฐ„๊ณผ ์ด์ค‘ ๊ณต๊ฐ„์„ ๊ตฌ๋ณ„ํ•˜์ง€ ์•Š๋Š” ๋‹ค๋ฅธ ๋ฒกํ„ฐ ๊ณต๊ฐ„ ์œ ํ˜•์„ ์ •์˜ํ•˜๊ธฐ ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

์ด ์ œ์•ˆ์—์„œ๋Š” ์„œ๋กœ ์ด์ค‘ ์ธ ๋ฒกํ„ฐ ๊ณต๊ฐ„๊ณผ ๊ด€๋ จ๋œ ํ…์„œ ์ธ๋ฑ์Šค ๋งŒ ๊ณ„์•ฝ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ctranspose (= Hermitian conjugation)๋Š” ๋ชจ๋“  ์ธ๋ฑ์Šค์˜ ๋ฒกํ„ฐ ๊ณต๊ฐ„์„ ์ด์ค‘์œผ๋กœ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค (ํ–‰๋ ฌ์˜ ๊ฒฝ์šฐ ์ธ๋ฑ์Šค์˜ ์ˆœ์—ด ๋ฐ ๊ณ ์ฐจ ํ…์„œ์— ๋Œ€ํ•œ ์„ ํ˜ธ ์ •์˜์™€ ํ•จ๊ป˜) ๋“ฑ.

๋ฌผ๋ก , ์ •์ƒ์ ์ธ ์ „์น˜์™€ ๋ณตํ•ฉ ํ™œ์šฉ์€์ด ์„ค์ •์—์„œ ์‹ค์ œ๋กœ ์ž˜ ์ •์˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (์ฆ‰, ์ด๋“ค์€ ๊ธฐ๋ณธ ๋…๋ฆฝ์  ๊ฐœ๋…์ด ์•„๋‹™๋‹ˆ๋‹ค).

์ตœ์†Œํ•œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ž…๋‹ˆ๋‹ค.

immutable Space
    dim::Int
    dual::Bool
end
Space(dim::Int)=Space(dim,false) # assume normal vector space by default
dual(s::Space)=Space(s.dim,!s.dual)

matrix=Tensor((Space(3),dual(Space(5))))
# size is no longer sufficient to characterise the tensor and needs to be replaced by space
space(matrix) # returns (Space(3),dual(Space(5))) 
space(matrix') # returns (Space(5),dual(Space(3)))

๋ฌผ๋ก  Space๋ฅผ ์ง€์†์ ์œผ๋กœ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†๋„๋ก ๋ช‡ ๊ฐ€์ง€ ๊ตฌ๋ฌธ์„ ๋ฐœ๋ช… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. up๊ณผ down ์ธ๋ฑ์Šค ๋“ฑ์„ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ํ…์„œ๋ฅผ ๊ฐ–๊ธฐ ์œ„ํ•ด dual (s) == s ์ธ ๋‹ค๋ฅธ ๊ณต๊ฐ„ ์œ ํ˜•์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌผ๋ก  ์ด๊ฒƒ์ด ๋ชจ๋“  ๊ฒƒ์„ ๊นจ์ง€ ์•Š๊ณ  Julia์˜ ํ‘œ์ค€ ๋ฐฐ์—ด ์œ ํ˜•์— ์—ฌ์ „ํžˆ ๋‚ด์žฅ ๋  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค ...

์ €๋Š” ํ•ญ์ƒ ๊ณตํ•™ / ๋ฌผ๋ฆฌํ•™์—์„œ ํ…์„œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ˆ˜ํ•™์  ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ๊ทธ๋žจ์—์„œ ํ…์„œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์‚ฌ์ด์— ๋ฐ€์ ‘ํ•œ ๊ด€๊ณ„๊ฐ€์—†๋Š” ์ด์œ ๊ฐ€ ๊ถ๊ธˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฃผ์ œ์— ๋Œ€ํ•œ ํฅ๋ฏธ๋กœ์šด ์Šคํƒ ๊ตํ™˜ ๋Œ€ํ™”๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค ... http://math.stackexchange.com/questions/412423/differences-between-a-matrix-and-a-tensor. ์—ฌ๊ธฐ๋„ ์ข‹์€ ์ฐธ๊ณ  ๊ฒŒ์‹œ๋ฌผ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
http://www.mat.univie.ac.at/~neum/physfaq/topics/tensors

์ €๋Š” ๋งค์ผ์˜ ๊ณผํ•™ ์ปดํ“จํŒ…์— Matlab์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€๋งŒ Julia์—์„œ๋Š” ์ดˆ๋ณด์ž์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ๊ณ ์ฐจ์› ๋ฐฐ์—ด ๊ณฑ์…ˆ ๋ฐ ์ „์น˜ ๋˜๋Š” ๊ธฐํƒ€ ์œ ์‚ฌํ•œ ๋ฐฐ์—ด ์ž‘์—…์— ๋Œ€ํ•œ ๋งŽ์€ ๋…ผ์˜๊ฐ€ ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. http://www.mathworks.com/matlabcentral/fileexchange/8773-multiple-matrix-multiplications--with-array-expansion-enabled๋ฅผ ์‚ดํŽด๋ณผ ๊ฒƒ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค

๊ธฐ๋ณธ์ ์œผ๋กœ @drhagen ์ด ์ด์ „ ๊ฒŒ์‹œ๋ฌผ์—์„œ ์–ธ๊ธ‰ ํ•œ ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ๊ตฌ๋ฌธ์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด array_product (A, B, inner_A_dim = [1, 2], inner_B_dim = [3, 4]) ๋Š” ๋ฐฐ์—ด A์™€ B ์‚ฌ์ด์˜ ์ œํ’ˆ์ž…๋‹ˆ๋‹ค. ์ฃผ์–ด์ง„ ๋‚ด๋ถ€ ์ฐจ์›.

์ด๊ฒƒ์€ ์„ ํƒํ•œ ์ฐจ์›์— ๊ณฑ์…ˆ ๋˜๋Š” ์ „์น˜ ์—ฐ์‚ฐ์„ ์ ์šฉ ํ•  ์ˆ˜์žˆ๋Š” ํ•˜๋‚˜์˜ Matlab ํŒจํ‚ค์ง€์ž…๋‹ˆ๋‹ค. Matlab์—์„œ ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์„ค๋ช…์„œ๊ฐ€ ํŒจํ‚ค์ง€์— ์žˆ์ง€๋งŒ ์ˆ˜ํ•™ ์ด๋ก ์€ ๋‹ค๋ฅธ ์–ธ์–ด์—๋„ ์ ์šฉ๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ์•„์ด๋””์–ด๋Š” For ๋ฃจํ”„ ์‚ฌ์šฉ์„ ํ”ผํ•˜๊ณ  ๋Œ€๋ถ€๋ถ„ ๋ฐฐ์—ด ์žฌ๊ตฌ์„ฑ ๋“ฑ์— ์˜์กดํ•˜์—ฌ ๋ฐฐ์—ด ์ž‘์—…์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Matlab์—์„œ๋Š” ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค. Julia๊ฐ€ ๋ฒกํ„ฐํ™” ์ž‘์—…์„ ๋” ์ข‹์•„ํ•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด ๋น„ ๋ฒกํ„ฐํ™” ์ž‘์—…์„ ๋” ์ข‹์•„ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค (๋‚˜์ค‘์˜ ์ž‘์—… ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค). ์ฝ”์–ด๊ฐ€ ์ง€์›ํ•œ๋‹ค๋ฉด ๋ฒกํ„ฐํ™” ์—ฐ์‚ฐ์ด ๊ณ ์ฐจ์› ๋ฐฐ์—ด ์—ฐ์‚ฐ์— ์œ ๋ฆฌํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๋ฐฐ์—ด ์ž‘์—…์„ ์ง„์‹ฌ์œผ๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ : INV ์ž‘์—…์„์œ„ํ•œ Matlab์˜ ๋˜ ๋‹ค๋ฅธ ์œ ์‚ฌํ•œ ๊ตฌํ˜„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. http://www.mathworks.com/matlabcentral/fileexchange/31222-inversion-every-2d-slice-for-arbitrary-multi-dimension-array

๋˜ํ•œ 2005 ๋…„ Matlab ์–ด๋ ˆ์ด ์šด์˜ ์ง€์› ํŒจํ‚ค์ง€ ์ถœ์‹œ ์ดํ›„ ๋‹ค์šด๋กœ๋“œ ๊ธฐ๋ก์€ ํ˜„์žฌ๊นŒ์ง€ ๋†’์€ ์ˆ˜์ค€์œผ๋กœ ์œ ์ง€๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ๊ฒฝํ—˜๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐฐ์—ด ์ž‘์—…์€ ๋ฌผ๋ฆฌํ•™ ๋ฐ ๊ธฐํƒ€ ์˜์—ญ์—์„œ ๋งค์šฐ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ค„๋ฆฌ์•„๊ฐ€ ์ž„์˜์˜ ํฌ๊ธฐ๋กœ ๋ฐฐ์—ด์„ ์šด์˜ํ•˜๋Š” ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๊ฒŒ์ž„์ด ๋งค์šฐ ํฅ๋ฏธ๋กœ์›Œ ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

@alanedelman ์˜ ์ œ์•ˆ ๋œ ์†”๋ฃจ์…˜์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ํˆฌํ‘œ. ์—ฌ๊ธฐ์— ๋™๊ธฐ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ์˜ˆ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ํ–‰ ์Šฌ๋ผ์ด์Šค๋Š” 2d ๋ฐฐ์—ด์ด๊ณ  ์—ด ์Šฌ๋ผ์ด์Šค๋Š” 1d ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. ์ด์ƒํ•˜๊ฒŒ ๋น„๋Œ€์นญ์ด๊ณ  ์ถ”ํ•ฉ๋‹ˆ๋‹ค.

julia> A = randn(4,4)
4x4 Array{Float64,2}:
  2.12422    0.317163   1.32883    0.967186
 -1.0433     1.44236   -0.822905  -0.130768
 -0.382788  -1.16978   -0.19184   -1.15773
 -1.2865     1.21368   -0.747717  -0.66303

julia> x = A[:,1]
4-element Array{Float64,1}:
  2.12422
 -1.0433
 -0.382788
 -1.2865

julia> y = A[1,:]
1x4 Array{Float64,2}:
 2.12422  0.317163  1.32883  0.967186

ํŠนํžˆ, ๊ทธ๊ฒƒ์€ ๋‚ด๊ฐ€ ํ–‰์— ์—ด์„ ๊ณฑํ•˜๊ณ  ์ˆซ์ž๋ฅผ ์ถ”์ถœ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

julia> dot(y[:],x)
2.4284575954571106
julia> (y*x)[1]
2.42845759545711

'* ๋ฅผ ํŠน์ˆ˜ ์—ฐ์‚ฐ์ž๋กœ ์ง€์ •ํ•˜์ง€ ์•Š๋Š” ํ•œ ์ผ๊ด€๋œ ์ œ์•ˆ์ด ์•„๋‹™๋‹ˆ๋‹ค. x'*y ์™€ (x')*y ๋Š” ๊ฐ™์€ ์˜๋ฏธ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋ชจํ˜ธํ•ฉ๋‹ˆ๋‹ค. ๋”์šฑ์ด ๊ณฑ์…ˆ์„ ๋น„์—ฐ ๊ด€์ ์œผ๋กœ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” x_y '์™€ y'_x์˜ ์–ด๋ ค์›€์„ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค. ์น˜๋ฃŒํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
์˜ˆ๋ฅผ ๋“ค์–ด dot ()์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ถ€ ๋ฐ ์™ธ๋ถ€ ์ œํ’ˆ์„ ๋ณ„๋„์˜ ์ž‘์—…์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (ํ˜น์‹œ
๋˜ํ•œ cdot๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?)

๊ทธ๋Ÿฌ๋‚˜ ์ฒซ ๋ฒˆ์งธ๋ฅผ ๋”ฐ๋ผ ์Šฌ๋ผ์ด์Šค๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์— ์ฐฌ์„ฑํ•˜๋Š” ์ฃผ์žฅ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์ฐจ์›์€ ์ฐจ์›์ด ์Šฌ๋ผ์ด์Šค์™€ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
๋‘ ๋ฒˆ์งธ ์ฐจ์›? ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ์Šฌ๋ผ์ด์Šค ํ•  ๋•Œ๋งˆ๋‹ค
๊ฒฐ๊ณผ ๊ฐœ์ฒด์˜ ํฌ๊ธฐ๋Š” 1๋งŒํผ ๊ฐ์†Œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

2014 ๋…„ 7 ์›” 16 ์ผ ์ˆ˜์š”์ผ ์˜คํ›„ 8์‹œ 17 ๋ถ„, Stefan Karpinski [email protected]
์ผ๋‹ค :

'*๋ฅผ ํŠน์ˆ˜ ์—ฐ์‚ฐ์ž๋กœ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ผ๊ด€๋œ ์ œ์•ˆ์ด ์•„๋‹™๋‹ˆ๋‹ค.
x'_y์™€ (x ') _ y๋Š” ๊ฐ™์€ ์˜๋ฏธ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฝค ๋ชจํ˜ธํ•ฉ๋‹ˆ๋‹ค.
๋”์šฑ์ด ๊ณฑ์…ˆ์„ ๋น„์—ฐ ๊ด€์ ์œผ๋กœ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/JuliaLang/julia/issues/4774#issuecomment -49254346.

๋งˆ๋“ค๋ Œ ์šฐ๋ธ
์ „์‚ฐ ๋ฐ ์ˆ˜ํ•™ ๊ณตํ•™ ๋ฐ•์‚ฌ ๊ณผ์ •
์Šคํƒ ํฌ๋“œ ๋Œ€ํ•™๊ต
www.stanford.edu/~udell

@madeleineudell , ๋™์˜ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. # 5949๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ๊ทธ ๋ฌธ์ œ๋Š” ์ข…๊ฒฐ ๋œ ๊ฒƒ ๊ฐ™์ง€๋งŒ ๋ช…ํ™•ํ•œ ํ•ฉ์˜ ๋‚˜ ๊ฒฐ๋ก ์ด ์žˆ์—ˆ๋˜ ๊ธฐ์–ต์ด ์—†์Šต๋‹ˆ๋‹ค.

๋ฐฐ์—ด๋ณด๊ธฐ๋กœ ์ „ํ™˜ํ•˜๋ฉด ํ•ด๋‹น ๋ฐฉํ–ฅ์„ ํƒ์ƒ‰ํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค. ํŠนํžˆ slice(A, i, :) ๋ผ๊ณ  ๋งํ•˜๋ฉด ์›ํ•˜๋Š” ๋™์ž‘์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ง€๊ธˆ์€ ๊ทธ๋ ‡๊ฒŒ๋˜์ง€๋งŒ ๋” ๋Š๋ฆฐ ์œ ํ˜• ์ธ SubArray๋ฅผ ๋„์ž…ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.)

์ˆœ์ „ํžˆ ์ˆ˜ํ•™์  ๊ด€์ ์—์„œ, ์—ฌ๊ธฐ์— ์ œ์‹œ๋œ ๋ชจ๋“  ๋ฌธ์ œ๋Š” ๋ฐฐ์—ด์ด ์˜๋ฏธํ•˜๋Š” ๊ฒƒ๊ณผ ๋ฒกํ„ฐ / ํ…์„œ / ํ–‰๋ ฌ์ด ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์˜ ์œตํ•ฉ (๋ฐ ํ˜ผ๋™)์—์„œ ๋น„๋กฏ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋…์ ์œผ๋กœ ๋ฐฐ์—ด์€ ๋‹จ์ˆœํžˆ ๋ชฉ๋ก (๋˜๋Š” n ์ฐจ์› ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ๋ชฉ๋ก ๋ชฉ๋ก)์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฐฐ์—ด ๊ณฑ์…ˆ, ์ „์น˜ ๋“ฑ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ์ž์—ฐ์ ์ธ ์‚ฌ์–‘์€ ์—†์Šต๋‹ˆ๋‹ค. ์ˆœ์—ด, ์š”์†Œ ๋ณ„ ์—ฐ์‚ฐ, ์ถ•๋ณ„ ์—ฐ์‚ฐ (ํ‰๊ท , ์ค‘์•™๊ฐ’ ๋“ฑ)๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋Š” ์˜๋ฏธ๊ฐ€ ์žˆ์œผ๋ฉฐ a์—์„œ ๊ณ ์œ ํ•˜๊ฒŒ ์ •์˜ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์—ฐ์Šค๋Ÿฌ์šด ๋ฐฉ์‹์œผ๋กœ ๋‚ด์ ๊ณผ ๊ฐ™์€ ์ž‘์—…์€ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋ฒกํ„ฐ์™€ ํ…์„œ๋Š” ๊ธฐํ•˜ํ•™์  ๊ฐ์ฒด์ด๋ฉฐ ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ํ‘œํ˜„์€ ํ‘œํ˜„ํ•˜๋Š” ์ˆ˜ํ•™์  ๊ฐ์ฒด์™€ ๋™์ผํ•œ ๊ตฌ์กฐ์˜ ํ’๋ถ€ํ•จ์„ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. 1 ์ฐจ์› ๋ฐฐ์—ด์˜ ์ „์น˜๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์˜ ์ „์น˜๋Š” ์ด์ค‘์ž…๋‹ˆ๋‹ค. 2 ์ฐจ์› ๋ฐฐ์—ด์˜ ์ „์น˜๋Š” ์ฐจ์›์˜ ์ˆœ์—ด๋กœ ๊ณ ์œ ํ•˜๊ณ  ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ •์˜ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ํ…์„œ์—๋Š” ํ•ด๋‹น๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž์—ฐ ์‚ฌ๋ก€๋Š” ์ˆœ์œ„ (1,1) ํ…์„œ (์ผ๋ช…, ํ–‰๋ ฌ)์— ๋Œ€ํ•ด ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. rank (2,0) tensor๋Š” rank (0,2) tensor๋กœ ์ „์น˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ํ…์„œ๋ฅผ ๋ฐฐ์—ด๋กœ ์ทจ๊ธ‰ํ•˜๋ฉด ํ…์„œ๋ฅผ ํ…์„œ๋กœ ๋งŒ๋“œ๋Š” ๊ธฐํ•˜ํ•™์  ์ •๋ณด๊ฐ€ ์†์‹ค๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚ด์ ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์„ ์ •์˜ ํ•  ๋•Œ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด์ ์€ ํŠน์ • ๊ธฐํ•˜ํ•™์  ์˜๋ฏธ (๋‘ ๋ฒˆ์งธ ๋ฒกํ„ฐ์— ์˜ํ•ด ์ •์˜ ๋œ ์ด์ค‘ ๊ณต๊ฐ„์— ํ•œ ๋ฒกํ„ฐ์˜ ํˆฌ์˜)๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๋‚ด์ ์˜ ์ผ๊ด€๋œ ์ •์˜๋ฅผ ์œ„ํ•ด์„œ๋Š” ๋ฒกํ„ฐ์— ํฌํ•จ ๋œ ๊ธฐํ•˜ํ•™์  ์ •๋ณด๋ฅผ ๋ณด์กดํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ๊ฐ€์ •์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์—ฌ์ „ํžˆ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๊ฐ€์ •์€ (์ด ์Šค๋ ˆ๋“œ์˜ ๋‹ค์–‘ํ•œ ์ œ์•ˆ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด) ์ง€์ €๋ถ„ํ•˜๊ณ  ์‹ค์ œ๋กœ ํ…์„œ์˜ ํ’๋ถ€ํ•œ ๊ตฌ์กฐ๋ฅผ ํ•„์š”๋กœํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ผ์„ ๋” ์–ด๋ ต๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. .

๋”ฐ๋ผ์„œ ๋” ํ’๋ถ€ํ•œ AbstractTensor ์œ ํ˜•์„ ํฌํ•จํ•˜๊ธฐ์œ„ํ•œ thomasmcoffee์˜ ์ œ์•ˆ์— ์ฐฌ์„ฑํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ํˆฌํ‘œ๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ญ์‹œ์˜ค. ๊ฐœ์ธ์ ์œผ๋กœ ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ์€ ์ „์น˜ ๋ฐ ๋‚ด์ ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์ด ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ ๊ด€์ ์„ ๊ณต์œ ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฏ€๋กœ ์ตœ์†Œํ•œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ง„์ •ํ•œ ํ…์„œ๋ฅผ ์ƒ์„ฑ ํ•  ์ˆ˜์žˆ๋Š” ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ด€์ ์˜ ์‹ค์งˆ์ ์ธ ์˜๋ฏธ๋Š” ๋ฐฐ์—ด์ด ํ…์„œ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์œผ๋กœ ์‹๋ณ„๋˜์–ด์•ผํ•˜๊ณ  1 ์ฐจ์› ๋ฐฐ์—ด์„ ์ „์น˜ํ•˜๋ฉด DualVector ๋˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด ๊ฒฌํ•ด๋Š” ์ด๊ฒƒ์ด ๋ณต์†Œ์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ์‹ค์ˆ˜์— ๋Œ€ํ•œ ์—ฐ์‚ฐ๊ณผ ์œ ์‚ฌํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด ๊ด€์ ์€ (๋‹ค์ฐจ์›) ๋ฐ์ดํ„ฐ ์ปจํ…Œ์ด๋„ˆ ์ธ ์ผ๋ฐ˜ AbstractArray ์ œํ’ˆ๊ตฐ์ด ๋ชจ๋“  ๊ธฐ์ˆ  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์—†์–ด์„œ๋Š” ์•ˆ๋  ๋ถ€๋ถ„์ด ๋ ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์ผ๋ฐ˜์ ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—„๊ฒฉํ•œ ์ˆ˜ํ•™์  ๊ทœ์น™์„ ๋”ฐ๋ฅด๋Š” ํ…์„œ๋Š” ๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ ๋งค์šฐ ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋”๋ผ๋„ ์ „์šฉ ํŒจํ‚ค์ง€๋ฅผ์œ„ํ•œ ์ข‹์€ ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค, https://github.com/Jutho/TensorToolbox.jl ์—์„œ @jdbates ๊ฐ€ ์ง€์ •ํ•œ ์ค„์„ ๋”ฐ๋ผ ์ž‘์—…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค . ์ง€๊ธˆ๊นŒ์ง€ ๋ฌธ์„œํ™”๋˜์ง€ ์•Š์•˜์œผ๋ฉฐ ๋Œ€๋ถ€๋ถ„ ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์–‘์ž ๋งŽ์€ ์‹ ์ฒด ๋ฌผ๋ฆฌํ•™์—์„œ ๊ฐœ์ธ์ ์œผ๋กœ ํ•„์š”ํ•œ ๊ฒƒ๋“ค์„ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ์ผ์ง€ ๋งŒ, ํ…์„œ ์ž‘์—…์— ๊ด€์‹ฌ์ด์žˆ๋Š” ๋” ํฐ ์ˆ˜ํ•™์ž ๋ฐ ๋ฌผ๋ฆฌํ•™ ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์œ ์šฉ ํ• ๋งŒํผ ์ถฉ๋ถ„ํžˆ ์ผ๋ฐ˜์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด (JuliaQuantum ํฌ๋Ÿผ์—์„œ ๋ณต์‚ฌ) : Julia์˜ AbstractArray ์œ ํ˜•๊ณผ ๋…๋ฆฝ์  ์ธ ํ…์„œ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์œ ํ˜• ๊ณ„์ธต์„ ์ •์˜ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค (๊ธฐ๋ณธ Tensor๋Š” ๋ฐฐ์—ด์˜ ๋ž˜ํผ ์ผ ๋ฟ์ž„). ์ด ์œ ํ˜• ๊ณ„์ธต์€ ์•ฝ๊ฐ„ ๋” ๊ณต์‹์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ…์„œ ์ธ๋ฑ์Šค๋Š” ๋ฒกํ„ฐ ๊ณต๊ฐ„ (์ดํ›„ ์ธ๋ฑ์Šค ๊ณต๊ฐ„์ด๋ผ๊ณ  ํ•จ)๊ณผ ์—ฐ๊ด€๋˜๋ฉฐ, ํ…์„œ ์ธ๋ฑ์Šค๊ฐ€ ์—ฐ๊ด€๋˜๋Š” ๋ฒกํ„ฐ ๊ณต๊ฐ„ ์œ ํ˜•์ด ์ด์ค‘๊ณผ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ์ด๋Š” ๊ณต๋ณ€ ๋ฐ ๋ฐ˜ ๋ณ€์„ฑ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ํ…์„œ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ํŒจํ‚ค์ง€์˜ ์ฒซ ๋ฒˆ์งธ ๋ถ€๋ถ„์€ ๋ฒกํ„ฐ ๊ณต๊ฐ„์„ ์ •์˜ํ•˜๋Š” ์ถ”์ƒ์  ์ธ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ Julia ๊ฐ์ฒด์˜ ์œ ํ˜• ๊ณ„์ธต์„ ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์ˆ˜ํ•™์  ๊ณ„์ธต๊ณผ ์ผ์น˜์‹œํ‚ต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ๋ฒกํ„ฐ ๊ณต๊ฐ„ V๋Š” V์— ๋Œ€ํ•œ ์ผ๋ฐ˜ ์„ ํ˜• ๊ทธ๋ฃน์˜ ํ‘œํ˜„ ์ด๋ก , ์ฆ‰ V ์ž์ฒด (๊ธฐ๋ณธ ํ‘œํ˜„), conj (V), ์ด์ค‘ (V) ๋ฐ ์ด์ค‘ (conj (V))์— ํ•ด๋‹นํ•˜๋Š” ๋„ค ๊ฐ€์ง€ ์œ ํ˜•์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์‹ค์ˆ˜ ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ๊ฒฝ์šฐ conj (V) = V์ด๊ณ  ๋ฐ˜ ๋ณ€์„ฑ ๋ฐ ๊ณต๋ณ€ ๋ฒกํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” V ๋ฐ ์ด์ค‘ (V) ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‚ด๋ถ€ ๊ณฑ ๊ณต๊ฐ„์ด ์žˆ์œผ๋ฉฐ ๊ณ„์ธต ๊ตฌ์กฐ์˜ ์ตœ์ƒ์œ„ ์ˆ˜์ค€์—๋Š” ํ‘œ์ค€ ์œ ํด๋ฆฌ๋“œ ๋‚ด๋ถ€ ๊ณฑ (์ฆ‰, ์ง๊ต ๊ธฐ์ €)์„ ๊ฐ–๋Š” ๋‚ด๋ถ€ ๊ณฑ ๊ณต๊ฐ„ ์ธ ์œ ํด๋ฆฌ๋“œ ๊ณต๊ฐ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ฆฌํ•™์—์„œ ๋‹ค๋ฅธ ์„นํ„ฐ๋กœ ๋ถ„ํ•ด๋˜๋Š” ๋ฒกํ„ฐ ๊ณต๊ฐ„์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ๋„ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋Œ€์นญ ๋™์ž‘์˜ ์ถ•์†Œ ๋ถˆ๊ฐ€๋Šฅํ•œ ํ‘œํ˜„์— ์˜ํ•ด ๋“ฑ๊ธ‰์ด ๋งค๊ฒจ์ง‘๋‹ˆ๋‹ค.

ํ…์„œ๋Š” ์ผ๋ถ€ ๊ธฐ๋ณธ ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ํ…์„œ ๊ณฑ (๋ถ€๋ถ„ ๊ณต๊ฐ„)์— ์‚ด๊ณ ์žˆ๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ธ๋ฑ์Šค ๊ณต๊ฐ„์˜ ํ…์„œ ์ œํ’ˆ ๊ณต๊ฐ„์— ์‚ฌ๋Š” ๊ฐ์ฒด ์ธ ํ‘œ์ค€ Tensor๋ฅผ ์ œ์™ธํ•˜๊ณ , ์˜ˆ๋ฅผ ๋“ค์–ด irreps์— ์˜ํ•ด ๋“ฑ๊ธ‰์ด ๋งค๊ฒจ์ง„ ๊ณต๊ฐ„์˜ ํ…์„œ ๊ณฑ์˜ ๋ถˆ๋ณ€ ์„นํ„ฐ์— ์‚ฌ๋Š” ํ…์„œ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•œ ๊ณต๊ฐ„์˜ ํ…์„œ ๊ณฑ, ... ํ•˜๋‚˜๋Š” ํŽ˜๋ฅด๋ฏธ์˜จ ๋ฒกํ„ฐ ๊ณต๊ฐ„์„ ์ธ๋ฑ์Šค ๊ณต๊ฐ„์œผ๋กœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ํ…์„œ ์ธ๋ฑ์Šค์˜ ์ˆœ์—ด์ด ํŒจ๋ฆฌํ‹ฐ ์„นํ„ฐ ๋“ฑ์— ๋”ฐ๋ผ ํŠน์ • ๋ถ€ํ˜ธ ๋ณ€ํ™”๋ฅผ ์œ ๋„ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ํ…์„œ์— ๋Œ€ํ•ด ์ •์˜ ๋œ ํŠน์ • ์—ฐ์‚ฐ์ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ถ•์†Œ ํ…์„œ์ด์ง€๋งŒ, ์˜ˆ๋ฅผ ๋“ค์–ด ์ง๊ต ๋ถ„ํ•ด (๋‹จ์ผ ๊ฐ’ ๋ถ„ํ•ด) ๋“ฑ์ž…๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ ํ•˜๋‚˜์˜ ํ…์„œ๋ฅผ ๋‹ค๋ฅธ ํ…์„œ์— ๋งคํ•‘ํ•˜๋Š” ์„ ํ˜• ๋งต์ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ–‰๋ ฌ๋กœ ์™„์ „ํžˆ ์ธ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฐ˜๋ณต์  ๋ฐฉ๋ฒ• (Lanczos ๋“ฑ)์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ–‰๋ ฌ ๋ฒกํ„ฐ ๊ณฑ์„ ํšจ์œจ์ ์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ํŠน๋ณ„ํ•œ ์œ ํ˜•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๋‚ด ๋‘ ๊ฐœ์˜ ๊ธฐ์กด ํŒจํ‚ค์ง€ (TensorOperations.jl ๋ฐ LinearMaps.jl)๋Š” ํ‘œ์ค€ ๋ฐฐ์—ด์— ๋Œ€ํ•ด์ด ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์ถ•์ค‘์ธ ํ…์„œ ๋„๊ตฌ ์ƒ์ž๋Š” ์ƒˆ๋กœ์šด AbstractTensor ๊ณ„์ธต์— ๋Œ€ํ•ด ์˜ค๋ฒ„๋กœ๋“œ / ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŒจํ‚ค์ง€๊ฐ€ ๋” ๋„“์€ ๋ฌผ๋ฆฌ / ์ˆ˜ํ•™ ์ปค๋ฎค๋‹ˆํ‹ฐ์—๋„ ์œ ์šฉ ํ•  ์ •๋„๋กœ ์ถฉ๋ถ„ํžˆ ์ผ๋ฐ˜์  ์ด๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋งค๋‹ˆ ํด๋“œ ์ž‘์—…์„์œ„ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์˜ค๋ฉด ๊ทธ๋Š” TangentSpace ๋ฒกํ„ฐ ๊ณต๊ฐ„์„ ์ถ”์ƒ InnerProductSpace์˜ ๋ถ€๋ถ„ ๊ณต๊ฐ„์œผ๋กœ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ช‡ ๊ฐœ์˜ ํƒ„์  ํŠธ ๋ฐ ์ฝ”ํƒ„์  ํŠธ ๊ณต๊ฐ„์˜ ํ…์„œ ๊ณฑ์— ์‚ฌ๋Š” ํ…์„œ๋ฅผ ์ฆ‰์‹œ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค ์ €๋Š” ๋ฒกํ„ฐ ๊ณต๊ฐ„์„ ์ •์˜ํ•˜๋Š” ๋ถ€๋ถ„์„ ๋ณ„๋„์˜ ํŒจํ‚ค์ง€๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์ˆ˜ํ•™์  ๊ตฌ์กฐ / ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๋Š” ํŒจํ‚ค์ง€๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋์œผ๋กœ, ํ‘œ์ค€ ์ค„๋ฆฌ์•„ ๊ฐ–๋Š” ์ƒํ˜ธ ์šด์šฉ์„ฑ์ด ํ˜ธ์ถœ์—์„œ ์œ ๋ž˜ tensor ์˜ ํ‘œ์ค€ Array ํƒ€์ž…์˜ ๊ฐ์ฒด๋กœ ๋žฉํ•˜๋Š” Tensor ํ˜•์˜ ๊ณต๊ฐ„์œผ๋กœ ๊ด€๋ จ๋œ ์ธ๋ฑ์Šค์™€ CartesianSpace ์ด๊ฒƒ์€ ์œ ํด๋ฆฌ๋“œ ๊ณฑ์„ ์‚ฌ์šฉํ•˜๋Š” ํ‘œ์ค€ ์‹ค์ˆ˜ ๋ฒกํ„ฐ ๊ณต๊ฐ„ R ^ n์œผ๋กœ, ๊ณต๋ณ€ ์ธ๋ฑ์Šค์™€ ๋ฐ˜๋ฐ˜ ์ธ๋ฑ์Šค ์‚ฌ์ด์— ์ฐจ์ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ํ‘œ์ค€ Julia Array๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ฐ€์žฅ ์ž˜ ์ˆ˜๋ฐ˜ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@JeffBezanson , ๋ฐฐ์—ด์„ ํ…์„œ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์–‘๊ฐ€ ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ์ •๋ณด๊ฐ€ ์†์‹ค๋˜์ง€๋Š” ์•Š์ง€๋งŒ ๋™์‹œ์— ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ํ•ด์„์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ํ…์„œ ํ•ด์„์ด ํ•ญ์ƒ (๋˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ) ์˜๋ฏธ๊ฐ€์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ๊ณ ๋ ค : ์ด๋ฏธ์ง€๋Š” (์ผ๋ฐ˜์ ์œผ๋กœ 2d) ๋งค๋‹ˆ ํด๋“œ์—์„œ ๋ฒกํ„ฐ ๊ฐ’ ํ•„๋“œ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํ•„๋“œ๋ฅผ ์ง์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๋“œ๋กœ ์ œํ•œํ•˜๋ฉด ๋‹น์—ฐํžˆ 3D ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•˜๊ณ  ์‹ถ์€ ๊ตฌ์กฐ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ ์ด๊ฒƒ์€ ๊ทธ๋ฆฌ๋“œ ์ ์˜ ๊ณต๊ฐ„์—์„œ {R, G, B} ๋ฒกํ„ฐ ๊ณต๊ฐ„์œผ๋กœ์˜ ๋งคํ•‘ ์ผ ๋ฟ์ด๋ฏ€๋กœ ์ฒ˜์Œ ๋‘ ์ฐจ์› (๊ทธ๋ฆฌ๋“œ์˜ x ๋ฐ y ๋ ˆ์ด๋ธ”)์˜ ๊ธฐํ•˜ํ•™์  ์˜๋ฏธ๋Š” 3 ์ฐจ์›์˜ ๊ธฐํ•˜ํ•™์  ์˜๋ฏธ (์‚ฌ์‹ค์ƒ ๋ฒกํ„ฐ).

๋‚˜๋Š” ํ…์„œ ์—ญํ•™์„ ๋ณ„๋„์˜ ํŒจํ‚ค์ง€๋กœ ๋ถ„๋ฆฌ ํ•˜๋ผ๋Š” @Jutho ์˜ ์ œ์•ˆ์— ๋ฐ˜๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Š” ์™„์ „ํ•œ ํ…์„œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ•„์š”๋กœํ•˜๋Š” ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ๋‹จ์ˆœํ•œ ๋ฐฐ์—ด ์ž‘์—…์„ ์›ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ˆ˜๋ณด๋‹ค ํ›จ์”ฌ ์ ๋‹ค๋Š” ๊ฒƒ์ด ์˜ณ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ๋ฌป๊ณ  ์žํ•˜๋Š” ์งˆ๋ฌธ์€ "์„ ํ˜• ๋Œ€์ˆ˜๊ฐ€ ์–ด๋Š ์˜์—ญ์— ์†ํ•ด์•ผ ํ•˜๋Š”๊ฐ€?"์ž…๋‹ˆ๋‹ค.

์„ ํ˜• ๋Œ€์ˆ˜์˜ ๊ธฐ๊ณ„๋Š” ํ…์„œ ๋Œ€์ˆ˜์˜ ๊ธฐ๊ณ„์˜ ์‹ค์งˆ์ ์ธ ํ•˜์œ„ ์ง‘ํ•ฉ์ด๋ฏ€๋กœ ์ ์–ด๋„ ํ›„์ž๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ  ์ „์ž๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. v'M๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์€ ๊ณต๋ณ€ ๋ฐ ๋ฐ˜ ๋ณ€์„ฑ ๋ฒกํ„ฐ์˜ ๊ฐœ๋…์ด์žˆ๋Š” ๊ฒฝ์šฐ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ผ๊ด€๋˜๊ฒŒ ํ‘œํ˜„๋˜์ง€๋งŒ, ์ด๋ฏธ ์ผ๋ฐ˜์ ์ธ ํ…์„œ ์—ฐ์‚ฐ์„ ํ–ฅํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ๊ฐœ๋…์ ์œผ๋กœ ๋ณต์†Œ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์‹ค์ˆ˜ ์—ฐ์‚ฐ๊ณผ ์œ ์‚ฌํ•˜๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€ ๊ณ ๋ ค : ์ด๋ฏธ์ง€๋Š” (์ผ๋ฐ˜์ ์œผ๋กœ 2d) ๋งค๋‹ˆ ํด๋“œ์—์„œ ๋ฒกํ„ฐ ๊ฐ’ ํ•„๋“œ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํ•„๋“œ๋ฅผ ์ง์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๋“œ๋กœ ์ œํ•œํ•˜๋ฉด ๋‹น์—ฐํžˆ 3D ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•˜๊ณ  ์‹ถ์€ ๊ตฌ์กฐ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ ์ด๊ฒƒ์€ ๊ทธ๋ฆฌ๋“œ ์ ์˜ ๊ณต๊ฐ„์—์„œ {R, G, B} ๋ฒกํ„ฐ ๊ณต๊ฐ„์œผ๋กœ์˜ ๋งคํ•‘ ์ผ ๋ฟ์ด๋ฏ€๋กœ ์ฒ˜์Œ ๋‘ ์ฐจ์› (๊ทธ๋ฆฌ๋“œ์˜ x ๋ฐ y ๋ ˆ์ด๋ธ”)์˜ ๊ธฐํ•˜ํ•™์  ์˜๋ฏธ๋Š” 3 ์ฐจ์›์˜ ๊ธฐํ•˜ํ•™์  ์˜๋ฏธ (์‚ฌ์‹ค์ƒ ๋ฒกํ„ฐ).

์ด๊ฒƒ์ด ์ „์ฒด ๋ฉ”์‹œ์ง€๋ฅผ ๋‹ค๋ฃจ๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜์ง€๋Š” ์•Š์ง€๋งŒ https://github.com/timholy/Images.jl/pull/135 ๋Š” ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ์ด ์•„์ด๋””์–ด๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋˜ํ•œ ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉํ•˜๋ ค๋Š” ์ƒ‰์ƒ ๊ตฌ์กฐ ํ…์„œ๋ฅผ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

2014 ๋…„ 8 ์›” 23 ์ผ 20:36์— jdbates [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@JeffBezanson , ๋ฐฐ์—ด์„ ํ…์„œ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์–‘๊ฐ€ ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ์‹์œผ๋กœ ์ •๋ณด๊ฐ€ ์†์‹ค๋˜์ง€๋Š” ์•Š์ง€๋งŒ ๋™์‹œ์— ์ด๋ฏธ์ง€์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ํ•ด์„์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ํ…์„œ ํ•ด์„์ด ํ•ญ์ƒ (๋˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ) ์˜๋ฏธ๊ฐ€์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ๊ณ ๋ ค : ์ด๋ฏธ์ง€๋Š” (์ผ๋ฐ˜์ ์œผ๋กœ 2d) ๋งค๋‹ˆ ํด๋“œ์—์„œ ๋ฒกํ„ฐ ๊ฐ’ ํ•„๋“œ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํ•„๋“œ๋ฅผ ์ง์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๋“œ๋กœ ์ œํ•œํ•˜๋ฉด ๋‹น์—ฐํžˆ 3D ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•˜๊ณ  ์‹ถ์€ ๊ตฌ์กฐ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ ์ด๊ฒƒ์€ ๊ทธ๋ฆฌ๋“œ ์ ์˜ ๊ณต๊ฐ„์—์„œ {R, G, B} ๋ฒกํ„ฐ ๊ณต๊ฐ„์œผ๋กœ์˜ ๋งคํ•‘ ์ผ ๋ฟ์ด๋ฏ€๋กœ ์ฒ˜์Œ ๋‘ ์ฐจ์› (๊ทธ๋ฆฌ๋“œ์˜ x ๋ฐ y ๋ ˆ์ด๋ธ”)์˜ ๊ธฐํ•˜ํ•™์  ์˜๋ฏธ๋Š” 3 ์ฐจ์›์˜ ๊ธฐํ•˜ํ•™์  ์˜๋ฏธ (์‚ฌ์‹ค์ƒ ๋ฒกํ„ฐ).

ํ…์„œ๊ฐ€ ๋ฐฐ์—ด์„ ๋Œ€์ฒดํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ๋Š” ์‹ค์ œ๋กœ ๋‹ค๋ฅธ ์ˆ˜ํ•™์  ๊ตฌ์กฐ (์ฆ‰, ๋ฒกํ„ฐ ๋ฒˆ๋“ค ๋˜๋Š”๋ณด๋‹ค ์ผ๋ฐ˜์ ์œผ๋กœ ํ…์„œ ๋ฒˆ๋“ค)์ด๋ฉฐ, ๋งค๋‹ˆ ํด๋“œ ์ขŒํ‘œ์— ๋Œ€ํ•œ ๊ทธ๋ฆฌ๋“œ์™€ ๋ฒกํ„ฐ ๊ณต๊ฐ„ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๊ธฐ์ค€์„ ์„ ํƒํ•˜์—ฌ ๋‹ค์ฐจ์› ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‹ค์ œ๋กœ ์ขŒํ‘œ ๋…๋ฆฝ์  / ๊ธฐ์ดˆ ๋…๋ฆฝ์  ๋ฐฉ์‹์œผ๋กœ ์ž˜ ์ •์˜๋˜์–ด ์žˆ์ง€๋งŒ (์ขŒํ‘œ๊ณ„ ๋˜๋Š” ๊ธฐ์ €๋ฅผ ์„ ํƒํ•œ ํ›„) ๋‹ค์ฐจ์› ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ํ•  ์ˆ˜์žˆ๋Š” ๋‹ค๋ฅธ ์ˆ˜ํ•™์  ๊ฐ์ฒด / ๊ตฌ์กฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค์ฐจ์› ๋ฐฐ์—ด์€ ํ™•์‹คํžˆ ํ…์„œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ์ œํ•œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋„ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํ…์„œ๊ฐ€ ๋‹ค์ฐจ์› ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํ…์„œ ๊ณฑ ๊ณต๊ฐ„์— ํฌํ•จ ๋œ ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ๊ฐœ๋ณ„ ๊ธฐ์ € ๋ฒกํ„ฐ์˜ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์กฐํ•ฉ์„ ์ง์ ‘ ๊ณฑํ•˜์—ฌ ์–ป์€ ์ œํ’ˆ ๊ธฐ์ €๋กœ ์•Œ๋ ค์ง„ ํŠน์ • ๊ธฐ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ…์„œ ๊ณฑ ๊ณต๊ฐ„์˜ ๋Œ€์นญ ๋ถˆ๋ณ€ ๋ถ€๋ถ„ ๊ณต๊ฐ„์—์„œ ํ…์„œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ด๋Ÿฌํ•œ ํ‘œํ˜„์€ ๋” ์ด์ƒ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ ํ…์„œ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œํ˜„๋˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ „์ฒด ๊ณต๊ฐ„์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๊ธฐ์ค€์„ ์ •์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ธด 1 ์ฐจ์› ์ˆซ์ž ๋ชฉ๋ก.

๋‚˜๋Š” ํ…์„œ ์—ญํ•™์„ ๋ณ„๋„์˜ ํŒจํ‚ค์ง€๋กœ ๋ถ„๋ฆฌ ํ•˜๋ผ๋Š” @Jutho ์˜ ์ œ์•ˆ์— ๋ฐ˜๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Š” ์™„์ „ํ•œ ํ…์„œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ•„์š”๋กœํ•˜๋Š” ์‚ฌ์šฉ์ž ์ˆ˜๊ฐ€ ๋‹จ์ˆœํ•œ ๋ฐฐ์—ด ์ž‘์—…์„ ์›ํ•˜๋Š” ์‚ฌ์šฉ์ž ์ˆ˜๋ณด๋‹ค ํ›จ์”ฌ ์ ๋‹ค๋Š” ๊ฒƒ์ด ์˜ณ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ๋ฌป๊ณ  ์žํ•˜๋Š” ์งˆ๋ฌธ์€ "์„ ํ˜• ๋Œ€์ˆ˜๊ฐ€ ์–ด๋Š ์˜์—ญ์— ์†ํ•ด์•ผ ํ•˜๋Š”๊ฐ€?"์ž…๋‹ˆ๋‹ค.

์„ ํ˜• ๋Œ€์ˆ˜์˜ ๊ธฐ๊ณ„๋Š” ํ…์„œ ๋Œ€์ˆ˜์˜ ๊ธฐ๊ณ„์˜ ์‹ค์งˆ์ ์ธ ํ•˜์œ„ ์ง‘ํ•ฉ์ด๋ฏ€๋กœ ์ ์–ด๋„ ํ›„์ž๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ณ  ์ „์ž๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. v'M๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์€ ๊ณต๋ณ€ ๋ฐ ๋ฐ˜ ๋ณ€์„ฑ ๋ฒกํ„ฐ์˜ ๊ฐœ๋…์ด์žˆ๋Š” ๊ฒฝ์šฐ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ผ๊ด€๋˜๊ฒŒ ํ‘œํ˜„๋˜์ง€๋งŒ, ์ด๋ฏธ ์ผ๋ฐ˜์ ์ธ ํ…์„œ ์—ฐ์‚ฐ์„ ํ–ฅํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ๊ฐœ๋…์ ์œผ๋กœ ๋ณต์†Œ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์‹ค์ˆ˜ ์—ฐ์‚ฐ๊ณผ ์œ ์‚ฌํ•˜๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.

๋ฐฐ์—ด์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ํ•ด์„์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ํ…์„œ ํ•ด์„์ด ํ•ญ์ƒ (๋˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ) ์˜๋ฏธ๊ฐ€์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€ ๊ณ ๋ ค : ์ด๋ฏธ์ง€๋Š” (์ผ๋ฐ˜์ ์œผ๋กœ 2d) ๋งค๋‹ˆ ํด๋“œ์—์„œ ๋ฒกํ„ฐ ๊ฐ’ ํ•„๋“œ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ํ•„๋“œ๋ฅผ ์ง์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๋“œ๋กœ ์ œํ•œํ•˜๋ฉด ๋‹น์—ฐํžˆ 3D ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•˜๊ณ  ์‹ถ์€ ๊ตฌ์กฐ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ ์ด๊ฒƒ์€ ๊ทธ๋ฆฌ๋“œ ์ ์˜ ๊ณต๊ฐ„์—์„œ {R, G, B} ๋ฒกํ„ฐ ๊ณต๊ฐ„์œผ๋กœ์˜ ๋งคํ•‘ ์ผ ๋ฟ์ด๋ฏ€๋กœ ์ฒ˜์Œ ๋‘ ์ฐจ์› (๊ทธ๋ฆฌ๋“œ์˜ x ๋ฐ y ๋ ˆ์ด๋ธ”)์˜ ๊ธฐํ•˜ํ•™์  ์˜๋ฏธ๋Š” 3 ์ฐจ์›์˜ ๊ธฐํ•˜ํ•™์  ์˜๋ฏธ (์‚ฌ์‹ค์ƒ ๋ฒกํ„ฐ).

https://github.com/JuliaLang/julia/issues/4774#issuecomment -38333295์˜ ๊ฐœ๋…์ ์ธ AbstractTensorArray ์ œ์•ˆ์—์„œ ๋ฐฐ์—ด ์œ ์‚ฌ ๋ฐ ํ…์„œ๋ฅผ ํ—ˆ์šฉํ•˜์—ฌ ์บก์ฒ˜ํ•˜๋ ค๋Š” ๊ฒƒ์€ ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๊ตฌ๋ณ„์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ์น˜์ˆ˜. ์ด ๊ณ„ํš์— ๋”ฐ๋ผ ๊ท€ํ•˜์˜ ์˜ˆ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค.

AbstractTensorArray{Uint8, 3, [false, true, false], [true, false, false]}

๋”ฐ๋ผ์„œ x, y ๋ฐ RGB ํฌ๊ธฐ๋Š” ๊ฐ๊ฐ "์•„๋ž˜", "์œ„"๋ฐ "์ค‘๋ฆฝ"์ด๋ฉ๋‹ˆ๋‹ค. ๊ธฐํ•˜ํ•™์  ์—ฐ์‚ฐ (์˜ˆ : ์•„ํ•€ ๋ณ€ํ™˜)์€ ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ RGB ๊ฐ’์„ ๋งคํ•‘ํ•˜๋ฉด์„œ ํ…์„œ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ทธ๋ฆฌ๋“œ ์ขŒํ‘œ ์ฐจ์›์„ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์Šต๋‹ˆ๋‹ค. (๋‚˜์ค‘์— RGB ๊ฐ’์„ ๊ธฐํ•˜ํ•™์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ํ•ด๋‹น ๋ชฉ์ ์„ ์œ„ํ•ด ๋งˆ์Šคํฌ๋ฅผ ๋ช…์‹œ ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•˜์ง€๋งŒ (a) ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ธฐํ•˜ํ•™์  ์—ฐ์‚ฐ์ด์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋ถ€๋ถ„ ๊ณต๊ฐ„์— ์ ์šฉ๋˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”, (b)์ด ์ƒํ™ฉ์—์„œ ๋ช…์‹œ ์  ๋ณ€ํ™˜์€ ์•„๋งˆ๋„ ์ฝ”๋“œ์˜ ๋ช…ํ™•์„ฑ์„ _ ํ–ฅ์ƒ์‹œํ‚ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

@Jutho๊ฐ€ ์–ธ๊ธ‰ํ•˜๋Š” ์ผค๋ ˆ ํ‘œํ˜„์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ณต์žกํ•œ ๊ณต๊ฐ„์— ๋Œ€ํ•ด ๋™์ผํ•œ ๋งˆ์Šคํ‚น ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋” ํ™•์žฅํ•˜์—ฌ์ด ์ผ๋ฐ˜ํ™”๋ฅผ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ์‹ค์ œ๋กœ ๋ฌป๊ณ  ์žํ•˜๋Š” ์งˆ๋ฌธ์€ "์„ ํ˜• ๋Œ€์ˆ˜๊ฐ€ ์–ด๋Š ์˜์—ญ์— ์†ํ•ด์•ผ ํ•˜๋Š”๊ฐ€?"์ž…๋‹ˆ๋‹ค.

๋ฐฐ์—ด ์œ ์‚ฌ ๋ฐ ํ…์„œ ์œ ์‚ฌ ์—ฐ์‚ฐ์ด ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•œ ์„ค๊ณ„๊ฐ€ ์ •ํ•ด์ง€๋ฉด ์„ ํ˜• ๋Œ€์ˆ˜์— ๋Œ€ํ•œ ์—”ํ„ฐํ‹ฐ๋Š” ์œ„์—์„œ ์‚ฌ์šฉํ•œ ๋ณ„์นญ๊ณผ ๊ฐ™์€ ํŠน์ˆ˜ ์‚ฌ๋ก€๋กœ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ˆœ์ˆ˜ํ•œ ์„ ํ˜• ๋Œ€์ˆ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ „์ฒด ์ผ๋ฐ˜ํ™” ๋œ ํ…์„œ ๊ณ„์ธต์ด ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ (ํ•˜์ง€๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค์‹œ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค). ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ Base์— ๋„ฃ๋Š” ๋ฐ ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ x, y ๋ฐ RGB ํฌ๊ธฐ๋Š” ๊ฐ๊ฐ "์•„๋ž˜", "์œ„"๋ฐ "์ค‘๋ฆฝ"์ด๋ฉ๋‹ˆ๋‹ค. ๊ธฐํ•˜ํ•™์  ์—ฐ์‚ฐ (์˜ˆ : ์•„ํ•€ ๋ณ€ํ™˜)์€ ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ RGB ๊ฐ’์„ ๋งคํ•‘ํ•˜๋ฉด์„œ ํ…์„œ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๊ทธ๋ฆฌ๋“œ ์ขŒํ‘œ ์ฐจ์›์„ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์Šต๋‹ˆ๋‹ค. (๋‚˜์ค‘์— RGB ๊ฐ’์„ ๊ธฐํ•˜ํ•™์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค๋ฉด ํ•ด๋‹น ๋ชฉ์ ์„ ์œ„ํ•ด ๋งˆ์Šคํฌ๋ฅผ ๋ช…์‹œ ์ ์œผ๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•˜์ง€๋งŒ (a) ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ธฐํ•˜ํ•™์  ์—ฐ์‚ฐ์ด์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋ถ€๋ถ„ ๊ณต๊ฐ„์— ์ ์šฉ๋˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”, (b)์ด ์ƒํ™ฉ์—์„œ ๋ช…์‹œ ์  ๋ณ€ํ™˜์€ ์•„๋งˆ๋„ ์ฝ”๋“œ์˜ ๋ช…ํ™•์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

์—ฌ๊ธฐ์„œ ๋ญ”๊ฐ€๋ฅผ ์„ž๋Š” ๊ฒƒ ๊ฐ™์•„์š”. ์œ„์˜ ๋…ผ์˜์—์„œ x ๋ฐ y ์ขŒํ‘œ๋Š” ๋ฐ˜๋“œ์‹œ ํ‰ํ‰ํ•œ ๊ณต๊ฐ„์ด ์•„๋‹Œ ์ž„์˜์˜ ๊ณก์„  ๋งค๋‹ˆ ํด๋“œ์ƒ์˜ ์ขŒํ‘œ์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฒกํ„ฐ ๊ณต๊ฐ„ ํ•ด์„์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์‹ค์ œ๋กœ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒกํ„ฐ ํ•ด์„์ด ์ฃผ์–ด์ง„ ๊ฒƒ์€ RGB ์น˜์ˆ˜ ์˜€์ง€๋งŒ, ์ƒ‰ ๊ณต๊ฐ„๋„ ๋‹ค์†Œ ๊ณก์„ ์ด๋ผ๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ (์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ์— ์ ์ ˆํ•œ ๋ฐฐ๊ฒฝ์ด ์—†์Œ) ์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ์ตœ์„ ์˜ ์„ ํƒ์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋„๋ฉ”์ธ (x ๋ฐ y)์ด ๋ฒกํ„ฐ ๊ณต๊ฐ„์„ ํ˜•์„ฑํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ x์™€ y๊ฐ€ ์œ„์•„๋ž˜๋กœ ๋‚˜ํƒ€๋‚˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์ด๊ฒƒ์ด ๋ฐ”๋กœ ํ‘œ๊ธฐ๋ฒ•์˜ ์˜ˆ์ผ๊นŒ์š”?

์–ด์จŒ๋“  ์ €๋Š” TensorToolbox.jl์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋–ค ์ข…๋ฅ˜์˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ ๋˜๋Š” ๋งˆ์Šคํฌ๋กœ ๊ณต๋ณ€ ๋ฐ ๋ฐ˜ ๋ณ€์„ฑ ์ธ๋ฑ์Šค๋ฅผ ํ‘œ์‹œํ–ˆ์ง€๋งŒ ๊ณง ์™„์ „ํ•œ ์•…๋ชฝ์ด ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ํ…์„œ๊ฐ€ ์ผ๋ถ€ ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์š”์†Œ ์ธ ํ‘œํ˜„์œผ๋กœ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ๋ฐฐ์—ด ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ๋•Œ ํฌ๊ธฐ๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ณต๋ฐฑ์ด ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

x ๋ฐ y ์ขŒํ‘œ๋Š” ๋ฒกํ„ฐ ๊ณต๊ฐ„ ํ•ด์„์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. "์ง์‚ฌ๊ฐํ˜• ๊ฒฉ์ž"๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ์ฝ์—ˆ์Šต๋‹ˆ๋‹ค. --- @jdbates ๊ฐ€ ๊ทธ๊ฐ€ ๋งํ•œ ๊ฒƒ์„ ์ •ํ™•ํžˆ ์˜๋ฏธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ๋‹จ์ง€ ๋‚ด์ ์„ ์ผ๋ฐ˜ํ™” ๋œ ๋‚ด์ ๋กœ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๊นŒ? (์˜คํ•ดํ•˜๋ฉด ์šฉ์„œ ํ•ด์ฃผ์„ธ์š”, ๊ฑฐ์˜ ๋ชจ๋“  ์‹œ๊ฐ„์„ ์œ ํด๋ฆฌ๋“œ ๊ณต๊ฐ„์—์„œ ๋ณด๋ƒ…๋‹ˆ๋‹ค :-)

๋ชจ๋“  ํ…์„œ๋Š” ์ผ๋ถ€ ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

์ข‹์€ ์•„์ด๋””์–ด์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค --- ์‚ฌ์šฉ์ž์—๊ฒŒ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ฅผ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค (์ฝ”๋“œ๋ฅผ ๋งŽ์ด ์ฝ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค).

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


(1) APL ์Šคํƒ€์ผ ์Šฌ๋ผ์ด์‹ฑ.

size(A[i_1, ..., i_n]) == tuple(size(i_1)..., ..., size(i_n)...)

ํŠนํžˆ, ์ด๊ฒƒ์€ "๋‹จ์ผ ์Šฌ๋ผ์ด์Šค"(์ฆ‰, ์ธ๋ฑ์Šค๊ฐ€ ์Šค์นผ๋ผ ๋˜๋Š” 0 ์ฐจ์› ์ธ ์Šฌ๋ผ์ด์Šค)๊ฐ€ ํ•ญ์ƒ ์‚ญ์ œ๋˜๊ณ  M[1,:] ๋ฐ M[:,1] ๊ฐ€ ํ•˜๋‚˜๊ฐ€ ๋ฒกํ„ฐ๊ฐ€ ์•„๋‹Œ ๋ฒกํ„ฐ๋ผ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” ํ–‰ ํ–‰๋ ฌ์ด๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ตฌ๋ณ„์ž…๋‹ˆ๋‹ค.


(2) ๋ฒกํ„ฐ ๋ฐ ํ–‰๋ ฌ์— ๋Œ€ํ•ด Transpose ๋ฐ ConjTranspose ๋ž˜ํผ ์œ ํ˜•์„ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

immutable Transpose{T,n,A<:AbstractArray} <: AbstractArray{T,n}
    array::A
end
Transpose{T,n}(a::AbstractArray{T,n}) = Transpose{T,n,typeof(a)}(a)

๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ์— ๋Œ€ํ•ด ์ด๋Ÿฌํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜์žˆ๋Š” ๋ชจ๋“  ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ „์น˜๊ฐ€ ์ž„์˜์˜ ์ฐจ์›์— ๋Œ€ํ•ด ๋ฌด์—‡์„ ์˜๋ฏธํ•ด์•ผํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ์— ๋Œ€ํ•ด์„œ๋งŒ ์ž‘๋™ํ•˜๋„๋ก ์ œํ•œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์ฐจ์›์„ ๋ฐ˜์ „ํ•˜๋Š” ๊ฒƒ์ด ์œ ํ˜น์  ์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ). ๋‹น์‹ ์ด ์“ธ ๋•Œ a' ๋‹น์‹ ์ด ์–ป์„ ConjTranspose(a) ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฐ v.' ์ƒ์‚ฐ Transpose(a) .


(3) ๋‹ค์Œ๊ณผ ๊ฐ™์ด (๊ฒฐํ•ฉ) ์ „์น˜ ๋ฒกํ„ฐ ๋ฐ ํ–‰๋ ฌ์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ํŠน์ˆ˜ ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

*(v::Transpose{T,1}, w::AbstractVector) = dot(v.array,w)
*(v::AbstractVector, w::Transpose{T,1}) = [ v[i]*w[j] for i=1:length(v), j=1:length(w) ]

๋ชจ๋“  ๋”์ฐํ•œ At_mul_B ํ•จ์ˆ˜์™€ ํŠน์ˆ˜ ๊ตฌ๋ฌธ ๋ถ„์„์„ lazy (conjugate) ์ „์น˜ ๊ตฌ์„ฑ์œผ๋กœ ๋Œ€์ฒด ํ•œ ๋‹ค์Œ Transpose ๋ฐ ConjTranspose ์œ ํ˜•์— ๋Œ€ํ•œ ๋””์ŠคํŒจ์น˜๋ฅผ โ€‹โ€‹ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.


(4) ์ธ์ˆ˜๊ฐ€ ๋™์ผํ•œ ์ฐจ์›์˜ ์Šค์นผ๋ผ ๋˜๋Š” ๋ฐฐ์—ด ์ธ ๊ฒฝ์šฐ ๋ธŒ๋กœ๋“œ ์บ์ŠคํŒ… ์ž‘์—…์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ˜„์žฌ ํ‘œ์‹œ๋œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š” ๋‹ค์Œ์€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

julia> M = rand(3,4);

julia> M./M[1,:]
3x4 Array{Float64,2}:
 1.0       1.0       1.0      1.0
 0.516884  0.675712  2.11216  9.0797
 1.00641   0.726229  2.48336  4.38751

julia> M./M[:,1]
3x4 Array{Float64,2}:
 1.0  0.891557  0.561464  0.103968
 1.0  1.16552   2.29433   1.82633
 1.0  0.643353  1.38544   0.453257

๋Œ€์‹  ๋‹ค์Œ๊ณผ ๊ฐ™์ดํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

julia> M./M[[1],:]
3x4 Array{Float64,2}:
 1.0       1.0       1.0      1.0
 0.516884  0.675712  2.11216  9.0797
 1.00641   0.726229  2.48336  4.38751

julia> M./M[:,[1]]
3x4 Array{Float64,2}:
 1.0  0.891557  0.561464  0.103968
 1.0  1.16552   2.29433   1.82633
 1.0  0.643353  1.38544   0.453257

์ด ์ œ์•ˆ์ด ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๋ชจ๋“  ์ฃผ์š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค

  1. ๋Œ€์นญ ์Šฌ๋ผ์ด์Šค ๋™์ž‘ โ€“ ํ›„ํ–‰ ์น˜์ˆ˜๋Š” ๋” ์ด์ƒ ํŠน๋ณ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. v'' === v
  3. v' == v
  4. v'w ๋Š” v ๋ฐ w ์˜ ๋‚ด์ ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, ์š”์†Œ๊ฐ€ ํ•˜๋‚˜ ์ธ ๋ฒกํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์Šค์นผ๋ผ์ž…๋‹ˆ๋‹ค.
  5. v*w' ๋Š” v ๋ฐ w ์˜ ์™ธ๋ถ€ ๊ณฑ์ž…๋‹ˆ๋‹ค.
  6. M*v ๋Š” ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.
  7. M*v' ์€ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.
  8. v'*M ๋Š” ์ „์น˜ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.
  9. v*M ์€ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.
  10. At_mul_B ์—ฐ์‚ฐ์ž์™€ ํŠน์ˆ˜ ๊ตฌ๋ฌธ ๋ถ„์„์ด ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

: +1 : ๋ชจ๋‘์—๊ฒŒ. ๋‚˜๋Š” # 6837์—์„œ 2์™€ 3์— ๋Œ€ํ•ด ์•ฝ๊ฐ„์˜ ์ž‘์—…์„ํ–ˆ์ง€๋งŒ ๋๋‚ด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. @simonbyrne ๋„ ์กฐ์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

+1๋„. ๋ชจ๋“  ๊ณณ์—์„œ ๋งค์šฐ ์ผ๊ด€๋œ ํ–‰๋™์„ ์ œ๊ณต ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ์ œ์•ˆ์˜ ์œ ์ผํ•œ ๋ฐฉํ•ด ์š”์†Œ๋Š” M[1,:] ๊ฐ€ ๋ช…์‹œ ์ ์œผ๋กœ ์ˆ˜ํ‰ ํ–‰ ํ–‰๋ ฌ์ด ์•„๋‹ˆ๋ผ ์•”์‹œ ์ ์œผ๋กœ ์ˆ˜์ง ๋ฒกํ„ฐ๋ผ๋Š” ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‹ค์ œ๋กœ๋Š” ๋งค์šฐ ๋ถ€๋“œ๋Ÿฝ๊ณ  ์ค‘๋‹จ์—†๋Š” ์ผ๋ จ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค (ํ•˜๋‚˜๋Š” ํฌ๋ง). (๋‚˜์—๊ฒŒ์žˆ์–ด) ์ฃผ๋œ ๊นจ๋‹ฌ์Œ์€ APL ์Šฌ๋ผ์ด์‹ฑ ๋™์ž‘์ด lazy transposes์™€ ๊ฒฐํ•ฉ ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋™์˜ํ•˜๋ฉด ๊ณ„ํš์„ ์„ธ์šฐ๊ณ  ์ž‘์—…์„ ๋ถ„ํ•  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” lazy transposes์™€ staged ํ•จ์ˆ˜๊ฐ€ ์•ฝ๊ฐ„์˜ ์ฝ”๋“œ ๊ฐ์†Œ์™€ ๋‹จ์ˆœํ™”๋ฅผ ํ—ˆ์šฉํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์˜ˆ, ๋ถ€ํƒํ•ฉ๋‹ˆ๋‹ค! Tensor transpose๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌ๋ฏธํ•œ ๋ฐ˜์ „์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •์˜ ์ˆœ์—ด์„ ํ—ˆ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

Tensor transpose๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌ๋ฏธํ•œ ๋ฐ˜์ „์„ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž ์ •์˜ ์ˆœ์—ด์„ ํ—ˆ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์œ ํ˜•์„ ์•ฝ๊ฐ„ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ž„์˜์˜ ์ง€์—ฐ ์ฐจ์› ์ˆœ์—ด์„ ํ—ˆ์šฉํ•˜๋Š” PermuteDims ์œ ํ˜•์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Stefan : ์ด๊ฒƒ์€ ๋ฒกํ„ฐ์™€ 2-dim์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐ ๊ฝค ์ข‹์€ ์ƒ๊ฐ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋Œ€์ˆ˜ํ•™. ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ :

  1. ๋‹ค์ฐจ์› ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ : ์ฐจ์›์ด์žˆ๋Š” ๋ฐฐ์—ด A์˜ ๊ฒฝ์šฐ
    (i_1, i_2, ..., i_n), [i_2, i_3]์— ์กฐ์˜ฎ๊น€์„ ์ ์šฉํ•˜๋ ค๋ฉด
    ์ฐจ์› ๋˜๋Š” [i_2, i_4] ์ฐจ์›์˜ ํ•ด์‹œ. ๋‹น์‹ ์€ ๊ทธ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ
    ์ „์น˜์˜ ์ƒˆ๋กœ์šด ์ •์˜?
  2. ์‹ฑ๊ธ€ ํ†ค ์ฐจ์›๊ณผ ๊ด€๋ จํ•˜์—ฌ : ์‹ฑ๊ธ€ ํ†ค ์Šฌ๋ผ์ด์Šค๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ์˜๋„์ ์œผ๋กœ ๋– ๋‚ฌ์Šต๋‹ˆ๋‹ค. Julia๊ฐ€์ด ์‹ฑ๊ธ€ ํ†ค ์ฐจ์›์„
    ๊ณ„์‚ฐ? ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฒกํ„ฐ๋ฅผ ๋ฐฐ์—ด V๋กœ ์ •์˜ํ•œ ๊ฒฝ์šฐ
    (2,1)์˜ ์ฐจ์›, ๊ทธ๋ฆฌ๊ณ  ํ–‰๋ ฌ A์™€ ์ „์น˜๋ฅผ ๊ณฑํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.
    ์ฐจ์› (2,3,4). ๋‹ค์Œ์˜ ์ฐจ์›์—์„œ v '* A์˜ ๊ฒฐ๊ณผ๋ฅผ ์‚ฐ์ถœ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
    (1,3,4)?

2014 ๋…„ 10 ์›” 16 ์ผ ๋ชฉ์š”์ผ ์˜คํ›„ 2:31, Stefan Karpinski [email protected]
์ผ๋‹ค :

์œ ์ผํ•œ ๋ฐฉํ•ด ์š”์†Œ๋Š” M [1 ,:]์ด (์ˆ˜์ง) ๋ฒกํ„ฐ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํ–‰ ํ–‰๋ ฌ์ด ์•„๋‹ˆ๋ผ. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‹ค์ œ๋กœ ๊ฝค ๋ถ€๋“œ๋Ÿฝ์Šต๋‹ˆ๋‹ค.
๋ฌด์ค‘๋‹จ ๋ณ€๊ฒฝ ์„ธํŠธ (ํ•˜๋‚˜๋Š” ํฌ๋ง). (๋‚˜์—๊ฒŒ) ์ฃผ๋œ ๊นจ๋‹ฌ์Œ์€
APL ์Šฌ๋ผ์ด์‹ฑ ๋™์ž‘์€ ๊ฒŒ์œผ๋ฅธ ์ „์น˜์™€ ๊ฒฐํ•ฉ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์–ป๋Š”๋‹ค๋ฉด
๋™์˜ํ•˜๋ฉด ๊ณ„ํš์„ ์„ธ์šฐ๊ณ  ์ž‘์—…์„ ๋ถ„ํ•  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง„์ •์œผ๋กœ ์›ํ•œ๋‹ค
๊ฒŒ์œผ๋ฅธ ์ „์น˜ ๋ฐ ๋‹จ๊ณ„์  ํ•จ์ˆ˜๋Š” ์ผ๋ถ€ ์ฝ”๋“œ ๊ฐ์†Œ ๋ฐ
๋‹จ์ˆœํ™”.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/JuliaLang/julia/issues/4774#issuecomment -59425385.

Re 2 & 3 : ๊ฑฐ์น ๊ฒŒ ์ฐ”๋Ÿฌ์„œ ๋ฒกํ„ฐ ์ „์น˜๊ฐ€ AbstractVector ์˜ ํ•˜์œ„ ์œ ํ˜•์ด๋˜์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค๋Š” ๊ฒฐ๋ก ์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ๊ฑด์ „ํ•œ ๋ฐฉ๋ฒ•์€ Transpose{T,A} <: AbstractMatrix{T} ๋ฐ ๋ณ„๋„์˜ Covector ์œ ํ˜• (+ Conjugate ๋ณ€ํ˜•)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋งŒ๋‚œ ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ๋ฌธ์ œ๋Š” ํŠน์ • ํ–‰๋ ฌ ์œ ํ˜•, ์ „์น˜ ๋˜๋Š” ์ผค๋ ˆ ์ „์น˜์— ๋Œ€ํ•ด ๋””์ŠคํŒจ์น˜ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ๊ธฐ์กด ์œ ํ˜• ๊ธฐ๊ณ„๋ฅผ ํ†ตํ•ด์ด๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค ( ์ด ๋ฉ”์ผ ๋ง๋ฆฌ์ŠคํŠธ ํ† ๋ก  ์ฐธ์กฐ). ์ด๊ฒƒ์ด ์—†์œผ๋ฉด 3x3 ๊ฐ€๋Šฅํ•œ ์ธ์ˆ˜ ์กฐํ•ฉ์— ๋Œ€ํ•ด @eval -ing์„ ๋งŽ์ด ํ• ๊นŒ ๋ด ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค.

@simonbyrne , ๊ตฌํ˜„์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ๊ฒฝํ—˜์„ ์—ฐ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€๋Š” ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ž…๋‹ˆ๊นŒ?

์ž ์žฌ์  ์ธ ๋Œ€์•ˆ์€ SubArrays๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ์ธ๋ฑ์Šค ์œ ํ˜•์„ ํ™•์žฅํ•˜์—ฌ ๋ชจ๋“  _internally_ ์‰์ดํ•‘์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๊ณต๊ฐœ์ ์ด์ง€ ์•Š์€ ํฌ๋Ÿผ์—์„œ ์—ฌ๊ธฐ์— ๊ฐ„๋žตํ•˜๊ฒŒ ์–ธ๊ธ‰ ๋จ). ํŠนํžˆ, ์ƒ์œ„ ๋ฐฐ์—ด์ด Vector ์ผ ๋•Œ์—๋„ SubArray์— ์ „์น˜ ๋œ ๋ชจ์–‘์„ ๋ถ€์—ฌํ•˜๋Š” "์ „์น˜ ๋œ ๋ฒ”์œ„"์œ ํ˜•์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์„œ๋ธŒ ์–ด๋ ˆ์ด๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๋Š” ๊ฒฝ์šฐ https://github.com/JuliaLang/julia/blob/d4cab1dd127a6e13deae5652872365653a5f4010/base/subarray.jl#L5-L9 ์ฐธ์กฐ)

์ด ๋Œ€์•ˆ ์ „๋žต์ด ์‚ถ์„ ๋” ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š”์ง€ ๋” ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€๋ฅผ ํ–ฅํ•˜๋Š” ์œ ํ˜•์˜ ์ˆ˜๋ฅผ ์ค„์—ฌ์„œ ๋” ์ ์€ ์ˆ˜์˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•„์š”ํ•จ์„ ์˜๋ฏธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋•Œ๋ฌธ์—์— ๋ฐฉ๋ฒ•์ด ๋ˆ„๋ฝ์— _still_ ์ถฉ์ „ ์‚ฌ๋žŒ์œผ๋กœ Color ์—์„œ ์ „ํ™˜ Images ,์ด ์ข‹์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.) ํ•œํŽธ,์ด ์ˆ˜ ํŽธ๋ฆฌ ์‚ผ๊ฐํ˜• ํŒŒ๊ฒฌ์˜ ๋ถ€์žฌ @simonbyrne์ด ์ œ๊ธฐ ํ•œ ๋ฌธ์ œ๋ฅผ ์•…ํ™”์‹œํ‚ฌ ์ˆ˜์žˆ๋Š” ์„ ํƒ์  ๋ฉ”์„œ๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋‹ค์†Œ ์–ด์ƒ‰ํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์–ด๋–ค ํ†ต์ฐฐ๋ ฅ์ด๋ผ๋„ ๊ฐ€์žฅ ํ™˜์˜๋ฐ›์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ ์™ธ์—๋„ @StefanKarpinski ์˜ ์ œ์•ˆ ํ˜•ํƒœ๊ฐ€ ๋“ญ๋‹ˆ๋‹ค . ๋‚˜๋Š” APL ์Šคํƒ€์ผ ์ธ๋ฑ์‹ฑ์— ์–ฝ๋งค์ด์ง€ ์•Š์ง€๋งŒ ๊ท ํ˜• ์ ์œผ๋กœ ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ๊ฐ€์ง€๊ณ ์žˆ๋Š” Matlab์—์„œ ํŒŒ์ƒ ๋œ ๊ทœ์น™๋ณด๋‹ค ๋” ๋‚˜์€ ์„ ํƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ์ƒ๊ฐ :

  • A[[2], :] ์™€ ๊ฐ™์€ ์ธ๋ฑ์‹ฑ์ด ๊ด€์šฉ์ ์ด๋˜๋Š” ๊ฒฝ์šฐ ๋‹จ์ผ ์ธ๋ฑ์Šค 2 ๋ฅผ ๋ž˜ํ•‘ํ•˜๊ธฐ ์œ„ํ•ด ๋ฒกํ„ฐ๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•˜๋Š” ๊ฒƒ์€ ์•ฝ๊ฐ„ ๋‚ญ๋น„ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ๊ฒƒ์— ๋Œ€ํ•ด A[(2,), :] ๋ฅผ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ๋‹จ์ผ ์š”์†Œ ๋ฒ”์œ„๊ฐ€ ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ [2] ๋งŒํผ์ด๋‚˜ ํŽธ๋ฆฌํ•œ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  • ๋ธŒ๋กœ๋“œ ์บ์ŠคํŒ…์„ ์œ„ํ•ด ์ผ์น˜ํ•˜๋Š” ์ฐจ์› ์ˆ˜๋ฅผ ์š”๊ตฌํ•ด์•ผํ•œ๋‹ค๋ฉด ๋ฐฐ์—ด์— ๋‹จ์ผ ์ฐจ์›์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ numpy์˜ newaxis ์ธ๋ฑ์‹ฑ๊ณผ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์„ธ๋ฏธ์ฝœ๋ก ์„ ์‚ฌ์šฉํ•œ ์ธ๋ฑ์‹ฑ (la A[2;:] )์ด ๊ฒฐ๊ณผ๊ฐ€ ํ•ญ์ƒ A ์™€ ๋™์ผํ•œ ์ˆ˜์˜ ์ฐจ์›์„ ๊ฐ–๋Š” ๋‹ค๋ฅธ ์ธ๋ฑ์‹ฑ ๋ชจ๋“œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ œ์•ˆํ•˜๊ณ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์‹ฑ๊ธ€ ํ†ค์„ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ์ธ๋ฑ์‹ฑ ๋‘˜ ์ด์ƒ์˜ ์ˆœ์œ„๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•จ์„ ์œ„ํ•ด ํ•ต์‹ฌ ์ œ์•ˆ์—์„œ ์ œ์™ธํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์ง€๋งŒ, ๊ทธ๋Ÿฐ ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์ข‹์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@simonbyrne์— ์˜ํ•ด ํ‘œํ˜„ ๋œ ์šฐ๋ ค๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์›์น™์ ์œผ๋กœ ์ฝ” ๋ฒกํ„ฐ๋Š” ๋‹ค๋ฅธ ๋ฒกํ„ฐ ๊ณต๊ฐ„, ์ฆ‰ ์ด์ค‘ ๊ณต๊ฐ„์— ์‚ฌ๋Š” ๋ฒกํ„ฐ ์ผ๋ฟ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Transpose ๋˜๋Š” Covector ์œ ํ˜•์„ AbstractArray ์˜ ํ•˜์œ„ ์œ ํ˜•์ด ์•„๋‹Œ ๊ฒƒ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ๋‹ค์†Œ ๊ธฐ๋ถ„์ด ์ข‹์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ฃผ์š” ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด๋ฉฐ ๊ณ ๋ ค๋˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด์žˆ๋Š” ํ•ด๊ฒฐ์ฑ…์€ ์ „์ฒด AbstractArray ํŒจ๋ฐ€๋ฆฌ์— ์ถ”๊ฐ€ ์œ ํ˜• ๋งค๊ฐœ ๋ณ€์ˆ˜ trans , :N , :T ๋˜๋Š” :C ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒกํ„ฐ๊ฐ€ ์ˆซ์ž์˜ 1 ์ฐจ์› ๋ชฉ๋ก์ด๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋Š” ๋ชจ๋“  ๋ฉ”์„œ๋“œ์˜ ๊ฒฝ์šฐ์ด ์ตœ์ข… ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ๋‹ค๋ฅธ ๊ฐ’์„ ๊ตฌ๋ถ„ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ ํ•ด๋‹น ๋ฉ”์„œ๋“œ ์ •์˜๊ฐ€ ํ˜„์žฌ ๊ทธ๋Œ€๋กœ ์œ ์ง€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

N> 2 ์ธ N ์ฐจ์› ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ๋‹ค์–‘ํ•œ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. transpose ์ค‘ ํ•˜๋‚˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ AbstractArray{3,Float64,trans} ์œ ํ˜•์˜ ๊ฐ์ฒด๋ฅผ ์‹ค์ œ๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ trans!=:N , ๋˜๋Š” :T ๋Š” ํ–‰ ์ฃผ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ๋ฐฐ์—ด์˜ transpose ๋Š” ๋ชจ๋“  ์ฐจ์›์„ ๋ฐ˜๋Œ€๋กœํ•˜๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ํ›„์ž๊ฐ€ Penrose ๊ทธ๋ž˜ํ”ฝ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋ฐ›์•„ ๋“ค์ธ ๊ด€๋ก€๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

transpose ์—์„œ ์ง€์›๋˜๋Š” ์ž„์˜์˜ ์ธ๋ฑ์Šค ์ˆœ์—ด์— ๋Œ€ํ•œ ์—ญํ• ์„ ์‹ค์ œ๋กœ ๋ณด์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. permutedims ์ด ์žˆ์œผ๋ฉฐ ๊ฐœ์„  ๋œ SubArray๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ์œผ๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ์ด ๋ฌธ์ œ์˜ ์ฃผ๋œ ๋™๊ธฐ๋Š” A_mul_B ๋™๋ฌผ์›์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ๊ณ ์ฐจ ํ…์„œ ์ˆ˜์ถ•์€ ์–ด์จŒ๋“  ์ •์ƒ์ ์ธ ๊ณฑ์…ˆ์„ ํ†ตํ•ด ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (๊ทธ๋ฆฌ๊ณ  ์ง€์›๋˜์–ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค).

์ด ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๊ด€๋ จํ•˜์—ฌ ์•„์ง ์ƒ๊ฐํ•˜์ง€ ๋ชปํ•œ ๋ช‡ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋””์ŠคํŒจ์น˜ ๋ฌธ์ œ์— ๋Œ€ํ•œ ํ•ฉ๋ฆฌ์ ์ธ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•˜๋‹ค ๊ณ  ์ƒ๊ฐ

@Jutho ์˜ ์ œ์•ˆ์€ ํฅ๋ฏธ๋กœ์›Œ ๋ณด์ด๋ฉฐ ํƒ๊ตฌ ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค์„ ํ‰๊ฐ€ํ•˜๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๊ทธ๊ฒƒ๋“ค์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@toivoh ,

  • A[2:2,:] ๋„ ์ฐจ์›์„ ์œ ์ง€ํ•˜๋ฉฐ ํ• ๋‹น์ด๋‚˜ ์ƒˆ ๊ตฌ๋ฌธ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • newaxis ์™€ ๊ฐ™์€ ๊ฒƒ์€ ๋งค์šฐ ์‹คํ˜„ ๊ฐ€๋Šฅํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ # 8501์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ธ๋ฑ์‹ฑ์„ ํ†ตํ•ด ์ง์ ‘ ๋ฐฉ์†ก์„ ์ƒ์„ฑ ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ์Šฌ๋กฏ์— ์–ด๋–ค ๊ฐ’์„ ์ž…๋ ฅํ•˜๋“  ํ•ญ์ƒ 1๋กœ ํ™•์ธ๋˜๋Š” ์ธ๋ฑ์Šค ์œ ํ˜•์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

์™€ ๋ฌธ์ œ 2:2 ๋Œ€์‹ ์˜ ์ธ๋ฑ์Šค์— ๋Œ€ํ•œ ๊ธด ํ‘œํ˜„์ด์žˆ๋Š” ๊ฒฝ์šฐ ๋ฐ˜๋ณต์ด๋‹ค 2 . ๊ทธ๋Ÿฌ๋‚˜ ๋ฌผ๋ก  ์ธ๋ฑ์Šค์—์„œ ๋ฒ”์œ„๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ ์ž์‹ ์˜ ํ•จ์ˆ˜๋ฅผ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„์ฃผ ์ข‹์€ ์ œ์•ˆ : +1 :.

v' == v ์›ํ•˜๋Š” ์ด์œ ๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”.

์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์ด ์‹ค์ œ๋กœ ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ (์œ ํ•œ ์ฐจ์›) ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์ด์ค‘์ด ๋™ํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์†Œ ์ข‹์Šต๋‹ˆ๋‹ค.

๋˜๋Š” ๋” ๊ฐ•ํ•˜๊ฒŒ ์ค„๋ฆฌ์•„์˜ ๋ฐฐ์—ด์€ ๊ณต๋ณ€ ์ธ๋ฑ์Šค์™€ ๋ฐ˜ ๋ณ€์„ฑ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์„ ๋ฐ์นด๋ฅดํŠธ ๊ณต๊ฐ„ (Euclidean metric = Identity matrix = kronecker delta)์˜ ๋ฒกํ„ฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ๋™ํ˜•.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ v '== v๋ฅผ ์›ํ•œ๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€ ์•Š์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ๊ฝค ์ง๊ตํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋จธ์ง€. ์—ด ํ–‰๋ ฌ๊ณผ ๋ฒกํ„ฐ๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ ๋น„๊ตํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๊นŒ?
๋™์ผํ•œ ์š”์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

์ฐจ์› ์ˆ˜๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

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

ํ›„ํ–‰ ๋‹จ์ผ ์ฐจ์›์„ ์ถ”๊ฐ€ํ•˜์—ฌ 1-d์—์„œ 2-d๋กœ convert ๋ฌด์–ธ๊ฐ€๋ฅผํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ผ๊นŒ์š”?

์ด ์ œ์•ˆ์œผ๋กœ ๋” ์ด์ƒ ์ข‹์€ ์ƒ๊ฐ์ด ์•„๋‹ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฒกํ„ฐ๋Š” ์—ฌ์ „ํžˆ ์—ด์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ณ  covector๋Š” ํ–‰์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# 8416์—์„œ ๋‚ด๊ฐ€ ์ฃผ๋ชฉ ํ•œ ํ•œ ๊ฐ€์ง€๋Š” sparsevec ์ด ํ˜„์žฌ ๋‹จ์ผ ์—ด CSC ๋งคํŠธ๋ฆญ์Šค๋กœ ์ง€์ €๋ถ„ํ•˜๊ฒŒ ์œ„์กฐ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Sparse๋Š” ์ ์ ˆํ•œ 1-d sparse ๋ฒกํ„ฐ ์œ ํ˜•์ด ๊ตฌํ˜„๋˜๋ฉด ์—ฌ๊ธฐ์— ์ƒ๋‹นํžˆ ์ž˜ ๋งž์„ ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค (์ผ๋ฐ˜ Nd COO ์œ ํ˜•์˜ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์œ ์šฉํ•œ ๊ฒฝ์šฐ๋กœ ๋–จ์–ด ์ง€๋ฏ€๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•จ).

์ด ๋ชจ๋“  ๊ฒƒ์„ ๋ฐ›์•„๋“ค์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ์€ ์ž‘๋™ํ•˜์ง€ ์•Š์„๊นŒ์š”?

A [1 ,:] * A * A [:, 1] # ํ–‰๋ ฌ์˜ ํ–‰ * ํ–‰๋ ฌ * ํ–‰๋ ฌ์˜ ์—ด ???

๋‹น์‹ ์€ ์ผ๋‹ค

v'w๋Š” v์™€ w์˜ ๋‚ด์ ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ, ์š”์†Œ๊ฐ€ ํ•˜๋‚˜ ์ธ ๋ฒกํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ์Šค์นผ๋ผ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ v '* w๋Š” ์Šค์นผ๋ผ์ž…๋‹ˆ๊นŒ?

๋‚˜๋Š” ๋ชจ์–‘์ด (1, ..., 1, m, 1, ..., 1) ์ธ ๋‘ ํ•ญ๋ชฉ์„ ์ทจํ•˜๋Š” dot (x, y) ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค.
๋ฌด์Šจ ์ผ์ด ์žˆ์–ด๋„ ๋‚ด์ ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” x * y๊ฐ€ ์ด๋Ÿฐ ์˜๋ฏธ์—์„œ dot (x, y)๋ฅผ์ฃผ๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
x๊ฐ€ ์ฝ” ๋ฒกํ„ฐ์ด๊ณ  y๊ฐ€ ๋ฒกํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ฉด.

์ด๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ๋œจ๊ฑฐ์šด ์•„์ด๋””์–ด์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์•„๋งˆ๋„
A [:, 1,1]์€ ๋ฒกํ„ฐ์ด๊ณ  A [1, :, 1] ๋˜๋Š” A [:, 1, :]๋Š” ์ฝ” ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.
๋ฒกํ„ฐ์˜ ์ฐจ์› (์Šฌ๋กฏ)์„ ๋”ฐ๋ผ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
ํ‘œ์ค€ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…์„œ๋ฅผ ์ถ•์†Œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
1 (ํ–‰ ๋ฒกํ„ฐ) ๋ฐ 2 ๊ฐœ์˜ ์—ด ๋ฒกํ„ฐ.

์ œ๊ฐ€๋ณด๊ธฐ์—์ด ๋ฌธ์ œ์—์„œ ์ด์ „์— ๋‹ค๋ฃจ์—ˆ๋˜ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๊ณผ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

(A) ๋‹ค์ฐจ์› ๋ฐ์ดํ„ฐ์—์„œ ์ž‘๋™ ํ•  ๋•Œ ํ…์„œ ์˜๋ฏธ๋ก  (์ถ•์•ฝ ์šฉ)๊ณผ ๋ฐฐ์—ด ์˜๋ฏธ๋ก  (๋ฐฉ์†ก์šฉ)์„ ๊ตฌ๋ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•;
(B) ๋” ๋†’์€ ์ฐจ์›์œผ๋กœ ์ผ๋ฐ˜ํ™”๋˜๋Š” ์ผ๊ด€๋œ ํ”„๋ ˆ์ž„ ์›Œํฌ ๋‚ด์— ๋ช…ํ™•ํ•˜๊ณ  ํŽธ๋ฆฌํ•œ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฉ๋ฒ•.

์ด ์ œ์•ˆ์ด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ํ•œ, (A)๋ฅผ ๋‹ฌ์„ฑํ•˜๋ ค๋ฉด ์—ฌ์ „ํžˆ ์ž„์‹œ ์‚ฌ์šฉ์ž ์กฐ์ž‘์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค (ํ˜„์žฌ์˜ ๊ธฐ๋Šฅ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ). ์ง€์—ฐ ๋ž˜ํผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ (B)๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด @timholy๊ฐ€ ์ œ์•ˆํ•œ SubArray ํ™•์žฅ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ํ•„์š” ํ•˜๋ฉฐ ,์ด ์‹œ์ ์—์„œ ์–ผ๋งˆ ์ „์— ๋…ผ์˜ ๋œ ๋งˆ์Šคํ‚น ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์ง€์—ฐ ๋ฒ„์ „์ด๋ฉ๋‹ˆ๋‹ค. ๋น„์Šทํ•œ ๊ฒŒ์œผ๋ฅธ ๋ฉ”์ปค๋‹ˆ์ฆ˜ (์˜ˆ : List ๋ž˜ํผ ์œ ํ˜•)์„ ์‚ฌ์šฉํ•˜์—ฌ (A)์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ง€์›์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์— ๊ฒŒ์œผ๋ฆ„์€ ์„ ํƒ์ ์ธ ์ „๋žต์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” "์–ด์จŒ๋“  ๋” ๋†’์€ ํ…์„œ ์ˆ˜์ถ•์ด ์ •์ƒ ๊ณฑ์…ˆ์„ ํ†ตํ•ด ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค (๊ทธ๋ฆฌ๊ณ  ์ง€์›๋˜์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค)"๋ผ๋Š” @Jutho ์˜ ๊ฒฌํ•ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๋งŽ์ด ๊ณต์œ ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ๋” ์ด์ƒ ๋™์˜ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜ํ•™, ๋‚˜๋Š” ํ•ญ์ƒ ๊ทธ๊ฒƒ๋“ค์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Mathematica ๋ฐ NumPy์™€ ๊ฐ™์€ ํ˜„์žฌ ์–ธ์–ด์—๋Š” ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ๋””์ž์ธ ์ œํ•œ์ด ์žˆ์ง€๋งŒ (์œ„์—์„œ ๋…ผ์˜ํ–ˆ๋“ฏ์ด) ์ตœ์†Œํ•œ ์ง€์›๋ฉ๋‹ˆ๋‹ค! ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ„๋‹จํ•œ ์ˆ˜์น˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฒกํ„ฐ ์žฅ์˜ ๊ธฐ์šธ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ณ ์ฐจ ํ…์„œ ์ˆ˜์ถ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

"...์ด ์ ์—์„œ ๋””์ž์ธ ์ œํ•œ์ด ์žˆ์Šต๋‹ˆ๋‹ค (์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋“ฏ์ด), ์ตœ์†Œํ•œ ์ง€์›๋ฉ๋‹ˆ๋‹ค"๋ผ๊ณ  ๋งํ•  ๋•Œ, ๋ˆ„๋ฝ ๋œ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๋งํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ํ•ด๊ฒฐํ•  ์ˆ˜์—†๋Š” ๋ฒกํ„ฐ ๋ฐ ์ „์น˜์— ๋Œ€ํ•œ ๊ทผ๋ณธ์ ์ธ ๊ฒƒ์ž…๋‹ˆ๊นŒ? ๋” ๋†’์€ ์ˆ˜์ค€ ๋˜๋Š” ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ?

์ด ์ œ์•ˆ์— ๋Œ€ํ•ด (A) ๋ฐ (B) ํฌ์ธํŠธ๊ฐ€ ํ–ฅ์ƒ๋˜๋Š” ๊ฒƒ๊ณผ _ ์ถฉ๋Œ _ํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์‹ค์ œ๋กœ matlabs ํ‘œ์ค€ ๊ณฑ์…ˆ ์—ฐ์‚ฐ์ž * ๋˜๋Š” ๋‹ค๋ฅธ ๋‚ด์žฅ matlab ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ…์„œ ์ˆ˜์ถ•์ด ์–ด๋–ป๊ฒŒ ์ง€์›๋˜๋Š”์ง€ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. Numpy์—๋Š” ๋‚ด์žฅ ๊ธฐ๋Šฅ์ด ์žˆ์ง€๋งŒ (์ด๋ฆ„์„ ์žŠ์—ˆ์Šต๋‹ˆ๋‹ค) ๋‚ด๊ฐ€ ๊ธฐ์–ตํ•˜๋Š” ํ•œ ๋‹ค์†Œ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.

์ €๋„ ํ•ญ์ƒ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํ˜•ํƒœ์˜ ํ…์„œ ์ˆ˜์ถ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํ…์„œ ์ˆ˜์ถ•์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๋งํ•  ๊ฒƒ๋„์—†๊ณ  ์™„์ „ํžˆ ๊ฐ„๋‹จํ•˜์ง€ ์•Š์€ ์ด์œ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ์ ˆ๋ฐ˜์„ ๋‹ค๋ฃจ์ง€ ์•Š๋Š” Julia base์˜ ํ‘œ์ค€ ์—ฐ์‚ฐ์ž์— ๋ฐ˜์ฏค ์ž‘๋™ํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๊ธฐ๋Šฅ์„ ๋ฐ€์–ด ๋„ฃ์œผ๋ ค๊ณ ํ•˜๊ธฐ๋ณด๋‹ค๋Š”์ด๋ฅผ์œ„ํ•œ ํŠน์ˆ˜ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ฃผ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋‚ด ์˜๊ฒฌ์„ ๋ฐ”๊พธ๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค๋ฅธ ์–ด๋–ค ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ค‘์š”ํ•˜๊ณ  ์œ ์šฉํ•œ 'ํ‘œ์ค€'์ถ•์•ฝ์ด ์žˆ๋‹ค๋ฉด? ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋งค์šฐ ๋„๋ฉ”์ธ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Julia Base์—์„œ ์ฑ„ํƒํ•˜๊ธฐ์œ„ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ทœ์น™์œผ๋กœ ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Op 19-okt.-2014 om 22:52 heeft thomasmcoffee [email protected] het volgende geschreven :

์ œ๊ฐ€๋ณด๊ธฐ์—์ด ๋ฌธ์ œ์—์„œ ์ด์ „์— ๋‹ค๋ฃจ์—ˆ๋˜ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๊ณผ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

(A) ๋‹ค์ฐจ์› ๋ฐ์ดํ„ฐ์—์„œ ์ž‘๋™ ํ•  ๋•Œ ํ…์„œ ์˜๋ฏธ๋ก  (์ถ•์•ฝ ์šฉ)๊ณผ ๋ฐฐ์—ด ์˜๋ฏธ๋ก  (๋ฐฉ์†ก์šฉ)์„ ๊ตฌ๋ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•;
(B) ๋” ๋†’์€ ์ฐจ์›์œผ๋กœ ์ผ๋ฐ˜ํ™”๋˜๋Š” ์ผ๊ด€๋œ ํ”„๋ ˆ์ž„ ์›Œํฌ ๋‚ด์— ๋ช…ํ™•ํ•˜๊ณ  ํŽธ๋ฆฌํ•œ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฉ๋ฒ•.

์ด ์ œ์•ˆ์ด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งํ•  ์ˆ˜์žˆ๋Š” ํ•œ, (A)๋ฅผ ๋‹ฌ์„ฑํ•˜๋ ค๋ฉด ์—ฌ์ „ํžˆ ์ž„์‹œ ์‚ฌ์šฉ์ž ์กฐ์ž‘์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค (ํ˜„์žฌ์˜ ๊ธฐ๋Šฅ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ). ์ง€์—ฐ ๋ž˜ํผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ (B)๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด @timholy๊ฐ€ ์ œ์•ˆํ•œ SubArray ํ™•์žฅ๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ํ•„์š” ํ•˜๋ฉฐ ,์ด ์‹œ์ ์—์„œ ์–ผ๋งˆ ์ „์— ๋…ผ์˜ ๋œ ๋งˆ์Šคํ‚น ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์ง€์—ฐ ๋ฒ„์ „์ด๋ฉ๋‹ˆ๋‹ค. ๋น„์Šทํ•œ ๊ฒŒ์œผ๋ฅธ ๋ฉ”์ปค๋‹ˆ์ฆ˜ (์˜ˆ : List ๋ž˜ํผ ์œ ํ˜•)์„ ์‚ฌ์šฉํ•˜์—ฌ (A)์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ง€์›์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์— ๊ฒŒ์œผ๋ฆ„์€ ์„ ํƒ์  ์ „๋žต์ด์–ด์•ผํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” "์–ด์จŒ๋“  ๋” ๋†’์€ ํ…์„œ ์ˆ˜์ถ•์ด ์ •์ƒ ๊ณฑ์…ˆ์„ ํ†ตํ•ด ์ง€์›๋˜์ง€ ์•Š๋Š”๋‹ค (๊ทธ๋ฆฌ๊ณ  ์ง€์›๋˜์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค)"๋ผ๋Š” @Jutho ์˜ ๊ฒฌํ•ด๋ฅผ ์–ผ๋งˆ๋‚˜ ๋งŽ์ด ๊ณต์œ ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ๋” ์ด์ƒ ๋™์˜ ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜ํ•™, ๋‚˜๋Š” ํ•ญ์ƒ ๊ทธ๊ฒƒ๋“ค์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Mathematica ๋ฐ NumPy์™€ ๊ฐ™์€ ํ˜„์žฌ ์–ธ์–ด์—๋Š” ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ๋””์ž์ธ ์ œํ•œ์ด ์žˆ์ง€๋งŒ (์œ„์—์„œ ๋…ผ์˜ํ–ˆ๋“ฏ์ด) ์ตœ์†Œํ•œ ์ง€์›๋ฉ๋‹ˆ๋‹ค! ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ„๋‹จํ•œ ์ˆ˜์น˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฒกํ„ฐ ์žฅ์˜ ๊ธฐ์šธ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ณ ์ฐจ ํ…์„œ ์ˆ˜์ถ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.

์—ฌ๊ธฐ A์˜ ๋งˆ์ง€๋ง‰ ์ง€์ˆ˜์™€ B์˜ ์ฒซ ๋ฒˆ์งธ ์ง€์ˆ˜์— ๋Œ€ํ•œ ์ˆ˜์ถ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ผ์ข…์˜ mathematica์˜ ์ ์ฒ˜๋Ÿผ

function contract(A,B)
   s=size(A)
   t=size(B)
   reshape(reshape(A, prod(s[1:end-1]), s[end]) *  reshape(B,t[1],prod(t[2:end])) , [s[1:end-1]... t[2:end]...]...)
end

์ €๋Š” ํ•ญ์ƒ ํ˜•ํƒœ ๋ณ€๊ฒฝ, ์ˆœ์—ด, ์•„๋งˆ๋„ ๋ณต์žกํ•œ ๊ฒƒ์œผ๋กœ ์ผ๋ฐ˜์ ์ธ ์ˆ˜์ถ•์„ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
์œ„์™€ ๊ฐ™์ด ๋‹ค์†Œ ํ•„์š”ํ•  ๋•Œ ์ ‘ํ•ฉ์ฒด

ํ…์„œ์˜ ํฐ ๋ฌธ์ œ๊ฐ€ ์‹ค์ œ๋กœ ๋ฌด์—‡์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์™œ์ด ์ค‘ ๋ช‡ ๊ฐ€์ง€๋งŒ ๊ตฌํ˜„ํ•˜๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.
๊ธฐ๋Šฅ?

๋„ค, ๋งž์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ˜ธ์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๊ณ  ์žํ•˜๋Š” ๊ฒƒ์€

  1. ์ธ๋ฑ์‹ฑ์—์„œ ์–ด๋–ค ์ฐจ์›์„ ์‚ญ์ œํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? "APL ์Šคํƒ€์ผ"์€ ๋…ผ๋ž€์˜ ์—ฌ์ง€๊ฐ€์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  2. vector' ๋Š” ๋ฌด์—‡์„ ์ œ๊ณตํ•ฉ๋‹ˆ๊นŒ?

ํ…์„œ ์ˆ˜์ถ•์˜ ๊ฒฝ์šฐ ์ ์ ˆํ•œ ์œ ํ˜•๊ณผ ๋‹จ๊ณ„์  ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์ œ๋กœ ๊ณ ์„ฑ๋Šฅ ๊ตฌํ˜„์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๋Š๋‚Œ์€ ํ…์„œ๊ฐ€ ์Šค์Šค๋กœ๋ฅผ ๋Œ๋ณผ ๊ฒƒ์ด๊ณ  ์šฐ๋ฆฌ๋Š”
์„ ํ˜• ๋Œ€์ˆ˜ ์‚ฌ์šฉ์ž๋Š” ์ขŒ์ ˆํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚ด ๊ฐ€์žฅ ํฐ ๊ด€์‹ฌ์‚ฌ๋Š”

(2d ๋ฐฐ์—ด์—์„œ ํ–‰ ๊ฐ€์ ธ ์˜ค๊ธฐ) * (2d ๋ฐฐ์—ด) * (2d ๋ฐฐ์—ด์—์„œ ์—ด ๊ฐ€์ ธ ์˜ค๊ธฐ)

์ผ๋ฐ˜์ ์ธ ์ž‘์—…์€ ์šฐ๋ฆฌ๊ฐ€ ์ทจํ•˜์ง€ ์•Š์œผ๋ฉด ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค
(ํ–‰ ๊ฐ€์ ธ ์˜ค๊ธฐ) covector ๋˜๋Š” ์•„๋งˆ๋„ ๋” ๋‚˜์€
์ผ๋ฐ˜ ์Šฌ๋กฏ ์ธ๋ฑ์Šค๋กœ ํƒœ๊ทธ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

@JeffBezanson , ์ด๋Ÿฌํ•œ ์ž‘์—…์ด ์ง€์›๋œ๋‹ค๋Š” ๊ฒƒ์€ ๋‚ด์žฅ ๋ฐ์ดํ„ฐ ์œ ํ˜• ๋ฐ ํ•จ์ˆ˜๊ฐ€ Mathematica์˜ Dot ํ•จ์ˆ˜์™€ ๊ฐ™์ด ํŠน๋ณ„ํžˆ์ด๋ฅผ ์—ผ๋‘์—๋‘๊ณ  ์„ค๊ณ„๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋ณธ ์ œ๊ณต, ๋ฌธ์„œํ™” ๋ฐ / ๋˜๋Š” ๋ช…๋ฐฑํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋””์ž์ธ์— ๋Œ€ํ•ด ํ˜„์žฌ ๊ตฌํ˜„์—์„œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ชจ๋“  ๊ฒƒ์„ ์ง€์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์ˆ ์  ์ธ ๊ฐˆ๋“ฑ์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ๋””์ž์ธ์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

@Jutho , ์ €๋Š” MATLAB์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„ ๋Œ“๊ธ€์„ ๋‹ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” NumPy์˜ ๋””์ž์ธ์ด Mathematica์˜ ๋””์ž์ธ๋ณด๋‹ค ๋œ ์ผ๊ด€ ์ ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ (์œ„์—์„œ ๋…ผ์˜ํ–ˆ๋“ฏ์ด) ๋” ๋‹ค์–‘ํ•œ ๋™์ž‘์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์„ ํ˜• ๋Œ€์ˆ˜๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ์ผ๋ฐ˜ ํ…์„œ ๊ธฐ๊ณ„๊ฐ€ ๋ณด์ด์ง€ ์•Š๊ฒŒํ•ด์•ผํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ Julia์˜ ๋›ฐ์–ด๋‚œ ์–ธ์–ด ๊ธฐ๋Šฅ์œผ๋กœ ์ธํ•ด NumPy์™€ Mathematica๊ฐ€ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋‹ค์–‘ํ•œ ๊ตฌํ˜„์„ ๋„์ž… ํ•  ํ•„์š”๊ฐ€ ์—†์–ด ๋ณด์ž…๋‹ˆ๋‹ค. ์–ด๋Š ์ •๋„ ๊ฐ•์ œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ์ด ๋ฌธ์ œ๋Š” ์ ์–ด๋„ ๋ถ€๋ถ„์ ์œผ๋กœ๋Š” ๋‘ ๊ฐ€์ง€ ๋ชจ๋‘์— ์ ํ•ฉํ•œ ํ†ตํ•ฉ ์‹œ์Šคํ…œ์„ ์ฐพ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด ์˜€๋Š”๋ฐ, ์ผ๋ฐ˜์ ์ธ ์„ ํ˜• ๋Œ€์ˆ˜ ์‚ฌ๋ก€์— ์–ด๋–ค ์ „๋ฌธํ™”๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€ ์˜ˆ๋ฅผ ๋“ค์–ด vector' ๋Œ€ํ•ดํ•ด์•ผ ํ•  ์ผ์„ ๋ฐํžˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

A [1 ,:] * A * A [:, 1] # ํ–‰๋ ฌ์˜ ํ–‰ * ํ–‰๋ ฌ * ํ–‰๋ ฌ์˜ ์—ด ???

๋งž์Šต๋‹ˆ๋‹ค โ€“ A[1,:]' * A * A[:,1] ๋ฅผ ์จ์•ผํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ v '* w๋Š” ์Šค์นผ๋ผ์ž…๋‹ˆ๊นŒ?

์˜ˆ, v'w ์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์ด ์ œ์•ˆ์„ ๋ฐฉํ•ดํ•˜๋Š” ์ข‹์€ ๊ฒƒ ์ค‘ ํ•˜๋‚˜๋Š” ๊ฐ’์‹ผ ๊ตฌ๋ฌธ ํ•ดํ‚น์„ ์™„์ „ํžˆ ์ œ๊ฑฐํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๊ทธ๋ ‡๊ฒŒ ๋œจ๊ฑฐ์šด ์•„์ด๋””์–ด์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ...

๋‚˜๋Š” ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด ์ œ์•ˆ์˜ ๋ชฉํ‘œ ์ค‘ ํ•˜๋‚˜๋Š” ์Šฌ๋ผ์ด์‹ฑ ๋ฐ ์ธ๋ฑ์‹ฑ ๊ทœ์น™์„ ๋Œ€์นญ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋ฉฐ, ์ด๊ฒƒ์€ ์ธ๋ฑ์Šค ์ค‘ ํ•˜๋‚˜๋ฅผ ํŠน๋ณ„ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ „์ฒด ๋ชฉ์ ์„ ๋ฌด๋„ˆ ๋œจ๋ฆฌ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์Šฌ๋ผ์ด์‹ฑ์ด ๋น„๋Œ€์นญ ์ ์ด๋ผ๋ฉด ํ˜„์žฌ ๋™์ž‘์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@thomasmcoffee ์ข€ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋งํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์€ ์ผ๊ด€๋˜๊ณ  ๋ฌธ์„œํ™”๋˜๊ณ  ๋ช…๋ฐฑํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ํ…Œ์ด๋ธ”์—์žˆ๋Š” ์ œ์•ˆ์ด ์ด๋Ÿฌํ•œ ๋ชฉํ‘œ์— ๋ถ€ํ•ฉ ํ•˜๋Š”๊ฐ€? ์•„๋งˆ๋„ ํ˜„์žฌ์˜ ์ œ์•ˆ์ด ์ด๋Ÿฌํ•œ ๋ชฉํ‘œ์— ์ „ํ˜€ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ณณ์—์„œ ๊ฐœ์„ ์œผ๋กœ ์ด์–ด์ง€๋Š” ํ•œ, ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ์ˆœ ๊ฐœ์„ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ˆ ์ด๊ฑธ ๋˜‘๋ฐ”๋กœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค

A๊ฐ€ ์ •์‚ฌ๊ฐํ˜•์ด ์•„๋‹Œ ๊ฒฝ์šฐ

| | ํ˜„์žฌ | ์ œ์•ˆ | MATLAB |
| --- | --- | --- | --- |
| A * A [1 ,:] | ์•„๋‹ˆ์˜ค | ์˜ˆ | ์•„๋‹ˆ์˜ค |
| A * A [1 ,:] '| ์˜ˆ | ์•„๋‹ˆ์˜ค | ์˜ˆ |
| A [:, 1] A | ์•„๋‹ˆ์˜ค |
A [:, 1] ' A | ์˜ˆ | ์˜ˆ | ์˜ˆ |

A๊ฐ€ ์ •์‚ฌ๊ฐํ˜•์ด๋ฉด

| | ํ˜„์žฌ | ์ œ์•ˆ | MATLAB |
| --- | --- | --- | --- |
| A * A [:, 1] | ์˜ˆ | ์˜ˆ | ์˜ˆ |
| A * A [:, 1] '| ์•„๋‹ˆ์˜ค | ์•„๋‹ˆ์˜ค | ์•„๋‹ˆ์˜ค |
| A [1 ,:] A | ์•„๋‹ˆ์˜ค |
A [1 ,:] ' A | ์•„๋‹ˆ์˜ค | ์˜ˆ | ์•„๋‹ˆ์˜ค |

๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•œ ๋‹ต๋ณ€์„ ๋ฐฉ๊ธˆ ๊ฒŒ์‹œํ–ˆ์ง€๋งŒ ์–ด๋–ป๊ฒŒ ๋“  ์—ํ…Œ๋ฅด๋กœ ์‚ฌ๋ผ์กŒ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ชจ๋‘ ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฐฐ์—ด์—์„œ๋Š” ์ „์น˜ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•  ๋•Œ ํ–‰ ์Šฌ๋ผ์ด์Šค ๋˜๋Š” ์—ด ์Šฌ๋ผ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์™€ ์™ผ์ชฝ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ณฑํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ณ ๋ คํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (์—ด์€ ์™ผ์ชฝ์œผ๋กœ, ํ–‰์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฐ”๋€œ). ์ œ์•ˆ์—์„œ, ๋‹น์‹ ์€ ๋‹น์‹ ์ด ๊ณฑํ•˜๋Š” ์ชฝ๋งŒ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค โ€“ ๋‹น์‹ ์€ ํ•ญ์ƒ ์™ผ์ชฝ์—์„œ ์กฐ์˜ฎ๊น€ํ•˜์ง€ ์•Š๊ณ  ์˜ค๋ฅธ์ชฝ์— ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ดœ์ฐฎ์„๊นŒ์š”?

dot(x,y) ๋ฐ dot(x.',y) ๋ฐ dot(x,y.') ๋ฐ dot(x.',y.') ๋ชจ๋‘ ๋™์ผํ•œ ์Šค์นผ๋ผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๊นŒ?

์ฆ‰ ฮฃแตข conj (xแตข) * yแตข

์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋„ˆ๋ฌด ๋งŽ์ด ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  dot (x, A * y)๋ฅผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@alanedelman์˜ ์ด๋Ÿฌํ•œ ์˜ˆ์ œ๋Š” APL ์ธ๋ฑ์‹ฑ์œผ๋กœ ์ธํ•ด ์•ˆ๋˜๋Š” ์œ„์น˜์—์„œ ์•ฝ๊ฐ„ ๋ฐ›์Šต๋‹ˆ๋‹ค . ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์€ ๋‚ด๊ฐ€ ๋…ผ์˜ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ (์˜ˆ๋ฅผ ๋“ค์–ด A[i; :] ?) ์ธ๋ฑ์‹ฑ์˜ ๋ณ€ํ˜•์„ ๋ณด์กดํ•˜๋Š” ์ฐจ์›์„ ๊ฐ€์งˆ ์ˆ˜์žˆ๋Š” ์ถฉ๋ถ„ํ•œ ๋™๊ธฐ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์œ„์˜ ๊ฒฝ์šฐ์— covector๋ฅผ ์ œ๊ณตํ•˜๊ธฐ๋ฅผ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@alanedelman , dot ๋ฉ”์„œ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„์•ผํ•˜๊ณ  ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ด์•ผํ•˜๋Š” ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ €๋Š” ํ•ญ์ƒ ํ˜•ํƒœ ๋ณ€๊ฒฝ, ์ˆœ์—ด, ์•„๋งˆ๋„ ๋ณต์žกํ•œ ๊ฒƒ์œผ๋กœ ์ผ๋ฐ˜์ ์ธ ์ˆ˜์ถ•์„ ํ•  ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
์œ„์™€ ๊ฐ™์ด ๋‹ค์†Œ ํ•„์š”ํ•  ๋•Œ ์ ‘ํ•ฉ์ฒด

์ด๊ฒƒ์ด ๋ฐ”๋กœ TensorOperations.jl์˜ tensorcontract ํ•จ์ˆ˜์—์„œ ๊ตฌํ˜„๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. : BLAS ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜๋ฉด ํ™•์‹คํžˆ ํฐ ํ…์„œ์— ๊ฐ€์žฅ ๋น ๋ฆ…๋‹ˆ๋‹ค. ๋˜ํ•œ ์ˆœ์—ด (์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น)์˜ ํ•„์š”์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋” ์ž‘์€ ํ…์„œ์˜ ๊ฒฝ์šฐ ๋” ๋น ๋ฅธ Cartesian.jl ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์ค„๋ฆฌ์•„ ๊ตฌํ˜„์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” MATLAB์ด Julia๊ฐ€ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š” ๋‚ด์žฅ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค๋Š” ์ž˜๋ชป๋œ ์ฃผ์žฅ์— ์‘๋‹ตํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ์–‘ ๋ณ€๊ฒฝ๊ณผ ์ˆœ์—ด ๋ชจ๋‘ Julia์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Numpy์—๋Š” ์‹ค์ œ๋กœ ์ด๊ฒƒ์„ ์ •ํ™•ํžˆ ์ˆ˜ํ–‰ํ•˜๋Š” tensordot ํ•จ์ˆ˜๊ฐ€ ์žˆ์ง€๋งŒ ์ถœ๋ ฅ ํ…์„œ์˜ ์ธ๋ฑ์Šค ์ˆœ์„œ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ํŠน์ • ์ถœ๋ ฅ ์ˆœ์„œ๋ฅผ ์—ผ๋‘์—๋‘๊ณ  ์žˆ๋‹ค๋ฉด ๋‚˜์ค‘์— ์ˆœ์—ด์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ๋ฒกํ„ฐ ๋ฐ ํ–‰๋ ฌ ๋Œ€์ˆ˜์— ๋Œ€ํ•œ ์ผ๊ด€๋œ ๋™์ž‘์„ ์–ป๋Š” ํ˜„์žฌ ์ฃผ์ œ์—์„œ ๋„ˆ๋ฌด ๋ฉ€์–ด์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์Šคํ…ŒํŒ์˜ ์ œ์•ˆ์— +1. ๋งค์šฐ ๋ช…ํ™•ํ•˜์ง€๋งŒ ์ถฉ๋ถ„ํžˆ ์œ ์—ฐํ•œ ์˜๋ฏธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์„ ํ˜• ๋Œ€์ˆ˜ ์‚ฌ์šฉ์ž๋กœ์„œ, MATLAB ์Šคํƒ€์ผ ๊ตฌ๋ฌธ์— ์ต์ˆ™ํ•œ ์‚ฌ๋žŒ์ด๋ผ๋„ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ถฉ๋ถ„ํžˆ ๊ฐ„๋‹จํ•œ ๊ทœ์น™์„ ์ฐพ์„ ์ˆ˜์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

' ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์•ฝ๊ฐ„ ํ˜ผ๋ž€ ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. v ์ด ๋ฒกํ„ฐ์ด๋ฉด v' ๋Š” transpose ์ž…๋‹ˆ๋‹ค. a ๊ฐ€ 2D ๋ฐฐ์—ด ์ธ ๊ฒฝ์šฐ a' ๋Š” ์ด์ œ transpose ๋ฉ๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค b ์˜ ์ฒซ ๋ฒˆ์งธ ์ฐจ์›์„ a ์˜ ์ฒซ ๋ฒˆ์งธ ์ฐจ์›๊ณผ ์ถ•์†Œํ•˜์—ฌ b' * a ๋ฅผ ์‰ฝ๊ฒŒ ํ˜•์„ฑ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ •์˜ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

a ์˜ ์ฐจ์›์ด> 2 a' ์˜ ์ •์˜์— ๋Œ€ํ•œ ํ•ฉ์˜๊ฐ€์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์น˜์ˆ˜๋ฅผ ๋ฐ˜์ „ ์ด์™ธ์˜ ์ œ์•ˆ ๋“ฃ๊ณ ์ด ์ผ์น˜ํ•˜์ง€ ์•Š์€ b' * a ์˜ ์ฒซ ๋ฒˆ์งธ ์ฐจ์› ๊ณ„์•ฝ b ์˜ ์ฒซ ๋ฒˆ์งธ ์ฐจ์›๊ณผ a .

' ์ด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์˜ ํฌ๊ธฐ๋ฅผ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์„ค๋ช… ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์— ๋Œ€ํ•œ ์ž๋ฃŒ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๋‹ค๋ฅธ ์ˆ˜์ถ• ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ํ•ฉ๋ฆฌ์ ์ธ ๊ฒƒ ๊ฐ™๋‹ค contract(a, b, 2, 3) ์˜ 2 ์ฐจ์› ๊ณ„์•ฝ a ์˜ 3์— b .

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , dot(a,b) == a'*b a ๋ฐ b ์ด ๋ฒกํ„ฐ์ด์ง€๋งŒ dot(a,b) ๋Š” ํ˜„์žฌ ํ–‰๋ ฌ์— ๋Œ€ํ•ด ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ dot(a,b) = trace(a'*b) ์„ (๋ฅผ) ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@madeleineudell : '์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์˜๋ฏธํ•˜๋Š” ๋ฐ”์— ๋Œ€ํ•ด ์•ฝ๊ฐ„ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š”์ด ์šฐ๋ ค๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด ์ œ์•ˆ์—์„œ ์†์„ฑ 2-5, 7, 8 ๋ฐ 10์„ ์ •์˜ ํŠน์„ฑ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ด๊ฒƒ์„ ์œ ์ง€ํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

  • v' ์€ 1 ์ฐจ์›์ด์ง€๋งŒ ๋ฒกํ„ฐ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
  • v'' === v
  • v' == v
  • v'w ์€ ์Šค์นผ๋ผ์ž…๋‹ˆ๋‹ค.
  • v*w' ๋Š” ํ–‰๋ ฌ์ž…๋‹ˆ๋‹ค.
  • v'*M ๋Š” v' ์™€ ๊ฐ™์€ ์ข…๋ฅ˜์ž…๋‹ˆ๋‹ค.
  • M' ๋Š” 2 ์ฐจ์›์ด์ง€๋งŒ ํ–‰๋ ฌ์ด ์•„๋‹™๋‹ˆ๋‹ค. ํ–‰๋ ฌ๋ณด๊ธฐ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ, ๋” ๋†’์€ ์ฐจ์›์˜ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์˜๋ฏธํ•˜๊ฑฐ๋‚˜ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ œ์•ฝ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ฝ” ๋ฒกํ„ฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์ด๋ก ์€ ๋” ๋†’์€ ์ฐจ์›์„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ, ์˜ˆ๋ฅผ ๋“ค์–ด ์œ„ / ์•„๋ž˜ ์ฐจ์›์„ ๊ฐ–๊ฑฐ๋‚˜ ๊ฐ ์ฐจ์›์„ ์ธ๋ฑ์Šค๋กœ ๋ ˆ์ด๋ธ”๋งํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์ด ์ผ์„ ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ฒŒํ•˜์ง€ ์•Š๊ณ  ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ ์–ด๋„ ' ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ทœ์น™์€ ๋ฒกํ„ฐ์™€ ์ฝ” ๋ฒกํ„ฐ์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ ํ•  ์ž‘์—…์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฐจ์›์„ ๋ฐ˜์ „์‹œํ‚ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜์žˆ๋Š” ์œ ์ผํ•œ ๊ฐ„๋‹จํ•œ ๊ทœ์น™์€ ๋ฒกํ„ฐ, ์ฝ” ๋ฒกํ„ฐ ๋ฐ ํ–‰๋ ฌ ๋ชจ๋‘์— ๋Œ€ํ•ด ์œ„์˜ ๋™์ž‘์„ ์บก์ฒ˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋ฒกํ„ฐ์—๋Š” ๋‘ ๋ฒˆ์งธ ์ฐจ์›์ด์—†๊ณ  ์ฝ” ๋ฒกํ„ฐ์—๋Š” ์ฒซ ๋ฒˆ์งธ์™€ ํ˜„์žฌ ๋‘ ๋ฒˆ์งธ๊ฐ€ ์—†์Œ).

2014 ๋…„ 10 ์›” 20 ์ผ 09:05์— toivoh [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ ์–ด๋„ '์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ทœ์น™์€ ๋ฒกํ„ฐ์™€ ์ฝ” ๋ฒกํ„ฐ์— ๋Œ€ํ•ด ์ˆ˜ํ–‰ ํ•  ์ž‘์—…์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ฐจ์›์„ ๋ฐ˜์ „์‹œํ‚ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ƒ๊ฐํ•  ์ˆ˜์žˆ๋Š” ์œ ์ผํ•œ ๊ฐ„๋‹จํ•œ ๊ทœ์น™์€ ๋ฒกํ„ฐ, ์ฝ” ๋ฒกํ„ฐ ๋ฐ ํ–‰๋ ฌ ๋ชจ๋‘์— ๋Œ€ํ•ด ์œ„์˜ ๋™์ž‘์„ ์บก์ฒ˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋ฒกํ„ฐ์—๋Š” ๋‘ ๋ฒˆ์งธ ์ฐจ์›์ด์—†๊ณ  ์ฝ” ๋ฒกํ„ฐ์—๋Š” ์ฒซ ๋ฒˆ์งธ์™€ ํ˜„์žฌ ๋‘ ๋ฒˆ์งธ๊ฐ€ ์—†์Œ).

์ผ๋ฐ˜ ํ…์„œ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ด๊ฒƒ์€ ์‚ฌ์‹ค์ด ์•„๋‹ˆ๋ผ๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค. ํ–‰๋ ฌ๊ณผ ๋ฒกํ„ฐ๋ฅผ ์ˆซ์ž๊ฐ€์žˆ๋Š” ์ผ๋ถ€ ๋ธ”๋ก์œผ๋กœ ๋งŒ ์ƒ๊ฐํ•˜๊ณ  v๋ฅผ ์—ด๋กœ, v '๋ฅผ ํ–‰์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด ์‚ฌ์‹ค ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ v๋ฅผ ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์ผ๋ถ€ ์š”์†Œ๋กœ ์ƒ๊ฐํ•˜๊ณ  w = v '๋ฅผ ์ด์ค‘ ๊ณต๊ฐ„ V_์˜ ์š”์†Œ w์— v๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ƒ๊ฐํ•˜๋ฉด w๋Š” ์—ฌ์ „ํžˆ ๋ฒกํ„ฐ, ์ฆ‰ 1 ์ฐจ์› ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ V์—์„œ V_๋กœ์ด ๋งคํ•‘์„ ์ •์˜ํ•˜๋ ค๋ฉด ๋ฉ”ํŠธ๋ฆญ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, w_i = g_ {i, j} v ^ j์ž…๋‹ˆ๋‹ค. ์ด์ œ V๊ฐ€ ๋ฐ์นด๋ฅดํŠธ ๊ณต๊ฐ„, ์ฆ‰ ํ‘œ์ค€ ์œ ํด๋ฆฌ๋“œ ๋ฉ”ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•˜๋Š” R ^ n์ด๋ฉด V *๋Š” ์ž์—ฐ์ ์œผ๋กœ V์™€ ๋™ํ˜•์ด๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ƒ์œ„ ๋˜๋Š” ํ•˜์œ„ ์ธ๋ฑ์Šค (๊ณต๋ณ€ ๋˜๋Š” ๋ฐ˜๋ฐ˜ ๋ณ€) ๊ฐœ๋…์ด ์—†์œผ๋ฏ€๋กœ w_i = v_i์ž…๋‹ˆ๋‹ค. = v ^ i = w ^ i. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ, ์ฆ‰ Julia Base๊ฐ€ ์ง€์›ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค. (๋ณต์†Œ ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ๊ฒฝ์šฐ V *๋Š” ์ž์—ฐ์ ์œผ๋กœ Vbar, ์ผค๋ ˆ ๋ฒกํ„ฐ ๊ณต๊ฐ„๊ณผ ๋™ํ˜•์ด๋ฏ€๋กœ ์ž์—ฐ ๋งคํ•‘์€ w_i = conj (v ^ i)์ž…๋‹ˆ๋‹ค.)

๋ฒกํ„ฐ๋ฅผ ์ˆซ์ž๊ฐ€์žˆ๋Š” ์—ด๋กœ, ์ด์ค‘ ๋ฒกํ„ฐ๋ฅผ ์ˆซ์ž๊ฐ€์žˆ๋Š” ํ–‰์œผ๋กœ, ๋”ฐ๋ผ์„œ ํ–‰๋ ฌ (V \ ox V_์˜ ์š”์†Œ)์„ ์ˆซ์ž๊ฐ€์žˆ๋Š” ๋ธ”๋ก์œผ๋กœ ํ‘œ์‹œํ•˜๋Š” ๊ทœ์น™์€ ๋งค์šฐ ํŽธ๋ฆฌํ•˜์ง€๋งŒ ๋” ๋†’์€ ์ฐจ์›์„ ๊ณ ๋ คํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋Š” ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด, ์ฆ‰ ๊ณ ์ฐจ ํ…์„œ ์ œํ’ˆ ๊ณต๊ฐ„์˜ ์š”์†Œ. ์ด ๊ฒฝ์šฐ 'ํ–‰ ๋ฒกํ„ฐ', ์ฆ‰ ์ฒซ ๋ฒˆ์งธ ์ฐจ์›์˜ ํฌ๊ธฐ๊ฐ€ 1 ์ธ 2 ์ฐจ์› ๊ฐ์ฒด, ์ฆ‰ matlab / julia ์šฉ์–ด๋กœ ๋งํ•˜์ž๋ฉด ํ…์„œ ๊ณฑ ๊ณต๊ฐ„ V1 \ ox V2์˜ ์ผ๋ถ€ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ V1์€ R (๋˜๋Š” ๋‹ค๋ฅธ 1 ์ฐจ์› ๊ณต๊ฐ„)์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๊ธฐ๋ณธ ๋™์ž‘์œผ๋กœ ์›ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ, ์ผ๋ฐ˜ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์ „์น˜๋ฅผ ์ •์˜ํ•˜๊ณ  matlab๊ณผ ๊ฐ™์ด ์ˆœ์—ด์„ ์ฐธ์กฐํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ํ…์„œ์˜ ์ฒ˜์Œ ๋‘ ์ฐจ์›์„ ๊ธฐ๋ณธ ๊ทœ์น™์œผ๋กœ ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ๊ณ ์ฐจ ํ…์„œ ์ œํ’ˆ ๊ณต๊ฐ„ V1 \ otimes V2 \ otimesโ€ฆ \ otimes Vn์— ๊ณ ์œ  ํ•œ ์ •์˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์ฐจ์›์„ ๋’ค์ง‘๋Š” ๊ทœ์น™์€ ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ Penrose์˜ ํŽธ๋ฆฌํ•œ ๊ทธ๋ž˜ํ”ฝ ํ‘œํ˜„์—์„œ ๋น„๋กฏ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ด๊ฒƒ์€ ํ–‰๋ ฌ ๊ณต๊ฐ„ (V \ otimes V_)์„ ์ž์‹  (V * \ otimes V * = V \ otimes V )์— ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ž์œผ๋กœ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
1) ๋ฐ์นด๋ฅดํŠธ ํ…์„œ ์„ค์ • ๋‚ด์—์„œ ์„ ํƒํ•œ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ ํŽธ์˜ ์—ฐ์‚ฐ์ž '(๊ทธ๋ฆฌ๊ณ  ์–ด์ฉŒ๋ฉด *)๊ฐ€ ์ž„์˜์˜ ๊ณ ์ฐจ ๋ฐฐ์—ด๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋กํ•ฉ๋‹ˆ๋‹ค (์ฆ‰, ์ƒ์œ„ ์ธ๋ฑ์Šค์™€ ํ•˜์œ„ ์ธ๋ฑ์Šค๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Œ). ์ด๊ฒƒ์€ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•ด ๋†€๋ผ์šด ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2) '์™€ *๋ฅผ ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. ๊ณ ์ฐจ ๋ฐฐ์—ด์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ฐ€์žฅ ์ธ๊ธฐ์žˆ๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (์˜ˆ : Matlab ๋“ฑ).

์ด ๊ฒŒ์‹œ๋ฌผ์€ ์ž‘๋…„์— ๋‚ด๊ฐ€ ์ทจํ•œ ์ž…์žฅ์—์„œ ๋‹ค๋ฅธ ์ชฝ์„ ์ทจํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–‘์ชฝ์—์„œ ์–‘๋ฉด์„ฑ์„ ํƒ๊ตฌํ•˜์‹ญ์‹œ์˜ค.

๊ดœ์ฐฎ ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.
๋“œ๋””์–ด ํ˜„์žฌ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์— ๋…ผ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ๋˜์—ˆ์ง€๋งŒ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
ํ•ดํ‚น์ฒ˜๋Ÿผ ๋ณด์˜€๊ธฐ ๋•Œ๋ฌธ์— ์งœ์ฆ์ด๋‚ฌ์Šต๋‹ˆ๋‹ค. ์™ ์ง€ ์ดํ•ด ํ–ˆ์œผ๋‹ˆ
๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋” ์ข‹์•„ํ•œ๋‹ค.

ํ˜„์žฌ ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ ๋ชจ๋“  ๋ฐฐ์—ด์€ 1์ด ๋‚ดํฌ๋˜์–ด ๋ฌดํ•œ ์ฐจ์›์ž…๋‹ˆ๋‹ค.
์•„ํฌ์ŠคํŠธ๋กœํ”ผ ์—ฐ์‚ฐ์ž '๋Š” ์ฒ˜์Œ ๋‘ ์ฐจ์›์„ ๊ตํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์‚ฌ์‹ค ์˜ค๋Š˜๋‚  ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—

ndim (A) <= 2? interchange_first_two_dims : no_op

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๊ทธ๊ฑธ๋ณด๊ณ  ๋‚ด๊ฐ€ ๋†“์นœ๋‹ค๋ฉด ๋ฏธ์•ˆ ํ•ด์š”. ๋‚ด ๋งˆ์Œ์€ ์ˆ˜๋ ์— ๋น ์กŒ๋‹ค
๋ฒกํ„ฐ๋Š” ๋ฌดํ•œํ•œ ์ฐจ์›์ด ์•„๋‹ˆ๋ผ 1 ์ฐจ์›์ด๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ
๋”ฐ๋ผ์„œ ์กฐ์˜ฎ๊น€์€ ์ฐจ์›์„ ๋ฐ˜๋Œ€๋กœํ•ด์•ผํ•˜๋ฏ€๋กœ no_op์ด๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์•„ํฌ์ŠคํŠธ๋กœํ”ผ๊ฐ€์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ์•„ํฌ์ŠคํŠธ๋กœํ”ผ๊ฐ€ ํ•ญ์ƒ ๋ฐ”๋€Œ์–ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.
์ฒ˜์Œ ๋‘ ๊ฐ€์ง€ ์ฐจ์›์€ ์ƒ๊ด€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•„ํฌ์ŠคํŠธ๋กœํ”ผ๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค
๋‹ค ์„ ํ˜• ๋Œ€์ˆ˜๊ฐ€ ์•„๋‹Œ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ์œ„ํ•ด.

๋‚˜๋Š” ์•„ํฌ์ŠคํŠธ๋กœํ”ผ ๋ณ„ํ‘œ ( " '*") (๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด! ๋˜๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋‹ค๋ฅธ ๊ฒƒ)๋ฅผ ๊ฐ€์ง€๊ณ  ๋†€์•˜๋‹ค.
๋งˆ์ง€๋ง‰ ์ฐจ์›์„ ์ฒซ ๋ฒˆ์งธ ์ฐจ์›์œผ๋กœ ์ถ•์†Œํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (์˜ˆ : Mathematica์˜ ์ )
์ธ๋ฑ์‹ฑ์ด ๋งŽ๊ณ  ์ฝ” ๋ฒกํ„ฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‚ด ๋‡Œ์˜ ์ผ๋ถ€๋Š” ์—ฌ์ „ํžˆ ํƒ๊ตฌ ํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ๊นจ์–ด ๋‚˜๋ฉด ํ˜„์žฌ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์ด ๋” ์ข‹์•„์ง€๊ณ  ๋” ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค.
(์˜ค๋Š˜ ๋‚˜์ค‘์— ๋‚ด ๊ธฐ๋ถ„์„ ๋ณด์ž)

์ž‘๋…„์—์ด ์Šค๋ ˆ๋“œ๋ฅผ ์‹œ์ž‘ํ•œ ํ›„ ํ›„ํšŒํ•˜์ง€ ์•Š์ง€๋งŒ ์–ด๋–ค ๊ฒฝ์šฐ์ธ์ง€ ๋‹ค์‹œ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.
์˜ค๋Š˜๋‚  ์‚ฌ๋žŒ๋“ค์„ ์ •๋ง ์งœ์ฆ๋‚˜๊ฒŒํ•ฉ๋‹ˆ๋‹ค ... ์˜ˆ์ œ ๋ชฉ๋ก์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ... ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋ถ€
์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— ๋น›์„ ๋น„์ถ”๋Š” ๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ํ•˜๋Š” ์ผ์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚ซ์Šต๋‹ˆ๋‹ค.

์ด ๊ธ€ ์ „์ฒด๋ฅผ ์ฝ์—ˆ๊ณ  ๋งŽ์€ ์›์น™์„ ๋ดค์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋‚ด ๋จธ๋ฆฌ๋ฅผ ๋‘˜๋Ÿฌ์‹ผ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ž์ฃผ ์งœ์ฆ์ด ๋‚ฌ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[1 2 3] # ndims == 2
[1,2,3] # ndims == 1
[1; 2; 3] # ndims == 1

์ฃผ๋กœ ๊ธฐ์–ต์ด ์•ˆ ๋‚˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ƒฅ ์ƒ๊ฐ ์‹คํ—˜์ž…๋‹ˆ๋‹ค. @alanedelman ์ด '* ๋Œ€ํ•ด ์—ผ๋‘์— ๋‘” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ์ถ•์†Œ ์—ฐ์‚ฐ์ž๋กœ ์‚ฌ์šฉํ•˜๋„๋ก * ๋ฅผ ์žฌ์ •์˜ํ•˜๋ฉด ์–ด๋–ค ๊ธฐ๋Šฅ์ด ์†์‹ค๋ฉ๋‹ˆ๊นŒ? ์„ ํ˜• ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์—์„œ ' ์— ๋Œ€ํ•œ ํ•„์š”์„ฑ์„ ์ „ํ˜€ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๊นŒ (ํ–‰๋ ฌ์— ๋Œ€ํ•œ ์ „์น˜ ๊ธฐ๋Šฅ ์ œ์™ธ)? ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด outer(w,v) ๋กœ ์‰ฝ๊ฒŒ ๋Œ€์ฒด ๋  ์ˆ˜์žˆ๋Š” ์™ธ๋ถ€ ์ œํ’ˆ w*v' ๋ฐฐ์ œ ํ•  ๋ฟ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ : APL ์Šฌ๋ผ์ด์‹ฑ์„ ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด A[1,:]*A*A[:,1] ๋Š” ์ฒซ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ' ๋กœ ์ „์น˜ ํ•  ํ•„์š”์—†์ด ์˜ˆ์ƒ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋„ ์ƒ๊ฐ ํ–ˆ์–ด. v * w๊ฐ€ ๋‚ด์ ์ด๋ผ๋Š” ๊ฒƒ์€ ๋งˆ์น˜ ์Šคํ…Œ๋กœ์ด๋“œ์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.
์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ mathematica์˜ ์ ์ด ๊ทธ๋ ‡๊ฒŒ ๋‚˜์˜์ง€ ์•Š์€ ๊ณณ์ž…๋‹ˆ๋‹ค.

์š”์•ฝํ•˜์ž๋ฉด ๋งˆ์ง€๋ง‰์—์„œ ์ฒ˜์Œ๊นŒ์ง€์˜ ๊ณ„์•ฝ์€ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ด์ง€๋งŒ
์•„ํฌ์ŠคํŠธ๋กœํ”ผ ๋ณ„ํ‘œ ๋˜๋Š” * ๋˜๋Š” ์ ์ด์–ด์•ผํ•˜๋Š”์ง€ ์—ฌ๋ถ€
๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ฝ๊ฐ„ ๋ฌด๊ด€ํ•˜์ง€๋งŒ ์™„์ „ํžˆ ๋ฌด๊ด€ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค ....
๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ์›๋ž˜ ๋‹ท ์Šคํƒ€๋กœ โ€‹โ€‹์ฝ์—ˆ๋˜ ๋‹ท ์Šคํƒ€ (๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด)๋Š”
POINTWISE ์—ฐ์‚ฐ์ž๋Š”
์˜๋ฏธํ–ˆ๋‹ค

๋‚˜๋Š” ์ž์ฃผ ์งœ์ฆ์ด ๋‚ฌ๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[1 2 3] # ndims == 2
[1,2,3] # ndims == 1
[1; 2; 3] # ndims == 1

์ฃผ๋กœ ๊ธฐ์–ต์ด ์•ˆ ๋‚˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ €๋Š” ํ•ญ์ƒ " , ๋งŒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?"

@alanedelman ์ด '*์— ๋Œ€ํ•ด ์—ผ๋‘์— ๋‘” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ์ถ•์†Œ ์—ฐ์‚ฐ์ž๋กœ ์‚ฌ์šฉํ•˜๋„๋ก *๋ฅผ ์žฌ์ •์˜ํ•˜๋ฉด ์–ด๋–ค ๊ธฐ๋Šฅ์ด ์†์‹ค ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” ์—ฐ๊ด€์„ฑ์„ ์žƒ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด (M*v)*v ๋Š” ํ˜„์žฌ dot(v,M*v) (์Šค์นผ๋ผ)๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ˜๋ฉด M*(v*v) ๋Š” M.*dot(v,v) (ํ–‰๋ ฌ)์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์™œ ์šฐ๋ฆฌ๋Š” dot ๋ฅผ ์ถ•์†Œ ์—ฐ์‚ฐ์ž๋กœ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๊นŒ (์–ด์จŒ๋“  ์—ฐ๊ด€์„ฑ์ด ์•„๋‹˜)? ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ddot(A::Matrix,B::Matrix) == Aโ‹…โ‹…B == trace(A'*B) ์™€ ๊ฐ™์€ ๊ณ ์ฐจ ์ˆ˜์ถ•์„ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฒกํ„ฐ ์ „์น˜๋ฅผ ๋„์ž…ํ•˜๋Š” ์œ ์ผํ•œ ๋ชฉ์ ์€ * ์˜ ๋น„ ์—ฐ๊ด€์„ฑ์œผ๋กœ๋ถ€ํ„ฐ ์šฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ž„์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? @alanedelman ์˜ˆ์ œ์˜ ๋ชจํ˜ธ์„ฑ์€ ๋ฒกํ„ฐ ์ค‘ ํ•˜๋‚˜ ( M*v*v' ๋Œ€ M*v'*v )๋ฅผ ์ „์น˜ํ•˜์—ฌ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ด„ํ˜ธ ( M*(v*v) ๋Œ€ (M*v)*v )๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์ผํ•˜๊ฒŒ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค @Jutho๊ฐ€ ์ด๋ฏธ ๊ณ ์ฐจ ํ…์„œ์— ๋Œ€ํ•œ ์ „์น˜ ๊ตฌํ˜„์„ ์ง€์ ํ–ˆ๋“ฏ์ด ์ˆ˜ํ•™์ ์œผ๋กœ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค). ๋‚˜์—๊ฒŒ ์งˆ๋ฌธ์€ ์–ด๋–ค ํ‘œ๊ธฐ๋ฒ•์ด ๋” ์ฝ๊ธฐ ์‰ฝ๊ณ  ๊ฐ„๊ฒฐํ•˜๋ฉฐ ์šฐ์•„ํ•˜๊ณ  ์ˆœ์ˆ˜ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ M*(v*v) ๋ฐ (M*v)*v ๋Š” ํ˜„์žฌ ๋ชจ๋‘ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌ๋ฌธ ๋ถ„์„๋ฉ๋‹ˆ๋‹ค.

*(M, v, v)

์ธ์ˆ˜์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ๊ณฑ์…ˆ ์ˆœ์„œ๋ฅผ ์ตœ์ ํ™”ํ•˜๋Š” ํ–‰๋ ฌ ๊ณฑ์„ ํ—ˆ์šฉํ•˜๋ ค๋ฉด ํŒŒ์„œ๋„ ๋ณ€๊ฒฝํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ ์–ด๋„ ๊ฐœ์ธ์ ์œผ๋กœ ์ €๋Š” ์—ฐ๊ด€์„ฑ์ด ๊ฝค ํฐ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜ํ•™๊ณผ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ๋ฒˆ์—ญํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ค„๋ฆฌ์•„์—๊ฒŒ๋Š” ์—ฌ์ „ํžˆ ๋ฒˆ์—ญ์„ ๋งŽ์ดํ•˜์ง€ ์•Š์œผ ์…จ์œผ๋ฉดํ•ฉ๋‹ˆ๋‹ค.

( @Jutho๊ฐ€ ์ด๋ฏธ ๊ณ ์ฐจ ํ…์„œ์— ๋Œ€ํ•œ ์ „์น˜ ๊ตฌํ˜„์„ ์ง€์ ํ–ˆ๋“ฏ์ด ์–ด์จŒ๋“  ์ˆ˜ํ•™์ ์œผ๋กœ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค).

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ •ํ™•ํžˆ ๋‚ด๊ฐ€ ๋งํ•œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@alanedelman ์ด '*์— ๋Œ€ํ•ด ์—ผ๋‘์— ๋‘” ๊ฒƒ๊ณผ ์œ ์‚ฌํ•œ ์ถ•์†Œ ์—ฐ์‚ฐ์ž๋กœ ์‚ฌ์šฉํ•˜๋„๋ก *๋ฅผ ์žฌ์ •์˜ํ•˜๋ฉด ์–ด๋–ค ๊ธฐ๋Šฅ์ด ์†์‹ค ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” ์—ฐ๊ด€์„ฑ์„ ์žƒ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด (M_v) _v๋Š” ํ˜„์žฌ์˜ dot (v, M_v) (์Šค์นผ๋ผ)๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ˜๋ฉด M_ (v_v)๋Š” M._dot (v, v) (ํ–‰๋ ฌ)์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์™œ ์ ์„ ์ถ•์†Œ ์—ฐ์‚ฐ์ž๋กœ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๊นŒ (์–ด์จŒ๋“  ์—ฐ๊ด€์„ฑ์ด ์•„๋‹˜)? ๊ณ ์ฐจ ์ˆ˜์ถ•์„ ์ •์˜ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ddot (A :: Matrix, B :: Matrix) == Aโ‹…โ‹…B == trace (A '* B).

์ด๋Ÿฌํ•œ ์ถ”๋ก ์„ ํ†ตํ•ด ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ์— ๋Œ€ํ•œ ๊ณฑ์…ˆ ์—ฐ์‚ฐ์ž๊ฐ€ ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์„ ์ ์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
A โˆ™ B
A โˆ™ v
v โˆ™ A โˆ™ w
v โˆ™ w

๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ์€ @pwl ์ œ์•ˆ์ด์ง€๋งŒ *๋Š” ์ ์œผ๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ ์–ด๋„ ๊ฐœ์ธ์ ์œผ๋กœ ์ €๋Š” ์—ฐ๊ด€์„ฑ์ด ๊ฝค ํฐ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜ํ•™๊ณผ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ๋ฒˆ์—ญํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ค„๋ฆฌ์•„์—๊ฒŒ๋Š” ์—ฌ์ „ํžˆ ๋ฒˆ์—ญ์„ ๋งŽ์ดํ•˜์ง€ ์•Š์œผ ์…จ์œผ๋ฉดํ•ฉ๋‹ˆ๋‹ค.

๋ฌธ์ œ์˜ ์ผ๋ถ€๋Š” ์ˆ˜ํ•™์—์„œ๋„ ๋‹ค๋ฅธ ๊ด€์Šต์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ–‰ ๋ฐ ์—ด ๋ฒกํ„ฐ ์ˆ˜ํ•™ ์ธก๋ฉด์—์„œ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์„ ํ˜• ์—ฐ์‚ฐ์ž ๋ฐ ์ด์ค‘ ๊ณต๊ฐ„ ์ธก๋ฉด์—์„œ ๋” ์ถ”์ƒ์  ์ธ ๋™์ž‘์„ ์›ํ•ฉ๋‹ˆ๊นŒ (์—ฐ์‚ฐ์ž๋Š” ๋ฒกํ„ฐ์™€ ๊ณฑํ•˜์ง€ ์•Š๊ณ  ๋ฒกํ„ฐ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. A * v ๋˜๋Š” A โˆ™ v ๋Œ€์‹  A (v)?

์ €๋Š” ํŽธ์˜ ๊ตฌ๋ฌธ์ด ํฌ๊ฒŒ ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ v '* w๋ณด๋‹ค dot (v, w)๋ฅผ ๋งค๋ฒˆ ์“ฐ๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ „์ž๊ฐ€ ๊ธฐ์ดˆ ๋…๋ฆฝ์  ์ธ ์ˆ˜ํ•™์  ์—ฐ์‚ฐ์„ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค (์‚ฌ์‹ค, ๋จผ์ € a๋ฅผ ์ •์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์—์„œ ์ด์ค‘ ๋ฒกํ„ฐ๋กœ์˜ ์ž์—ฐ ๋งคํ•‘ ์ด์ „์˜ ์Šค์นผ๋ผ ๊ณฑ๋„ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

๊ทธ๋ ‡๊ฒŒ ๋ฌด์ง€ํ•ด์„œ ๋ฏธ์•ˆํ•˜์ง€๋งŒ, M[1, :] ์ด ์ •ํ™•ํžˆ v' ์ฒ˜๋Ÿผ ํ–‰๋™ ํ•  ์ˆ˜์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‚˜๋Š” ๋‚˜๋ฅผ ๊ดด๋กญํžˆ๋Š” ๊ฒƒ๋“ค์˜ ๋ชฉ๋ก์— ์ถ”๊ฐ€ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1.

[1 2 3] # ndims == 2
[1,2,3] # ndims == 1
[1;2;3] # ndims == 1

2.
v=rand(3)
v' * v curently has ndims == 1 ( @StefanKarpinski ์˜ ์ œ์•ˆ์ด์ด๋ฅผ ์ˆ˜์ • ํ•จ)
(v' * v)/( v' * v ) ์—๋Š” ndims ==2 (์ด๊ฒƒ์€ ์ •๋ง ์ €๋ฅผ ๊ดด๋กญ ํžˆ๊ณ  ์ˆ˜์ • ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค)

์—ฌ์ „ํžˆ ๋‚˜๋Š” covectors๋ฅผ ์ •๋ง๋กœ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  apl ์ธ๋ฑ์‹ฑ์€ ๋‚ด๊ฐ€ ์•ž๋’ค๋กœ ๊ณ„์†ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
--- ์—ฌ์ „ํžˆ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์ง€๋งŒ ๊ทธ ๋ชฉ๋ก์„๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
ํ˜„์žฌ ์ค„๋ฆฌ์•„์˜ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ฒ„๊ทธ

๋‚˜๋Š” ํ™•์‹คํžˆ cdot์˜ ์•„์ด๋””์–ด๋ฅผ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค* ์—ฐ์‚ฐ์ž ์™ธ์— ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ฅผ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋กœ ์ถ•์†Œ
๊ทธ๋ฆฌ๊ณ  dot (a, b, ..)๋ฅผ ํ—ˆ์šฉํ•˜๋ฉด ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ๊ฒฝํ•ฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

Numpy์˜ ๋ช…๋ช… ๊ทœ์น™์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  (๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ ์ด์ „ ๊ฒŒ์‹œ๋ฌผ์˜ ๋ชจ์Šต), ์ผ๋ฐ˜์ ์ธ ํ…์„œ ์ˆ˜์ถ•์— ์ ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋‹ค์†Œ ํ˜ผํ•ฉ ๋œ ๋Š๋‚Œ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Wikipedia์˜ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์žฅ์ž…๋‹ˆ๋‹ค.

์ˆ˜ํ•™์—์„œ ๋‚ด์  ๋˜๋Š” ์Šค์นผ๋ผ ๊ณฑ (๋˜๋Š” ์œ ํด๋ฆฌ๋“œ ๊ณต๊ฐ„์˜ ๋งฅ๋ฝ์—์„œ ๋•Œ๋•Œ๋กœ ๋‚ด์ )์€ ๋‘ ๊ฐœ์˜ ๋™์ผํ•œ ๊ธธ์ด์˜ ์ˆซ์ž ์‹œํ€€์Šค (์ผ๋ฐ˜์ ์œผ๋กœ ์ขŒํ‘œ ๋ฒกํ„ฐ)๋ฅผ ์ทจํ•˜๊ณ  ๋‹จ์ผ ์ˆซ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์ž…๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์—๋„ ๋„ํŠธ๋Š” ์Šค์นผ๋ผ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@ brk00 , ๊ท€ํ•˜์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ๋ฌธ์ œ๋Š” ์ด๊ฒƒ์„ ๋” ๋†’์€ ์ฐจ์› / ๋” ๋†’์€ ์ˆœ์œ„์˜ ์กฐ๊ฐ์œผ๋กœ ํ™•์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋‚˜๋Š” ์ด๊ฒƒ์„ ์œ„ํ•ด ์„ธ๊ณ„ ์ฐจ์›์„ ์ •๋ง ์‹ซ์–ดํ•ฉ๋‹ˆ๋‹ค) ๋ฐฐ์—ด.

๊ทธ๋ ‡๊ฒŒ ๋ฌด์ง€ํ•ด์„œ ๋ฏธ์•ˆํ•˜์ง€๋งŒ M [1, :]์ด v '์ฒ˜๋Ÿผ ํ–‰๋™ํ•˜๋Š” ์ „์น˜๊ฐ€ ๋  ์ˆ˜์—†๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์–ด๋–ป๊ฒŒ ์ผ๋ฐ˜ํ™”ํ•ฉ๋‹ˆ๊นŒ?

@Jutho , ๋ฏธ์•ˆํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ ํ–ˆ์–ด์•ผ ํ–ˆ์–ด์š”. "๊ณ ์ฐจ ํ…์„œ ์ œํ’ˆ ๊ณต๊ฐ„์—์„œ ์š”์†Œ๋ฅผ ์ „์น˜ํ•˜๋Š” ๊ฒƒ์€ [...] ๊ณ ์œ  ํ•œ ์ •์˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ์ค„์„ ์˜๋ฏธ ํ–ˆ์œผ๋ฏ€๋กœ ํ•˜๋‚˜์˜ ํŠน์ • ์ •์˜๋ฅผ ๋„์ž…ํ•˜๊ฑฐ๋‚˜ ์ •์˜ ํ•  ์ˆ˜์žˆ๋Š” ์ˆ˜ํ•™์  ๋™๊ธฐ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

@alanedelman :

๋‚˜๋Š” ๋‚˜๋ฅผ ๊ดด๋กญํžˆ๋Š” ๊ฒƒ๋“ค์˜ ๋ชฉ๋ก์— ์ถ”๊ฐ€ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

[1 2 3] # ndims == 2
[1,2,3] # ndims == 1
[1; 2; 3] # ndims == 1

์—ฐ๊ฒฐ ๋™์ž‘์€์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ์ด ์—†์Šต๋‹ˆ๋‹ค. ๋” ์ด์ƒ ๋ฌผ์„ ์ง„ํ™์œผ๋กœ ๋งŒ๋“ค์ง€ ๋ง์ž.

* ์—ฐ์‚ฐ์ž ์™ธ์— ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ฅผ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋กœ ์ถ•์†Œํ•˜๋Š” cdot์˜ ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  dot (a, b, ..)๋ฅผ ํ—ˆ์šฉํ•˜๋ฉด ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ๊ฒฝํ•ฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋˜ํ•œ ์ ‘์„ ์ž…๋‹ˆ๋‹ค. ๋ฐฐ์—ด๊ณผ ์Šฌ๋ผ์ด์‹ฑ์— ๊ณ„์† ์ง‘์ค‘ํ•ฉ์‹œ๋‹ค.


ํ˜„์žฌ ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ ๋ชจ๋“  ๋ฐฐ์—ด์€ 1์ด ๋‚ดํฌ๋˜์–ด ๋ฌดํ•œ ์ฐจ์›์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์‚ฌ์‹ค์ด๋ผ๋ฉด ones(n) , ones(n,1) , ones(n,1,1) ๋“ฑ์€ ๊ตฌ๋ณ„๋˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ๋“ค์ด _ ๋น„์Šทํ•˜๊ฒŒ _ ๋™์ž‘ํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์•ฝ๊ฐ„์˜ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ด์ง€ ๋งŒ, ๊ทธ๊ฒƒ์€ ๋ฐฐ์—ด์ด ์‹ค์ œ๋กœ ๋ฌดํ•œ ์ฐจ์› ์ธ ๊ฒƒ๊ณผ๋Š” ๊ฑฐ๋ฆฌ๊ฐ€ ๋ฉ€๋‹ค.


ํ˜„์žฌ ๊ท€์ฐฎ์€ ๊ฒƒ๋“ค์˜ ๋ชฉ๋ก์€ ์œ„์˜ ์ œ์•ˆ์˜ ์ข‹์€ ์†์„ฑ์„ ํฌ๊ฒŒ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰:

  1. ๋น„๋Œ€์นญ ์Šฌ๋ผ์ด์Šค ๋™์ž‘ โ€“ ํ›„ํ–‰ ์น˜์ˆ˜๋Š” ํŠน๋ณ„ํ•ฉ๋‹ˆ๋‹ค.
  2. v'' !== v โ€“ ์‹ค์ œ๋กœ v'' != v ; ๊ฐ™์€ ๊ณ„๊ธ‰์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  3. v' != v โ€“ ๋™์ผํ•œ ๊ฑฐ๋ž˜.
  4. v'w ๋Š” ์Šค์นผ๋ผ๊ฐ€ ์•„๋‹ˆ๋ผ ์š”์†Œ๋ฅผ 1 ๊ฐœ ๊ฐ€์ง„ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.
  5. A*_mul_B* ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ํŒŒ์‹ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ€์žฅ ๋”์ฐํ•œ ์ผ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” v' == v ๋น„ํŠธ๋ฅผ ์ œ์™ธํ•˜๊ณ  @StefanKarpinski ์˜ ํฌ์ธํŠธ ๋Œ€๋ถ€๋ถ„์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ, ๊ทธ๊ฒƒ๋“ค์€ ๋™ํ˜• ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๋“ค์€ ๋งค์šฐ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค๋Š” ์ ์—์„œ ์—ฌ์ „ํžˆ ๋‹ค๋ฅธ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ํ–‰๋ ฌ M ๋ฐ M' ๋„ ๋™ํ˜•์ด์ง€๋งŒ ๋™์ผํ•˜๊ธฐ๋ฅผ ์›ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. (๋ฌผ๋ก  Hermitian์ด ์•„๋‹ˆ๋ผ๋ฉด).

Covector ์œ ํ˜•์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ฒฌํ•ด๋Š” ๊ธฐ๋ณธ ์—ฐ์‚ฐ (๊ณฑํ•˜๊ธฐ, ๋ง์…ˆ ๋“ฑ)์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๊ฐ€๋ฒผ์›Œ ์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋„ˆ๋ฌด ๋งŽ์€ ์—ฐ์‚ฐ์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค (์ธ๋ฑ์‹ฑ์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ์ฃผ์ € ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ). ๊ทธ๊ฒƒ์œผ๋กœ ๋ฌด์–ธ๊ฐ€๋ฅผํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ๊ทธ๊ฒƒ์„ ๋ฒกํ„ฐ๋กœ ๋‹ค์‹œ ๋ณ€ํ™˜ํ•˜๊ณ  ๊ฑฐ๊ธฐ์—์„œ ์ž‘์—…์„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

+1์˜ ๊ฒฌํ•ด '@StefanKarpinski ์ž์‹ ์˜ ์ผ๋ฐ˜์  ์Šน์ธ์„ ํฌํ•จํ•˜์—ฌ,์˜ ํ…Œ์ดํฌ'๋ฅผ @simonbyrneํ•ฉ๋‹ˆ๋‹ค.

@simonbyrne๋„ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, v ๋ฐ v' ์—๋Š” ๋‹ค๋ฅธ ์œ ํ˜•์ด ์žˆ์ง€๋งŒ ์ด๋ฏธ ๋™์ผํ•œ ๋ชจ์–‘๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐฐ์—ด ์œ ํ˜•์ด ๋™์ผํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค (์˜ˆ speye(5) == eye(5) . ์ฝ” ๋ฒกํ„ฐ๊ฐ€ ํฌ์†Œ์™€ ๋‹ค๋ฅธ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ฝ” ๋ฒกํ„ฐ๊ฐ€ ํ–‰ ํ–‰๋ ฌ์ฒ˜๋Ÿผ ๋ธŒ๋กœ๋“œ ์บ์ŠคํŠธ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋™์ผํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋Š” A ๋ฐ B ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ์ง€๊ธˆ๊นŒ์ง€

all(A .== B)

ํ•˜๋‚˜๊ฐ€ ๋ฒกํ„ฐ์ด๊ณ  ํ•˜๋‚˜๊ฐ€ ์ฝ” ๋ฒกํ„ฐ ์ธ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ covector๋Š” ๋ฒกํ„ฐ ๋˜๋Š” ์—ด ํ–‰๋ ฌ๋ณด๋‹ค ํ–‰ ํ–‰๋ ฌ๊ณผ ๋” ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์งˆ๋ฌธ์€ size(v' )์ž…๋‹ˆ๊นŒ? ๋‹ต์ด (length(v),) ์ด๋ฉด v == v' ๊ฐ€ ์‚ฌ์‹ค์ด์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. size(v') == (1,length(v)) ์ด๋ฉด ์•„๋งˆ๋„ ๊ฑฐ์ง“์ด์–ด์•ผํ•˜์ง€๋งŒ ํ‹€๋ฆผ์—†์ด v' == reshape(v,1,length(v)) ๋Š” ์ฐธ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์งˆ๋ฌธ์€ v' ์ด ํŠน๋ณ„ํ•œ ์ข…๋ฅ˜์˜ ๋ฒกํ„ฐ๊ฐ€๋˜์–ด์•ผ ํ•˜๋Š”๊ฐ€ ์•„๋‹ˆ๋ฉด ํŠน๋ณ„ํ•œ ์ข…๋ฅ˜์˜ ํ–‰๋ ฌ์ด๋˜์–ด์•ผ ํ•˜๋Š”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ ์  ๋”์ด ๋ฌธ์ œ๊ฐ€ ์ „์น˜๊ฐ€ ์‹ค์ œ๋กœ ์˜๋ฏธํ•˜๋Š” ๋ฐ”์— ๊ด€ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค.

์ฝ” ๋ฒกํ„ฐ๋Š” ์‹ค์ œ๋กœ ๋ฐฐ์—ด์ด ์•„๋‹ˆ๋ฏ€๋กœ ๊ทธ๋“ค์ด ๊ฐ€์ง„ "๋ชจ์–‘"์ด ๋ฌด์—‡์ธ์ง€ ์‹ค์ œ๋กœ ๋งํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฝ” ๋ฒกํ„ฐ๋Š” ์‹ค์ œ๋กœํ•˜๋Š” ์ผ์— ์˜ํ•ด ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, *(::Covector, ::Vector) ๋Š” ์Šค์นผ๋ผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. AbstractVector ๋Š” ๊ทธ๋ ‡๊ฒŒํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‹ค์ œ๋กœ๋Š” ๋™์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ๋ณต์žกํ•œ ํ•„๋“œ์— ์žˆ์Šต๋‹ˆ๋‹ค. v' == v ๋˜๋Š” v.' == v ?

@simonbyrne :

์ฝ” ๋ฒกํ„ฐ๋Š” ์‹ค์ œ๋กœํ•˜๋Š” ์ผ์— ์˜ํ•ด ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, *(::Covector, ::Vector) ๋Š” ์Šค์นผ๋ผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. AbstractVector ๋Š” ๊ทธ๋ ‡๊ฒŒํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‹ค์ œ๋กœ๋Š” ๋™์ผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ •๋ง ์ข‹์€ ์ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ v' ๋ฅผ ๊ฐ์ฒด๋กœ ์‚ฌ์šฉํ•  ์ˆ˜์—†๋Š” ๊ฒฝ์šฐ ๋‹ค์†Œ ๋‹ต๋‹ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์˜ฌ๋ฐ”๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์€ v' ๋ฅผ ์žฌ๋ฏธ์žˆ๋Š” ๋ฒกํ„ฐ ๋Œ€์‹  ์žฌ๋ฏธ์žˆ๋Š” ํ–‰ ํ–‰๋ ฌ๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์˜ฌ๋ฐ”๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์€ v '๋ฅผ ์žฌ๋ฏธ์žˆ๋Š” ๋ฒกํ„ฐ ๋Œ€์‹  ์žฌ๋ฏธ์žˆ๋Š” ํ–‰ ํ–‰๋ ฌ๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ข…๋ฅ˜์ด์ง€๋งŒ AbstractMatrix ์˜ ํ•˜์œ„ ์œ ํ˜•์ด๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. AbstractCovector ์ด ์ตœ์ƒ์œ„ ์œ ํ˜•์ด์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. length(::Covector) ๋ฅผ ์ •์˜ํ•˜๊ณ  ์‹ถ์ง€๋งŒ size ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ฐฉ์†ก ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•ฉ๋ฆฌ์ ์ธ ๊ธฐ์ค€์„ ๋งˆ๋ จ ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๋ฐฉ์†ก ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•˜์ง€ ์•Š๋Š” ํŽธ์ด ๋‚ซ์Šต๋‹ˆ๋‹ค.

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

2014 ๋…„ 10 ์›” 20 ์ผ 17:39์— Simon Byrne [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” v '== v ๋น„ํŠธ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋Œ€๋ถ€๋ถ„์˜ @StefanKarpinski ์˜ ํฌ์ธํŠธ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ๋“ค์ด ๋™์ผํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ, ๊ทธ๊ฒƒ๋“ค์€ ๋™ํ˜• ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ๋“ค์€ ๋งค์šฐ ๋‹ค๋ฅด๊ฒŒ ํ–‰๋™ํ•œ๋‹ค๋Š” ์ ์—์„œ ์—ฌ์ „ํžˆ ๋‹ค๋ฅธ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ํ–‰๋ ฌ M๊ณผ M '๋„ ๋™ํ˜•์ด์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ๋“ค์ด ๋™์ผํ•˜๊ธฐ๋ฅผ ์›์น˜ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (๋ฌผ๋ก  Hermitian์ด ์•„๋‹ˆ๋ผ๋ฉด).

์ด ์ง„์ˆ ์€ ์–ด๋–ค ์ˆ˜์ค€์—์„œ๋„ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

1), ๋‚˜๋Š” ๋‹น์‹ ์ด ์—ฌ๊ธฐ์„œ ๋™ํ˜•์˜ ์˜๋ฏธ๋ฅผ ๋‚จ์šฉํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Isomorphic์€ ๋‘ ๊ณต๊ฐ„ ๊ฐ„์˜ ๊ด€๊ณ„์ž…๋‹ˆ๋‹ค (์ด ์„ค์ •์—์„œ). ์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋“  (์‹ค์ œ) ๋ฒกํ„ฐ ๊ณต๊ฐ„ V์—๋Š” ์„ ํ˜• ํ•จ์ˆ˜์˜ ์ด์ค‘ ๊ณต๊ฐ„ V *๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค (๋ณต์†Œ ๊ณต๊ฐ„์˜ ๊ฒฝ์šฐ ์ผค๋ ˆ ๊ณต๊ฐ„๊ณผ ์ผค๋ ˆ ๊ณต๊ฐ„์˜ ์ด์ค‘ ๊ณต๊ฐ„๋„ ์žˆ์Šต๋‹ˆ๋‹ค). ์ด๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ณต๊ฐ„์ด๋ฉฐ, ํ•˜๋‚˜์—์„œ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ์˜ ๊ณ ์œ ํ•˜๊ฑฐ๋‚˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋งคํ•‘์กฐ์ฐจ ์—†์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ผ๋ฐ˜์ ์œผ๋กœ V์˜ ์š”์†Œ v๋ฅผ V *์˜ ์š”์†Œ phi์— ์—ฐ๊ด€์‹œํ‚ค๋Š” ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์œ ์ผํ•œ ์ผ๋ฐ˜์ ์ธ ์—ฐ์‚ฐ์€ ์„ ํ˜• ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, phi (v)๋Š” ์Šค์นผ๋ผ์ž…๋‹ˆ๋‹ค.

V x V-> ์Šค์นผ๋ผ (์ผ๋ฐ˜์ ์œผ๋กœ ๋‚ด๋ถ€ ๊ณฑ / ๋ฉ”ํŠธ๋ฆญ)์˜ ์Œ ์„ ํ˜• ํ˜•์‹์ด ์žˆ์œผ๋ฉด V์—์„œ V * ๋กœ์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋งคํ•‘์„ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ phi_i = g_ {i, j} v ^ j๋ฅผ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2) ์‹ค์ œ๋กœ "๋ฒกํ„ฐ ์ „์น˜"์™€ ๊ด€๋ จ๋œ ์ž์—ฐ์Šค๋Ÿฌ์šด ์—ฐ์‚ฐ์ด ์—†์Šต๋‹ˆ๋‹ค (ํฌ์ธํŠธ 3 ์ฐธ์กฐ). ์ด๋Ÿฌํ•œ ํ˜ผ๋ž€์€ ์—ด ํ–‰๋ ฌ๋กœ ๋ฒกํ„ฐ๋ฅผ ์‹๋ณ„ ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๋„ˆ๋ฌด ๊ฐ•ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ์‹ค์ œ๋กœ ๋„ํŠธ ๋ฐ ์™ธ๋ถ€ ๊ณฑ / ํ…์„œ ๊ณฑ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ป์„ ์ˆ˜์—†๋Š” ๋ฒกํ„ฐ ์ „์น˜์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋ฒกํ„ฐ๋ฅผ ์ด์ค‘ ๋ฒกํ„ฐ์— ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์ „์น˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ, ์ฆ‰ V์˜ v๋ฅผ V_์˜ ์ผ๋ถ€ phi = v '์— ๋งคํ•‘ํ•˜๋ ค๋ฉด ํ‘œ์ค€ ์œ ํด๋ฆฌ๋“œ ๋‚ด์  (g_ {)์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. i, j} = delta_ {i, j}). ๊ทธ ์‹œ์ ์—์„œ ๋‹น์‹ ์€ ๊ณต๋ณ€ ์„ฑ๊ณผ ๋ฐ˜ ๋ณ€์„ฑ ์ธ๋ฑ์Šค์˜ ๊ตฌ๋ถ„์„ ์—†์• ๊ณ  ๋ณธ์งˆ์ ์œผ๋กœ ๋ฐ์นด๋ฅดํŠธ ํ…์„œ๋กœ ์ž‘์—…ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ V์™€ V_๋Š” ์ž์—ฐ์ ์œผ๋กœ ๋™ํ˜•์ด๋ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, w_i = v ^ i = v_i = w ^ i, ๊ทธ๋ž˜์„œ ์˜ˆ, v == w ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š”์ด ๋‘˜์„ ๊ตฌ๋ณ„ํ•˜๋Š” ๊ฒƒ์ด ์—†๋‹ค๊ณ  ๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

3) "์ „์น˜"์ž‘์—…์€ ์›๋ž˜ V-> W (http://en.wikipedia.org/wiki/Dual_space#Transpose_of_a_linear_map)์˜ ์„ ํ˜• ๋งต์— ๋Œ€ํ•ด์„œ๋งŒ ์ •์˜๋˜์—ˆ์œผ๋ฉฐ ์‹ค์ œ๋กœ ๊ฑฐ๊ธฐ์—์„œ๋„ ์ƒ๊ฐํ•˜๋Š” ๋ฐ”๋ฅผ ์˜๋ฏธํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ํ˜• ๋งต A : V-> W์˜ ์ „์น˜๋Š” W _-> V_์˜ ๋งต A ^ T์ž…๋‹ˆ๋‹ค. ์ฆ‰, W_์˜ ๋ฒกํ„ฐ, ์ด์ค‘ ๋ฒกํ„ฐ์—์„œ ์ž‘๋™ํ•˜๊ณ  V_์˜ ์š”์†Œ, ์ฆ‰ V์˜ ์ฝ” ๋ฒกํ„ฐ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ–‰๋ ฌ A์˜ ์ผ๋ฐ˜์ ์ธ ์ „์น˜ A ^ T๋กœ ์ƒ๊ฐํ•œ๋‹ค๋ฉด,์ด ํ–‰๋ ฌ A ^ T๋Š” W *์˜ ๋ฒกํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์—ด๊ณผ ๊ณฑํ•ด ์ ธ์•ผํ•˜๋ฉฐ ์ด๋กœ๋ถ€ํ„ฐ ๋‚˜์˜ค๋Š” ์—ด์€ V์˜ ๊ณต๋™ ๋ฒกํ„ฐ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ์ด ์‹œ์ ์—์„œ ํ–‰ ๋ฒกํ„ฐ๊ฐ€์žˆ๋Š” ์ด์ค‘ ๋ฒกํ„ฐ ์‹๋ณ„์€ ์ด๋ฏธ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ V * ๋ฐ W *๊ฐ€ ํ‘œ์ค€ ์œ ํด๋ฆฌ๋“œ ๋‚ด์ ์„ ํ†ตํ•ด V ๋ฐ W๋กœ ์‹๋ณ„๋˜๋Š” ์‹ค์ œ ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ์„ ํ˜• ๋งต์˜ ์ „์น˜๊ฐ€ ํ•ด๋‹น ์„ ํ˜• ๋งต์˜ ์ธ์ ‘ ์š”์†Œ๋กœ ์‹๋ณ„ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ์ƒ๊ฐํ•˜๋Š” V-> W์˜ ๋งต์ด ๋งต์˜ ์ „์น˜์˜ ๊ฒฝ์šฐ์ด๊ธฐ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ๊ฒฝ์šฐ, ์ด๊ฒƒ์€ ์ผ๋ฐ˜์ ์ธ ํ–‰๋ ฌ ์ „์น˜ (๋ณตํ•ฉ ๊ฒฐํ•ฉ์—†์ด)๋Š” ๋งต W _-> V_๋กœ๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ๋งต W-> V๋กœ์„œ ์ด๊ฒƒ์€ ๊ธฐ๋ณธ ๋…๋ฆฝ์  ์ •์˜๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์ž‘๋™ ์ƒ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ณ ์ฐจ์› ๋ฐฐ์—ด์—์„œ ์ „์น˜๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”์— ๊ด€ํ•ด์„œ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ˆ˜๋ ดํ•˜๋Š” MATLAB / ์—”์ง€๋‹ˆ์–ด๋ง ์ ‘๊ทผ ๋ฐฉ์‹ ๋‚ด์—์„œ : ์˜ค๋ฅ˜ ์—ฌ์•ผํ•˜๋ฉฐ ์ผ๋ฐ˜ํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ทธ๊ฒƒ์„ ์ •์˜ ํ•  ๋ฐฉ๋ฒ•์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๊ณ ์ฐจ ๋ฐฐ์—ด์ด ๋ฌด์—‡์„ ๋‚˜ํƒ€๋‚ด๋Š”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ…์„œ ๊ณฑ ๊ณต๊ฐ„ V1 \ otimes V2 \ otimesโ€ฆ \ otimes VN, V1 x V2 xโ€ฆ x VN์— ์ž‘์šฉํ•˜๋Š” ๋‹ค์ค‘ ์„ ํ˜• ๋งต์ธ๊ฐ€, ์ผ๋ถ€ ํ…์„œ ๊ณฑ ๊ณต๊ฐ„ V1 \ otimes V2 \ otimes์˜ ์„ ํ˜• ๋งต์ž…๋‹ˆ๊นŒ? โ€ฆ \ otimes VN์„ ๋‹ค๋ฅธ ํ…์„œ ์ œํ’ˆ ๊ณต๊ฐ„ W1 \ otimes W2 \ otimesโ€ฆ \ otimes WM? 2 ์ฐจ์›์˜ ๊ฒฝ์šฐ์—๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ํ˜• ๋งต ์‹๋ณ„ A : V-> W์™€ W์˜ ๋ฒกํ„ฐ \ otimes V_, ์„ ํ˜• ๋งต ๊ฐ๊ฐ์˜ ์ „์น˜๋Š”์ด ํ…์„œ ๊ณฑ ๊ณต๊ฐ„์˜ ๊ณต๊ฐ„ ๋ฐ˜์ „์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. A ^ i_j-> A_j ^ i์™€ V_ \ otimes์˜ A ^ T W = V * \ otimes W _, ์‹ค์ œ๋กœ W

๊ฒฐ๋ก ์ ์œผ๋กœ ๋ฌธ์ œ๋Š” ์ค„๋ฆฌ์•„์˜ ๋ฒกํ„ฐ๊ฐ€ ์ˆ˜ํ•™์  ์˜๋ฏธ์—์„œ ์ž„์˜์˜ ์ผ๋ฐ˜ ๋ฒกํ„ฐ์˜ ์†์„ฑ์„ ์บก์ฒ˜ํ•ด์•ผํ•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด ์ˆซ์ž ์—ด, ๋ชฉ๋ก,โ€ฆ ๋‹จ์–ด ๋ฒกํ„ฐ, ํ…์„œ,โ€ฆ -์ˆ˜ํ•™์—์„œ ์ •์˜ ๋œ ์—ฐ์‚ฐ ๋ฐ ๊ธฐ์ดˆ ๋…๋ฆฝ์  ์ธ ์˜๋ฏธ๋กœ, Julia Vector์—์„œ ์ •์˜ํ•˜๋ ค๋Š” ์—ฐ์‚ฐ์˜ ์ข…๋ฅ˜์™€ ์ถฉ๋Œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ํ‘œ์ค€ Julia (Abstract) Vector ์œ ํ˜•์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฒกํ„ฐ ๊ณต๊ฐ„์„ ๊ตฌ๋ถ„ํ•  ๋ฐฉ๋ฒ•์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ถ€ ๊ฐ์ฒด๋Š” ์‹ค์ œ๋กœ๋Š” ์ˆ˜ํ•™์  ๊ด€์  (์ด์ค‘ ๋ฒกํ„ฐ ๋“ฑ)์˜ ๋ฒกํ„ฐ์ด๋ฉฐ Julia Vectors๋กœ ์‹๋ณ„ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

๊ทธ ์ ์—์„œ ๋งคํŠธ๋ฆญ์Šค๋ผ๋Š” ์šฉ์–ด๊ฐ€ ํ›จ์”ฌ ๋œ ๊ณผ๋ถ€ํ•˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„์˜ ๋น„๋Œ€์นญ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ฌ์ง€์–ด ์ˆ˜ํ•™์  ๊ด€์  ์—์„œ์กฐ์ฐจ ๋งคํŠธ๋ฆญ์Šค๋Š” ํŠน์ • ๊ธฐ์ค€์—์„œ ์„ ํ˜•์ง€๋„์˜ ํŽธ๋ฆฌํ•œ ํ‘œํ˜„ ์ผ๋ฟ์ž…๋‹ˆ๋‹ค. ์„ ํ˜• ๋งต์„ ํ–‰๋ ฌ๋กœ ๋‚˜ํƒ€๋‚ด์ง€ ์•Š๊ณ  ํ•จ์ˆ˜๋กœ ํ‘œํ˜„ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ ๊ฒฝ์šฐ๋„ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค (์ด ๋ฌธ์ œ๋Š” ์ด์ „์— eigs์˜ ์ธ์ˆ˜ ๋“ฑ์—์„œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค). ๊ทธ๋Ÿฐ ์ ์—์„œ ์™œ matlab์ด ์ง„์ •ํ•œ 1 ์ฐจ์› ๊ตฌ์กฐ ์ธ ๋ฒกํ„ฐ๋ฅผ ๊ฐ€์ง€์ง€ ์•Š์•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ๋Š” ๋ชจ๋“  ๊ฒƒ์ด 'ํ–‰๋ ฌ', ์ฆ‰ ์ˆซ์ž๊ฐ€์žˆ๋Š” ๋ธ”๋ก์œผ๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค.

์งˆ๋ฌธ? c๋ฅผ ์ฝ” ๋ฒกํ„ฐ๋ผ๊ณ ํ•ฉ์‹œ๋‹ค. fft (c)๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋‹ต : ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ณต์žกํ•œ ์ผค๋ ˆ๋ฅผ ์ทจํ•˜๋Š” fft (c ')'
fft (c)์™€ ๋น„๊ตํ•  ๋•Œ

์‚ฌ์šฉ์ž๋Š” ์ •์˜๋˜์ง€ ์•Š์€ ์ด์ ์„ ๋ˆ„๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
(๋˜๋Š” ์ž˜ ๋ฌธ์„œํ™”๋˜์–ด ์žˆ๋‹ค๋ฉด ์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค ??)

์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๊ฒƒ๋“ค์ด ํ›จ์”ฌ ๋” ๋งŽ์„ ๊ฒƒ ๊ฐ™์•„์š”

์ง€๊ธˆ Base ์—์„œ ์˜ณ์€ ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • covector ๊ณฑํ•˜๊ธฐ ๋‹ค๋ฅธ ๋ฒกํ„ฐ
  • ์ฝ” ๋ฒกํ„ฐ ๊ณฑํ•˜๊ธฐ ํ–‰๋ ฌ
  • covector '๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒกํ„ฐ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ฝ” ๋ฒกํ„ฐ์— ๋Œ€ํ•œ ์ตœ์†Œํ•œ์˜ ์ง€์›์— +1ํ•ฉ๋‹ˆ๋‹ค.

๋„ค, +1.

๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ์–ธ๊ธ‰ํ–ˆ๋‹ค๋ฉด
norm (covector, q)๋Š” norm (vector, p)์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ 1 / p + 1 / q = 1
ํ™€๋” ๋ถˆํ‰๋“ฑ์œผ๋กœ ์ธํ•ด ์˜ค๋žซ๋™์•ˆ ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. :-)

p = q = 2์— ๋Œ€ํ•œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

norm(c::Covector, q::Integer) = norm(c.vector, q/(1-q))

q == 0 ๋ฐ q == 1 ๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ๊ฒ€์‚ฌ๋ฅผ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

q == 1์ด๋ฉด ๊ดœ์ฐฎ์„ ๊ฒƒ ๊ฐ™์•„์š”

Med Venlig Hilsen

์•ˆ๋“œ๋ ˆ์•„์Šค ๋…ธ์•…

2014-10-22 15:19 GMT-04 : 00 Stefan Karpinski [email protected] :

๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ต์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

norm (c :: Covector, q :: Integer) = norm (c.vector, q / (1-q))

q == 0 ๋ฐ q == 1์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ๊ฒ€์‚ฌ๋ฅผ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/JuliaLang/julia/issues/4774#issuecomment -60139762.

๋‚˜๋Š” covector ์ œ์•ˆ (๋‚ด๊ฐ€ ์ฃผ๋กœ ์ง€์›ํ•˜๋Š”)์— ๋Œ€ํ•œ ๊ธ€์„ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์ง€๋งŒ, @StefanKarpinski ์˜ "์žฌ๋ฏธ์žˆ๋Š” ํ–‰ ํ–‰๋ ฌ"๊ฐœ๋…์„ ์ •ํ™•ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ํ•œ ์ง€์ ์„ ์ง€๊ธˆ ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ” ๋ฒกํ„ฐ๋Š” ๋ฒกํ„ฐ๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ ๊ทธ ์ด์œ ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ํ•ญ์ƒ ๋ช…ํ™•ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ฝ” ๋ฒกํ„ฐ (๋˜๋Š” ๋ฌผ๋ฆฌํ•™ ์ž๋“ค์ด ๋ถ€๋ฅด๋Š” ๋ธŒ๋ž˜์ง€์–ด-๋ฒกํ„ฐ)๋Š” ๋ฒกํ„ฐ๋ฅผ ๋จน๊ณ  ๋‚ด์ ์ธ ์ˆซ์ž๋ฅผ ๋ฑ‰์–ด๋‚ด๋Š” ์„ ํ˜• ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

๋” ์ •ํ™•ํ•˜๊ฒŒ:

  • V = V(F) ๋ฐ W = W(F) ์š”์†Œ์˜ ์ผ๋ถ€ ํ•„๋“œ F ์— ๋Œ€ํ•œ ๋ฒกํ„ฐ๊ฐ€๋˜๋„๋กํ•ฉ๋‹ˆ๋‹ค.
  • v ๋ฐ w ๋Š” ๊ฐ๊ฐ V ๋ฐ W ์š”์†Œ ์ธ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.
  • <.,.> ๋Š” <.,.> : V ร— W โ†’ F ๋ฐ v, w โ†ฆ <v, w> ์™€ ๊ฐ™์€ ๋‚ด๋ถ€ ์ œํ’ˆ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

v ์— ํ•ด๋‹นํ•˜๋Š” ์ฝ” ๋ฒกํ„ฐ๋Š” w โ†ฆ <v, w> ๋งคํ•‘์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์„ ํ˜• ํ•จ์ˆ˜ v' : W โ†’ F ์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ์„ค๋ช…์€ v' ์ด ์ด์ค‘ ๊ณต๊ฐ„ V* ์˜ ์š”์†Œ์ด๋ฉฐ ์ด์ค‘ ๊ณต๊ฐ„ _is_์— ๋Œ€ํ•ด ๋งŽ์ด ์–ธ๊ธ‰ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค.

์ปดํ“จํ„ฐ ๊ณผํ•™ ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ ๋ณ€์ˆ˜์™€ ๊ด€๋ จํ•˜์—ฌ ๋‚ด๋ถ€ ์ œํ’ˆ์˜ ์ปค๋ง์œผ๋กœ v' , ๋‹จ์ผ ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ธ ํ•จ์ˆ˜ ๋ชจ์Œ์œผ๋กœ V* ๋ผ๋Š” ๊ฐ„๋‹จํ•œ ์„ค๋ช…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ฒกํ„ฐ๊ฐ€ ๋‹ค๋ฅธ ์นด๋ ˆ.

์ด Wikipedia ๊ธฐ์‚ฌ ๋Š” ๋‘ ์„ค๋ช…๊ณผ ๊ด€๋ จ๋œ ๋‹ค๋ฅธ ํ‘œ๊ธฐ๋ฒ•์„ ์กฐ์ •ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ์ •ํ™•ํžˆ ๋™์ผํ•œ ๊ฐœ๋…์„ ํ‘œํ˜„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ฒ˜์Œ์—๋Š” covector ๋กœ์˜ ์ธ๋ฑ์‹ฑ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ v'[1] ์ธ๋ฑ์‹ฑ์€ v' ์„ ํ‘œ์ค€ ๊ธฐ์ € ๋ฒกํ„ฐ eโ‚ = (1, 0, ...) ์— ์ ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๋ฏ€๋กœ v'[1] ๋ฅผ <v, eโ‚> ๋กœ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1:n ์™€ ๊ฐ™์€๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ์ธ๋ฑ์‹ฑ ์˜๋ฏธ ์ฒด๊ณ„๋Š” v' ๋ฅผ ์ ์ ˆํ•œ ํ”„๋กœ์ ์…˜ ํ–‰๋ ฌ์— ์ ์šฉํ•˜๊ณ  ๊ฐ ์—ด์ด ํ‘œ์ค€ ๊ธฐ์ € ๋ฒกํ„ฐ ์ธ ๊ฒฝ์šฐ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

# 987์˜ ๋งฅ๋ฝ์—์„œ ์ฝ” ๋ฒกํ„ฐ์˜ ์ธ๋ฑ์‹ฑ ์˜๋ฏธ๋ฅผ ๊ณ ๋ คํ•˜๋ฉด ์ฝ” ๋ฒกํ„ฐ๊ฐ€ AbstractVector ๊ฐ€ ์•„๋‹Œ ๋˜ ๋‹ค๋ฅธ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ v' ์ธ๋ฑ์‹ฑ <v, eโ‚> ์ฒ˜๋Ÿผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ <v, w> = v'*A*w ํ–‰๋ ฌ์— ๋Œ€ํ•ด ์ •์˜ ๋œ ๋‚ด๋ถ€ ๊ณฑ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ธ๋ฑ์‹ฑ ๋น„์šฉ์€ matvec ์ œํ’ˆ A*w (๋˜๋Š” A'*v )์— ์˜ํ•ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. AbstractVector ์ž๊ฒฉ์„ ์–ป๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋น„์Œ‰๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ DFT์™€ ๊ทœ๋ฒ”์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ... ์ด๊ฒƒ์ด ์˜ค๋Š˜ ์ œ ๋งˆ์Œ์„ ์‚ฌ๋กœ ์žก์•˜์Šต๋‹ˆ๋‹ค.

๊ฒฝ์šฐ f ๋ฒกํ„ฐ์˜ ํ•จ์ˆ˜ ์ธ ์Šค์นผ๋ผ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  I๋Š” ์‹ถ์€ diff(f) ํ—ˆ์šฉ ํ•จ์ˆ˜๋กœ Vector ํ•˜๊ณ  ์ƒ์„ฑ Covector ๊ทธ๋ž˜์„œ f(x) ~= f(x0) + diff(f)(x0) * (x-x0) . ๊ธฐ์šธ๊ธฐ์˜ ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์€ ์ž…๋ ฅ์˜ ์ฆ๋ถ„ ๋ณ€ํ™”๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ํ•จ์ˆ˜ ์ถœ๋ ฅ์˜ ์ฆ๋ถ„ ๋ณ€ํ™”์— ๋Œ€ํ•œ ์„ ํ˜• ๊ทผ์‚ฌ์น˜๋ฅผ ์–ป๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž…๋ ฅ์ด ๋ฒกํ„ฐ์ด๋ฉด ๊ทธ๋ผ๋””์–ธํŠธ๊ฐ€ ์ž…๋ ฅ์˜ ๋ชจ๋“  ์ฐจ์›์„ ๋”ฐ๋ผ ์ถ•์†Œ๋˜๋Š” ๊ฒƒ์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ทธ๋ž˜๋””์–ธํŠธ ๋””์„ผํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด x ์— ๊ทธ๋ž˜๋””์–ธํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (ํ™•์žฅ ๋œ ๋ฒ„์ „). ์ด๋Ÿฌํ•œ ์˜๋ฏธ์—์„œ ๊ทธ๋ž˜๋””์–ธํŠธ๋Š” ๊ฐ€์žฅ ๊ฐ€ํŒŒ๋ฅธ ๋ฐฉํ–ฅ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฒกํ„ฐ์ด๋ฉฐ, ๊ทธ ๊ทœ๋ฒ”์€ ๊ฐ€์žฅ ๊ฐ€ํŒŒ๋ฅธ ๋ฐฉํ–ฅ์„ ๋”ฐ๋ผ ๋ณ€ํ™”ํ•˜๋Š” ์†๋„์— ๋น„๋ก€ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ง๊ฐ์€ "ํ•œ ์ ์—์„œ์˜ ๋ฒกํ„ฐ ์ž…๋ ฅ ํ•จ์ˆ˜์˜ ๊ธฐ์šธ๊ธฐ๋Š” ์ฝ” ๋ฒกํ„ฐ"๊ฐ€ ๋” ์ค‘์š”ํ•˜๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ Base์—์„œํ•ด์•ผ ํ•  ์˜ณ์€ ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

covector ๊ณฑํ•˜๊ธฐ ๋‹ค๋ฅธ ๋ฒกํ„ฐ
์ฝ” ๋ฒกํ„ฐ ๊ณฑํ•˜๊ธฐ ํ–‰๋ ฌ
covector '๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒกํ„ฐ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

๋‚ด ์ด์ „ ๋ฌด์„œ์šด ๊ฒŒ์‹œ๋ฌผ์—์„œ ์–ป์€ ์ธ์ƒ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ด๊ฒƒ์— +1ํ•˜์‹ญ์‹œ์˜ค.

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์–ธ๊ธ‰ :

๋‚˜๋Š” covector ์ œ์•ˆ (๋‚ด๊ฐ€ ์ฃผ๋กœ ์ง€์›ํ•˜๋Š”)์— ๋Œ€ํ•œ ๊ธ€์„ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์ง€๋งŒ, @StefanKarpinski ์˜ "์žฌ๋ฏธ์žˆ๋Š” ํ–‰ ํ–‰๋ ฌ"๊ฐœ๋…์„ ์ •ํ™•ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ํ•œ ์ง€์ ์„ ์ง€๊ธˆ ๊ฒŒ์‹œํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฝ” ๋ฒกํ„ฐ๋Š” ๋ฒกํ„ฐ๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ ๊ทธ ์ด์œ ์— ๋Œ€ํ•œ ์„ค๋ช…์ด ํ•ญ์ƒ ๋ช…ํ™•ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ฝ” ๋ฒกํ„ฐ (๋˜๋Š” ๋ฌผ๋ฆฌํ•™ ์ž๋“ค์ด ๋ถ€๋ฅด๋Š” ๋ธŒ๋ž˜์ง€์–ด-๋ฒกํ„ฐ)๋Š” ๋ฒกํ„ฐ๋ฅผ ๋จน๊ณ  ๋‚ด์ ์ธ ์ˆซ์ž๋ฅผ ๋ฑ‰์–ด๋‚ด๋Š” ์„ ํ˜• ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ด์ค‘ ๋ฒกํ„ฐ / ์ฝ” ๋ฒกํ„ฐ (์„ ํ˜• ํ•จ์ˆ˜๋ผ๋Š” ์šฉ์–ด๋„ ์„ ํ˜ธ ํ•จ)๋Š” ๋‚ด์ ์—†์ด ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. V์—์„œ V ๋กœ์˜ ๋งคํ•‘์„ ์ •์˜ํ•˜๋ ค๋ฉด ๋‚ด๋ถ€ ๊ณฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค *

๋” ์ •ํ™•ํ•˜๊ฒŒ:

V = V (F) ๋ฐ W = W (F)๋ฅผ ์š”์†Œ F์˜ ์ผ๋ถ€ ํ•„๋“œ์— ๋Œ€ํ•œ ๋ฒกํ„ฐ๋ผ๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
v์™€ w๋Š” ๊ฐ๊ฐ V์™€ W์˜ ์š”์†Œ ์ธ ๋ฒกํ„ฐ์ด๊ณ ,
<.,.>๋Š” <.,.> : V ร— W โ†’ F ๋ฐ v, w โ†ฆ์ด๋˜๋Š” ๋‚ด์ ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๋‘ ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฒกํ„ฐ ๊ณต๊ฐ„ V์™€ W ์‚ฌ์ด์— ๋‚ด์ ์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ด์ƒํ•˜๊ณ  ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์–‘์˜ ์ •์˜ ์†์„ฑ์„ ์–ด๋–ป๊ฒŒ ์ •์˜ํ•ฉ๋‹ˆ๊นŒ?
v์— ํ•ด๋‹นํ•˜๋Š” ์ฝ” ๋ฒกํ„ฐ๋Š” ์„ ํ˜• ํ•จ์ˆ˜ v '์ž…๋‹ˆ๋‹ค. w โ†ฆ ๋งคํ•‘์„ ์ˆ˜ํ–‰ํ•˜๋Š” W โ†’ F.

์ผ๋ฐ˜์ ์ธ ์„ค๋ช…์€ v '๊ฐ€ ์ด์ค‘ ๊ณต๊ฐ„ V *์˜ ์š”์†Œ๋ผ๋Š” ๋ง๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค. ์ด์ค‘ ๊ณต๊ฐ„์ด ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๋ง์€ ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์œ ํ•œ ์ฐจ์›์˜ ๊ฒฝ์šฐ ์ด์ค‘ ๊ณต๊ฐ„์€ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๋ฒกํ„ฐ ๊ณต๊ฐ„์ด๋ผ๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด์ „์˜ ํ˜ธ์–ธ์„ ์š”์•ฝํ•˜๋ฉด Julia์˜ (Abstract) Vector ์œ ํ˜•์ด ๋ชฉ๋ก๊ณผ ๋” ๋น„์Šทํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠน์ • ๋ฒกํ„ฐ ๋ฐ ๋ฒกํ„ฐ์˜ ์ˆ˜ํ•™์  ๊ตฌ์กฐ๊ฐ€์—†๋Š” ๊ธฐํƒ€ 1 ์ฐจ์› ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ˆ˜ํ•™์  ๋ฒกํ„ฐ ์ธ ๋ชจ๋“  ๊ฐœ์ฒด๋ฅผ ์บก์ฒ˜ํ•˜๋Š” ๊ฒƒ์€ ์ถฉ๋ถ„ํžˆ ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค (๋‹ค๋ฅธ ๋ฒกํ„ฐ๋ฅผ ๊ตฌ๋ณ„ ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค). ๊ณต๋ฐฑ).

# 987์˜ ๋งฅ๋ฝ์—์„œ ์ฝ” ๋ฒกํ„ฐ์˜ ์ธ๋ฑ์‹ฑ ์˜๋ฏธ๋ฅผ ๊ณ ๋ คํ•˜๋ฉด ์ฝ” ๋ฒกํ„ฐ๊ฐ€ AbstractVectors๊ฐ€ ์•„๋‹Œ ๋˜ ๋‹ค๋ฅธ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ v '๋ฅผ ์ €๋ ดํ•˜๊ฒŒ ์ธ๋ฑ์‹ฑํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.= v'_A_w์ด๊ณ  ์ธ๋ฑ์‹ฑ ๋น„์šฉ์€ matvec ์ œํ’ˆ A_w (๋˜๋Š” A'_v)์— ์˜ํ•ด ์ง€๋ฐฐ๋˜๋ฉฐ, ์ด๋Š” AbstractVector๋กœ ์ธ์ •ํ•˜๊ธฐ์—๋Š” ํ™•์‹คํžˆ ๋„ˆ๋ฌด ๋น„์Œ‰๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ผ์ข…์˜ ๋ฃจํ”„ ์ธ์ˆ˜์ž…๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์„ ํ˜• ํ•จ์ˆ˜ (์ฝ” ๋ฒกํ„ฐ)๋Š” ๋” ์ผ๋ฐ˜์ ์ด๋ฉฐ ๋‚ด์ ์ด์—†๋Š” ๋ฒกํ„ฐ ๊ณต๊ฐ„์—์„œ๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๋‘˜์งธ, ๋ฉ”ํŠธ๋ฆญ์ด ์–‘์˜ ์ •๋ถ€ ํ˜ธ ํ–‰๋ ฌ A ์ธ ๊ฒฝ์šฐ ๋ฒกํ„ฐ v์—์„œ ์ฝ” ๋ฒกํ„ฐ๋กœ์˜ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋งคํ•‘์€ ์‹ค์ œ๋กœ v'_A์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ์ด v '๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๋ฏธ v์—์„œ ํ‘œ์ค€ ์œ ํด๋ฆฌ๋“œ ๋…ธ๋ฆ„๊ณผ ๊ด€๋ จํ•˜์—ฌ ์ •์˜ ๋œ ๋‹ค๋ฅธ ์ฝ” ๋ฒกํ„ฐ๋กœ์˜ ๋งคํ•‘์ž…๋‹ˆ๊นŒ (๋ฉ”ํŠธ๋ฆญ๊ณผ ๊ฐ™์€ ID ํฌํ•จ)? ์ „ํ˜€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค. ๋ฒกํ„ฐ์— ๋ฐ˜ ๋ณ€์„ฑ (์ƒ์œ„) ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๊ณ  ๊ณต ๋ณ€์„ฑ (ํ•˜์œ„) ์ธ๋ฑ์Šค๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ๋ฉ”ํŠธ๋ฆญ A์—๋Š” 2 ๊ฐœ์˜ ํ•˜์œ„ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๊ณ  ๋‚ด์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.= v ^ i A_ {i, j} v ^ j. ๋”ฐ๋ผ์„œ์ด ๋งคํ•‘์€ phi_j = v ^ i A_ {i, j}์™€ ๊ฐ™์ด (๋ฒกํ„ฐ v์— ์—ฐ๊ฒฐ๋œ ์ฝ” ๋ฒกํ„ฐ ์ธ phi๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ) ์ž‘์„ฑ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ด๋Š” w ^ i = O ^ i_j v ^ j ํ˜•์‹์˜ ์ผ๋ฐ˜์ ์ธ ์„ ํ˜• ์—ฐ์‚ฐ์ž์™€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.) ๋”ฐ๋ผ์„œ์ด ํ‘œํ˜„์‹ v'_A์—์„œ v๋Š” ์—ฌ์ „ํžˆ ์ƒ์œ„ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง„ v์ด๊ณ  ์—ฌ์ „ํžˆ ๋™์ผํ•œ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์‹ค์ œ๋กœ ์ œ๊ฐ€ ์œ„์—์„œ ๋งํ•˜๊ณ ์žํ–ˆ๋˜ ์  ์ค‘ ํ•˜๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์ด ์ฝ” ๋ฒกํ„ฐ๋กœ ์ž‘์—…ํ•˜๋ ค๊ณ ํ•˜์ง€ ์•Š์„ ๋•Œ ์ข…์ข… v '๋ฅผ ์“ด๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด์ ๊ณผ ๊ฐ™์ด ๋ฒกํ„ฐ์— ์ •์˜ ๋œ ํ‘œํ˜„์‹์„ ์ž‘์„ฑํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.๋˜๋Š” v'_A_w๋กœ ์นœ์ˆ™ํ•œ ํ–‰๋ ฌ ํ‘œํ˜„ ๋‚ด์—์„œ v ^ i A_ {i, j} w ^ j์™€ ๊ฐ™์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ‘œ์ค€ ์œ ํด๋ฆฌ๋“œ ๋‚ด์  v'w์กฐ์ฐจ๋„ v ^ i delta_ {i, j} w ^ j๋กœ ์ฝ์–ด์•ผํ•˜๋ฉฐ ๋Œ€๋ฅ˜ ๋ฒกํ„ฐ๋ฅผ ๋„์ž… ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, ๋‚˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ˆจ๊ฒจ์ง„ ํ˜•ํƒœ์˜ ์Šค์นผ๋ผ ์ œํ’ˆ์ด ์•„๋‹Œ ์‹ค์ œ ์ ์ ˆํ•œ ์ฝ” ๋ฒกํ„ฐ์˜ ์‚ฌ์šฉ์ด ๋‹ค์†Œ ์ œํ•œ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์€ ํŽธ๋ฆฌํ•œ ํ–‰๋ ฌ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก v '๋ฅผ ์ž‘์„ฑํ•˜์ง€๋งŒ ์‹ค์ œ๋กœํ•˜๋Š” ์ผ์€ ์ฝ” ๋ฒกํ„ฐ๊ฐ€ ์•„๋‹Œ ๋ฒกํ„ฐ์™€ ๊ด€๋ จํ•˜์—ฌ ์ •์˜ ๋œ ๋‚ด์  ๋“ฑ์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ œ์ณ๋‘๊ณ , ์Šคํ…ŒํŒ์˜ ์›๋ž˜ ์ œ์•ˆ์—์„œ์™€ ๊ฐ™์ด v '== v๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๋ฉด ๊ณฑ์…ˆ์˜ ์—ฐ๊ด€์„ฑ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์–ธ๊ธ‰์ด์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์ด ์—†์–ด๋„ v '๊ฐ€ ์ผ๋ฐ˜ ๋ฒกํ„ฐ๋กœ ์‹๋ณ„๋˜์ง€ ์•Š๋Š” ์ฝ” ๋ฒกํ„ฐ ์ธ ๊ฒฝ์šฐ์—๋„ *๊ฐ€ ์—ฐ๊ด€ ์ ์ด๋ผ๊ณ  ๋งํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
A_ (v'_w)๋Š” ํ–‰๋ ฌ์ž…๋‹ˆ๋‹ค.
(A_v ') _ w์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์Šค์นผ๋ผ ๊ฐ’ ํ•จ์ˆ˜์˜ ๊ธฐ์šธ๊ธฐ๋Š” ์‹ค์ œ๋กœ covectors์˜ ์ ์ ˆํ•œ ์‘์šฉ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ธ์ˆ˜๊ฐ€ ์—†์œผ๋ฉด ๊ธฐ์šธ๊ธฐ๋Š” covector์ž…๋‹ˆ๋‹ค. ์ผค๋ ˆ ๊ธฐ์šธ๊ธฐ์™€ ๊ฐ™์€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์•”์‹œ ์ ์œผ๋กœ ๊ฐ€์ •๋˜๋Š” ๊ฒƒ์€ ์ด๋Ÿฌํ•œ ์ฝ” ๋ฒกํ„ฐ๋ฅผ ๋‹ค์‹œ ๋ฒกํ„ฐ๋กœ ๋งคํ•‘ํ•˜๋Š” ๋ฉ”ํŠธ๋ฆญ (์‹ค์ œ๋กœ ์—ญ ๋ฉ”ํŠธ๋ฆญ)์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด x ^ i (์œ„์น˜ ๋ฒกํ„ฐ) + ์•ŒํŒŒ g_i (๊ทธ๋ž˜๋””์–ธํŠธ)์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์€ x ^ i + alpha delta ^ {i, j} g_j์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ delta ^ {i, j}๋Š” ์—ญ ๋ฉ”ํŠธ๋ฆญ์ž…๋‹ˆ๋‹ค. ์‚ฌ์†Œํ•˜์ง€ ์•Š์€ ๋ฉ”ํŠธ๋ฆญ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งค๋‹ˆ ํด๋“œ์—์„œ ์ตœ์ ํ™” ๊ธฐ์ˆ ์„ ์ •์˜ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์ด ๋ฉ”ํŠธ๋ฆญ์„ ๊ณ ๋ คํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์— ๋Œ€ํ•œ ์ข‹์€ ์ฑ…์ด ์žˆ์Šต๋‹ˆ๋‹ค.
http://sites.uclouvain.be/absil/amsbook/
๋ฐ ํ•ด๋‹น MATLAB ํŒจํ‚ค์ง€ :
http://www.manopt.org

2014 ๋…„ 10 ์›” 22 ์ผ 22:52์— goretkin [email protected]์ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ DFT์™€ ๊ทœ๋ฒ”์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ... ์ด๊ฒƒ์ด ์˜ค๋Š˜ ์ œ ๋งˆ์Œ์„ ์‚ฌ๋กœ ์žก์•˜์Šต๋‹ˆ๋‹ค.

fis๊ฐ€ ๋ฒกํ„ฐ์˜ ํ•จ์ˆ˜์ด๊ณ  ์Šค์นผ๋ผ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ diff (f)๋Š” Vector๋ฅผ ๋ฐ›์•„๋“ค์ด๊ณ  Covector๋ฅผ ์ƒ์„ฑํ•˜์—ฌ f (x) ~ = f (x0) + diff (f) ( x0) * (x-x0). ๊ธฐ์šธ๊ธฐ์˜ ๋งค์šฐ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์€ ์ž…๋ ฅ์˜ ์ฆ๋ถ„ ๋ณ€ํ™”๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ํ•จ์ˆ˜ ์ถœ๋ ฅ์˜ ์ฆ๋ถ„ ๋ณ€ํ™”์— ๋Œ€ํ•œ ์„ ํ˜• ๊ทผ์‚ฌ์น˜๋ฅผ ์–ป๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ž…๋ ฅ์ด ๋ฒกํ„ฐ์ด๋ฉด ๊ทธ๋ž˜๋””์–ธํŠธ๊ฐ€ covector๊ฐ€๋˜๋Š” ๊ฒƒ์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ทธ๋ž˜๋””์–ธํŠธ ๋””์„ผํŠธ๋ฅผ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด x์— ๊ทธ๋ž˜๋””์–ธํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (ํ™•์žฅ ๋œ ๋ฒ„์ „). ์ด๋Ÿฌํ•œ ์˜๋ฏธ์—์„œ ๊ทธ๋ž˜๋””์–ธํŠธ๋Š” ๊ฐ€์žฅ ๊ฐ€ํŒŒ๋ฅธ ๋ฐฉํ–ฅ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฒกํ„ฐ์ด๋ฉฐ, ๊ทธ ๊ทœ๋ฒ”์€ ๊ฐ€์žฅ ๊ฐ€ํŒŒ๋ฅธ ๋ฐฉํ–ฅ์„ ๋”ฐ๋ผ ๋ณ€ํ™”ํ•˜๋Š” ์†๋„์— ๋น„๋ก€ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ง๊ฐ์€ ๊ทธ๋ž˜๋””์–ธํŠธ๊ฐ€ covector๊ฐ€ ๋” ์ค‘์š”ํ•˜๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.

A_ (v'_w)๋Š” ํ–‰๋ ฌ์ž…๋‹ˆ๋‹ค.
(A_v ') _ w์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์  ์žฅ.

b2e4d59001f67400bbcc46e15be2bbc001f07bfe05c7c60a2f473b8dae6dd78a

์ด ์Šค๋ ˆ๋“œ๋Š” ์œ ๋จธ๋Ÿฌ์Šค ํ•œ ์ด๋ฏธ์ง€๊ฐ€์žˆ๋Š” ๊ฒŒ์‹œ๋ฌผ์— ๋Œ€ํ•ด ๊ธฐํ•œ์ด ์ง€๋‚ฌ์Šต๋‹ˆ๋‹ค.

@Jutho ๋‚˜๋Š” ๋‚ด๊ฐ€ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํ˜•ํƒœ์˜ ์ด์ค‘ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์ธ์ •ํ•˜์ง€๋งŒ, Banach ๊ณต๊ฐ„์˜ ํ‹€์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ค‘ ๊ณต๊ฐ„์„ ์ •์˜ํ•˜๋Š” ์„ ํƒ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋‚ด ์„ค๋ช…์ด ์–ด๋–ป๊ฒŒ ์›ํ˜•์ธ์ง€ ์ „ํ˜€ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. Banach ๊ณต๊ฐ„ ํ˜•์‹์ฃผ์˜๋Š” ์–ด์จŒ๋“  ์œ ํ•œ ์ฐจ์› ๋ฒกํ„ฐ ๊ณต๊ฐ„์— ๋Œ€ํ•ด ์ด๋ฏธ ๊ณผ์ž‰์ž…๋‹ˆ๋‹ค.

์›ํ˜•์€ ์‹ค์ œ๋กœ ์˜ฌ๋ฐ”๋ฅธ ์šฉ์–ด๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด ๋‹จ๋ฝ์—์„œ ์ œ๊ฐ€ ๋งํ•˜๊ณ ์žํ•˜๋Š” ๊ฒƒ์€ ํ•ญ๋ชฉ์˜ ํšจ์œจ์ ์ธ ํ‰๊ฐ€์— ๊ด€ํ•œ์ด ์ถ”๋ก ์„ ๋’ค์ง‘์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ณก์„  ๋งค๋‹ˆ ํด๋“œ์˜ (๊ณต์•ก) ๊ทธ๋ž˜๋””์–ธํŠธ์˜ ๊ฒฝ์šฐ ๊ทธ๋ž˜๋””์–ธํŠธ (์ฝ” ๋ฒกํ„ฐ) g_i ๋Š” ํšจ์œจ์ ์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ x ^ i (์—ญ ๋ฉ”ํŠธ๋ฆญ ์ธ A ^ {i, j} ์‚ฌ์šฉ)์— ์ถ”๊ฐ€ ๋  ํ•ด๋‹น ๋ฒกํ„ฐ A ^ {i, j} g_ {j}๋Š” ํšจ์œจ์ ์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ Github์— ๋‚ด ์ด์ „ ๋ฉ”์‹œ์ง€๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ž˜๋ชป ์„ค๋ช…๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฉ”์ผ์„ ์ผ์„ ๋•Œ๋Š” ๊ดœ์ฐฎ ์•˜์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ง€๊ธˆ ๊ทธ๊ฒƒ์„ ๊ณ ์น˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๋‹ค. ๊ณ„์† ๋ฐ˜๋ณตํ•˜๊ณ  ์‹ถ์ง€ ์•Š์œผ๋ฉฐ, ํ˜„์žฌ ์ œ์•ˆ์— ๋™์˜ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ (์ž˜๋ชป๋œ) ์ธ์ƒ์„์ฃผ๊ณ  ์‹ถ์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋งŒ๋“ค๋ ค๊ณ ํ–ˆ๋˜ ์œ ์ผํ•œ ์š”์ .

  1. ์ด์ค‘ ๊ณต๊ฐ„์€ ํ™•์‹คํžˆ ๋ฒกํ„ฐ ๊ณต๊ฐ„์ด๋ฏ€๋กœ ๊ทธ ์š”์†Œ๋Š” ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ชฉํ‘œ๋Š” ๋ฒกํ„ฐ์˜ ์ˆ˜ํ•™์  ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ Julia์˜ AbstractVector ์˜ ํ•˜์œ„ ์œ ํ˜•์ด๋˜๊ฑฐ๋‚˜ AbstractVector ํ•˜์œ„ ์œ ํ˜• ์ธ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์ ์ ˆํ•œ ์ˆ˜ํ•™์  ํŠน์„ฑ์„ ๊ฐ–๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋ฒกํ„ฐ ๊ทธ๋Ÿฐ ์˜๋ฏธ์—์„œ Matrix ๋ผ๋Š” ์ด๋ฆ„์ด Vector ๋ผ๋Š” ์ด๋ฆ„๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ์ด ์ œ์•ˆ์˜ ์ผ๋ถ€๋กœ Covector ์œ ํ˜•์ด ๋„์ž…๋˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ด๋“ ๊ฐ„์— AbstractVector ๋˜๋Š” AbstractArray ์˜ ํ•˜์œ„ ์œ ํ˜•์ด๋˜์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์— ๋™์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. , V *๊ฐ€ ์ž์—ฐ์ ์œผ๋กœ V (์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ ˆ๋ฐ˜์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ์นด๋ฅดํŠธ ๊ณต๊ฐ„)์™€ ๋™ํ˜• ์ธ ๊ฒฝ์šฐ์—๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.
  2. ๋‚ด๋ถ€ ๊ณฑ์„ ์‚ฌ์šฉํ•˜๋ฉด V์—์„œ V_ ๋กœ์˜ ๋งคํ•‘์„ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ V_์˜ ์กด์žฌ๋ฅผ์œ„ํ•œ ์ „์ œ ์กฐ๊ฑด์€ ์•„๋‹™๋‹ˆ๋‹ค. ํ™•์‹คํžˆ, ์ด๊ฒƒ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ•ญ์ƒ ์œ ํ•œ ์ฐจ์›์˜ ๋ฒกํ„ฐ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ํ•ญ์ƒ ๋‚ด๋ถ€ ์ œํ’ˆ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ จ์—†๋Š” ๋ฌธ์ œ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€๋งŒ (์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ๊ด€๋ จ์ด ์—†์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ), ์ œ๊ฐ€ ์‹œ๋„ํ•œ ์‹ค์šฉ์ ์ธ ์š”์ ์€ make๋Š” ์ด๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด @goretkin์œผ๋กœ ์ข‹์€ ๊ตฌ๋ฐฐ์˜ ์˜ˆ์ฒ˜๋Ÿผ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— covectors์˜ ์ ์ ˆํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์‚ฌ๋žŒ๋“ค์ด ์“ฐ๋Š” ๊ฒฝ์šฐ v' , ๊ทธ๋“ค์€ ์ •๋ง covector๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๊ณ ํ•˜์ง€ ์•Š๋Š”, ๊ทธ๋“ค์€ ๋‹จ์ง€ ์„ ํ˜•์„ ์ž‘์„ฑํ•˜๋ ค๊ณ ํ•˜๋Š” v'_A_w = v ^ i A_ {i, j} w ^ j ๋˜๋Š” v'w = v ^ i delta_ {i, j} w ^ j์—์„œ์™€ ๊ฐ™์ด ๋‘ ๋ฒกํ„ฐ ๊ฐ„์˜ ๋งคํ•‘ (์ฆ‰, V x V์—์„œ ์Šค์นผ๋ผ๋กœ) ํŽธ๋ฆฌํ•œ ํ–‰๋ ฌ ํ‘œํ˜„. ๋‚˜๋Š” dot(v,A*w) ๋ช…์‹œ ์ ์œผ๋กœ ์“ฐ๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๊ฐœ์ธ์ ์ธ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ํ–‰๋ ฌ์˜ ์ƒ์œ„ ๋˜๋Š” ํ•˜์œ„ ์ธ๋ฑ์Šค์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— v'*A*w ์™€ ๊ฐ™์€ ์Šค์นผ๋ผ ํ‘œํ˜„์‹์—์„œ v' ๋ฐ w ๋ชจ๋‘ ๋ฒกํ„ฐ ๋˜๋Š” ์ฝ” ๋ฒกํ„ฐ ์ผ ์ˆ˜์žˆ๋Š” ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜ํ•™์  ์˜๋ฏธ์—์„œ. ์ด๊ฒƒ์˜ ์œ ์ผํ•œ ๊ฒฐ๊ณผ๋Š” v' Covector ์œ ํ˜•์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์ •๋ง ๋งŒ์กฑ์Šค๋Ÿฝ์ง€ ์•Š์€์ง€ ํ™•์‹คํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„ Vector ์ฒ˜๋Ÿผ ๋„ˆ๋ฌด ๋งŽ์€ ์ˆ˜ํ•™์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ •๋‹นํ™”๋˜์ง€ ์•Š์„ ์ˆ˜์žˆ๋Š” ํ•จ์ถ•์  ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋” ๋งŽ์€ (๋Œ€๋ถ€๋ถ„ ๋ฌด๊ด€ ํ•œ) ํ† ๋ก ์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

@jutho +1 (๊ทธ๋ ˆ๋””์–ธํŠธ๊ฐ€ ์ฝ” ๋ฒกํ„ฐ ์ธ ๊ฒฝ์šฐ)
๋‚˜๋Š” ์Šคํ‹ฐ๋ธŒ ์Šค๋ฏธ์Šค์˜ ๋ฐ•์‚ฌ ๋…ผ๋ฌธ์—์„œ ์ด๊ฒƒ์„ ์ฒ˜์Œ ๋ฐฐ์› ๊ณ ์ด ์•„์ด๋””์–ด๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ณ ์œ  ๊ฐ’ ๊ณ„์‚ฐ์„์œ„ํ•œ ์ผค๋ ˆ ๊ธฐ์šธ๊ธฐ์˜ ๋ชจํ˜ธํ•œ ์•„์ด๋””์–ด๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด
์‚ฌ๋žŒ๋“ค์ด ํ™”ํ•™๊ณผ ๋ฌผ๋ฆฌํ•™์—์„œ ์ด์•ผ๊ธฐํ–ˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด๋ถ€์ ์œผ๋กœ ์ผ๊ด€๋œ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ ์  ๊นœ์ง ๋†€๋ž์Šต๋‹ˆ๋‹ค.
์ž์ฒด ํฌํ•จ์€ ์ƒ์œ„ 1 ๊ฐœ์™€ ํ•˜์œ„ ์ƒ‰์ธ 1 ๊ฐœ๋ฅผ ๊ฐ€์ง„ ๋žญํฌ 2 ํ…์„œ์˜ ์„ธ๊ณ„์ž…๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ–‰๋ ฌ ๊ณ„์‚ฐ ๋˜๋Š” ํ‰๋ฒ”ํ•œ ์„ ํ˜• ๋Œ€์ˆ˜๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋„๋Œ€์ฒด norm (v, p) ๋˜๋Š” fft (v)์™€ ๊ฐ™์€ ๋งŽ์€ ์˜ˆ์ œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์ง€๋งŒ
๋ฒกํ„ฐ์ธ์ง€ ์ฝ” ๋ฒกํ„ฐ์ธ์ง€๋Š” ๋‹ค๋ฅด์ง€๋งŒ, ์ข‹์€ ์˜ˆ๊ฐ€ ํ•˜๋‚˜๋„ ์—†์Šต๋‹ˆ๋‹ค (์•„์ง!)
๋ฒกํ„ฐ์™€ ํ•˜๋‚˜์˜ ์—ด ํ–‰๋ ฌ์—์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜.
(๋ˆ„๊ตฐ๊ฐ€ ๋„์™€์ฃผ์„ธ์š”, ๋ถ„๋ช…ํžˆ ํ•˜๋‚˜, ์‹ฌ์ง€์–ด ๋งŽ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค !!)

์ €๋Š” ๋˜ํ•œ ๋ช‡ ๋…„ ๋™์•ˆ ์ถ”์ƒ์  ์ธ ๋ฒกํ„ฐ๋ฅผ @jutho ์ฒ˜๋Ÿผ
๊ณต๋ฐฑ์€ ์•„์ง ์ค„๋ฆฌ์•„๋กœ๊ฐ€๋Š” ๊ธธ์„ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. @StefanKarpinski์™€ ๋Œ€ํ™”๋ฅผ ๋‚˜๋ˆˆ ๊ฒƒ์„ ๊ธฐ์–ตํ•ฉ๋‹ˆ๋‹ค.
๋ช‡ ๋…„ ์ „ ์ œ ํ™”์ดํŠธ ๋ณด๋“œ์—์„œ ์ด๊ฒƒ์— ๋Œ€ํ•ด. ์—ฌ์ „ํžˆ ์ค‘์š”ํ•œ ๊ด€์‹ฌ์‚ฌ
1) Julia๋ฅผ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ์‰ฌ์šด ๊ฒฝํ—˜์ด ์žˆ์–ด์•ผํ•˜๊ณ 
2) ์„ฑ๋Šฅ
์ด ๋ฉ‹์ง„ ๋ฌผ๊ฑด์„ ๋Šฅ๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@jiahao ์™€ ๋Œ€ํ™” ํ•œ ๊ฒฐ๊ณผ ๋‘ ๊ฐ€์ง€ ๋งค์šฐ ํŠน๋ณ„ํ•œ ์„ธ๊ณ„๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์„ ํ˜• ๋Œ€์ˆ˜ (ํ•˜๋‚˜์˜ ์ฝ˜ํŠธ๋ผ์™€ ํ•˜๋‚˜์˜ co๊ฐ€์žˆ๋Š” ๋ฐฐ์—ด) ๋ฐ ๋‹จ์ˆœ ํ…์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
(๋ชจ๋“  ์‚ฌ๋žŒ์€ ๊ณต๋™, ์ฝ˜ํŠธ๋ผ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค). ํ›„์ž๋Š” APL ๋ฐ Mathematica์—์„œ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
์ „์ž๋Š” ์„ ํ˜• ๋Œ€์ˆ˜ ์ „์ฒด์— ๊ฑธ์ณ ์žˆ์œผ๋ฉฐ ์ด์ „์— MATLAB์—์„œ ๊ฐ€์žฅ ์ž˜ ์บก์ฒ˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋“ค์€ 2๋ณด๋‹ค ๋†’์€ ์ฐจ์›์˜ ๋ฐฐ์—ด์— ์ ‘๋ชฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
@JeffBezanson ๊ณผ์˜ ํ•œ๋งˆ๋””๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ๋ฏธ์นœ ๊ฒƒ

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ  ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋” ์ด์ƒ์€ ์•„๋‹ˆ์ง€๋งŒ ์•ฝ 1 ๋…„์ด ๊ฑธ๋ฆฐ ๊ฒƒ ๊ฐ™์ง€๋งŒ ๋งˆ์นจ๋‚ด ์ด๊ฒƒ์„ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค :-)

์— ๊ด€ํ•ด์„œ
A_ (v'_w)๋Š” ํ–‰๋ ฌ์ž…๋‹ˆ๋‹ค.
(A_v ') _ w์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ–‰๋ ฌ ๊ณฑํ•˜๊ธฐ "*"๋งŒ ์—ฐ๊ด€๋ฉ๋‹ˆ๋‹ค. ์˜ค๋ฒ„๋กœ๋“œ ๋œ ์Šค์นผ๋ผ ์‹œ๊ฐ„ ํ–‰๋ ฌ์€
์—ฐ๊ด€. ์ˆ˜ํ•™์ด๋‚˜ MATLAB์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

A_ (v'_w)๋Š” ํ–‰๋ ฌ์ž…๋‹ˆ๋‹ค.
(A_v ') _ w์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ž˜ ์žก์•˜์Šต๋‹ˆ๋‹ค. ๋น„ ์˜ค๋ฅ˜๊ฐ€ ๋‹ค๋ฅธ ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ด€๋ จ ์งˆ๋ฌธ : ์Šค์นผ๋ผ * ์ฝ” ๋ฒกํ„ฐ๋Š” ๋ฌด์—‡์„ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

์˜ค๋ฒ„๋กœ๋“œ ๋œ ์Šค์นผ๋ผ ์‹œ๊ฐ„ ํ–‰๋ ฌ์€ ๊ฒฐ์ฝ” ์—ฐ๊ด€์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ˆ˜ํ•™์ด๋‚˜ MATLAB์—์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

ํ–‰๋ ฌ๊ณผ ์Šค์นผ๋ผ ๋งŒ ํฌํ•จํ•˜๋Š” ์—ฐ์‚ฐ ์€ ์—ฐ๊ด€๋ฉ๋‹ˆ๋‹ค (ํฌ์ธํŠธ 3 ์ฐธ์กฐ). ๋ฒกํ„ฐ๋ฅผ 1 ์—ด ๋ฐฐ์—ด๋กœ ์ทจ๊ธ‰ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํฌํ•จํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฃผ๋ฆ„์€ Covector๊ฐ€ ์ฐจ์›์„ ์ค„์ผ ์ˆ˜์žˆ๋Š” ์—ฐ์‚ฐ์ž (๋ฒกํ„ฐ๋ฅผ ์Šค์นผ๋ผ์— ๋งคํ•‘)์ด๋ฏ€๋กœ ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ๋งž๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์Šค์นผ๋ผ ๋งคํŠธ๋ฆญ์Šค ์ถ”๊ฐ€๋Š” ๋” ํฐ ๊ด€์‹ฌ์‚ฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๋ถ„๋ฐฐ ์„ฑ์„ ๋ง์น  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

(A+s)*v != A*v + s*v

์ด๊ฒƒ์€ ๋งค์šฐ ๋ฉ‹์ง„ ์š”์•ฝ์ž…๋‹ˆ๋‹ค.

@jiahao ์™€ ๋Œ€ํ™” ํ•œ ๊ฒฐ๊ณผ ๋‘ ๊ฐ€์ง€ ๋งค์šฐ ํŠน๋ณ„ํ•œ ์„ธ๊ณ„๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์„ ํ˜• ๋Œ€์ˆ˜ (ํ•˜๋‚˜์˜ ์ฝ˜ํŠธ๋ผ์™€ ํ•˜๋‚˜์˜ co๊ฐ€์žˆ๋Š” ๋ฐฐ์—ด) ๋ฐ ๋‹จ์ˆœ ํ…์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
(๋ชจ๋“  ์‚ฌ๋žŒ์€ ๊ณต๋™, ์ฝ˜ํŠธ๋ผ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค).

์ด ๋…ผ์˜๋Š”๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์™„์ „ํ•œ ์ผ๋ฐ˜์„ฑ์„ ํ•„์š”๋กœํ•˜์ง€ ์•Š๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ๋Š” ๋„ˆ๋ฌด ํ˜ผ๋ž€์Šค๋Ÿฝ๊ณ  ํ˜„์žฌ์˜ AbstractArray ๊ณ„์ธต ๊ตฌ์กฐ์— ํฌํ•จ๋  ์ˆ˜ ์—†์œผ๋ฉฐ ํŒจํ‚ค์ง€์— ๋” ์ ํ•ฉํ•˜๋‹ค๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์˜ ์œ„์—). ๊ทธ๋Ÿฌ๋‚˜ ๋…ผ์˜๋Š” ์‹ค์ œ๋กœ์ด ๋‘ ๊ฐ€์ง€ ํŠน๋ณ„ํ•œ ์„ธ๊ณ„ ์ค‘ ์–ด๋Š ๊ฒƒ์ด ์ƒํ˜ธ ํ˜ธํ™˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ์ง€์›ํ•˜๊ณ  ์‹ถ์€์ง€์ž…๋‹ˆ๋‹ค.

์ „์ž์—์„œ ๋ชจ๋“  ๋ฒกํ„ฐ v ๋Š” ์—ด์ด๊ณ , ๋ชจ๋“  v' ๋Š” ์ฝ” ๋ฒกํ„ฐ์ด๋ฉฐ ๋ชจ๋“  ํ–‰๋ ฌ์€ ์„ ํ˜• ์—ฐ์‚ฐ์ž V-> W์ž…๋‹ˆ๋‹ค (์˜ˆ : W โŠ— V_์— ์žˆ์Œ). V x V-> ์Šค์นผ๋ผ (์˜ˆ : v ^ i A_ {i, j} w ^ j)๋ฅผ ๋งคํ•‘ํ•˜๋ ค๋ฉด ๋‘ ๊ฐœ์˜ ํ•˜์œ„ ์ธ๋ฑ์Šค๊ฐ€์žˆ๋Š” ํ–‰๋ ฌ (์˜ˆ : V_ โŠ— W_์— ๊ฑฐ์ฃผ)์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๊ณ  v'_A*w ๋กœ ์“ธ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์„ ํƒํ•œ ๊ฐ์ฒด ๋ช…๋ช…๋ฒ•๊ณผ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋” ๋†’์€ ์ˆœ์„œ์˜ ๋ฐฐ์—ด์ด ์กด์žฌํ•˜๋Š” ๊ณต๊ฐ„์„ ์ง€์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ›„์ž์˜ ๊ฒฝ์šฐ (V == V *)๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€๋งŒ v' == v ์™€ ๊ฐ™์€ ๋†€๋ผ์šด ๊ฒฐ๊ณผ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ์ด ์†”๋ฃจ์…˜์€ ์‹ค์ œ๋กœ ์‹ค์ œ ๋ฒกํ„ฐ ๊ณต๊ฐ„์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํ‘œ์ค€ ์œ ํด๋ฆฌ๋“œ ๋‚ด์  (์˜ˆ : '๋ณต์žกํ•œ ๋ฐ์นด๋ฅดํŠธ ๊ณต๊ฐ„')์ด์žˆ๋Š” ๋ณต์žกํ•œ ๊ณต๊ฐ„์—์„œ๋„ ์ด์ค‘ ๊ณต๊ฐ„์€ ์ž์—ฐ์ ์œผ๋กœ V์™€ ๋™ํ˜•์ด ์•„๋‹ˆ๋ผ conj (V) (V bar), ์ผค๋ ˆ ๋ฒกํ„ฐ ๊ณต๊ฐ„ (http://en.wikipedia.org/wiki/Complex_conjugate_vector_space์˜ Hilbert ๊ณต๊ฐ„ ์ฐธ์กฐ)

๊ทธ ์ ์˜ ํ˜„์žฌ ๋™์ž‘์— ๋น„ ์—ฐ๊ด€์„ฑ์— ๋Œ€ํ•ด์„œ๋Š” v'*v ์Šค์นผ๋ผํ•˜์ง€๋งŒ ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ์‹ค์ œ๋กœ๋Š” ๋” ์ผ๊ด€์„ฑ์ด๋‹ค ๊ทธ๋กœ๋ถ€ํ„ฐ ๋ชจ๋‘ A*(v'*v) ๋ฐ (A*v')*v ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ๋ฌผ์˜ "์„ ํ˜• ๋Œ€์ˆ˜"์ธก๋ฉด์€ ๋ฒกํ„ฐ์™€ ์ฝ” ๋ฒกํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ์„ ํƒ์œผ๋กœ ์ถ”๊ฐ€๋กœ ํ•ด์„ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • Covector, ์ผ๋ช… "funny row vector"์ œ์•ˆ์€ ์šฐ๋ฆฌ๊ฐ€ ์ตœ๊ทผ์— ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Matlab ๋“ฑ์— ์˜ํ•ด ๋ณด์ฆ๋˜๋Š” (N- ๋ฒกํ„ฐ๋ฅผ Nx1- ํ–‰๋ ฌ๋กœ), (N- ํ–‰-๋ฒกํ„ฐ๋ฅผ 1xN- ํ–‰๋ ฌ๋กœ) ๋ณ‘ํ•ฉํ•˜๋Š” "์ง„์งœ ๋ฒกํ„ฐ ์—†์Œ"์˜๋ฏธ ์ฒด๊ณ„.
  • ํ˜„์žฌ ์ค„๋ฆฌ์•„ ๋ฐฉ์‹-์กฐ๋ฐ€ ํ•œ N- ๋ฒกํ„ฐ์™€ Nx1- ํ–‰๋ ฌ์„ ๋ณ‘ํ•ฉํ•˜์ง€ ์•Š๊ณ  ํฌ์†Œ N- ๋ฒกํ„ฐ์™€ Nx1 ํ–‰๋ ฌ์„ ๋ณ‘ํ•ฉํ•˜๊ณ  N- ํ–‰ ๋ฒกํ„ฐ๋ฅผ 1xN- ํ–‰๋ ฌ๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

"์ง„์งœ ๋ฒกํ„ฐ๊ฐ€์—†๋Š”"์„ธ๊ณ„์—์„œ ๋ณ‘ํ•ฉ (์Šค์นผ๋ผ, 1- ๋ฒกํ„ฐ, 1x1- ํ–‰๋ ฌ)์ด ๊ผญ ํ•„์š”ํ•œ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. @alanedelman ๊ณผ ๋‚˜๋Š” ์–ด์ œ ์ด๊ฒƒ์„ ๋…ผ์˜ํ–ˆ๊ณ  ์ˆ˜์น˜ ์„ ํ˜• ๋Œ€์ˆ˜ํ•™์—์„œ ๋ฒกํ„ฐ * ์Šค์นผ๋ผ์™€ ์Šค์นผ๋ผ * ๋ฒกํ„ฐ์˜ commutativity๋Š” ๋ชจ๋“  ๊ณณ์—์„œ ์‚ฌ์šฉ๋˜์ง€๋งŒ ๋ฒกํ„ฐ * ์Šค์นผ๋ผ ๊ณฑ์€ (N,) * ( ,) ๋˜๋Š” (N, 1) * (1,1).

1) ํ•˜๋ฃจ๊ฐ€ ๋๋‚  ๋•Œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ A) ์‚ฌ์šฉ ํŽธ์˜์„ฑ๊ณผ B) ์„ฑ๋Šฅ์ž…๋‹ˆ๋‹ค.
2) ๋‘ ์„ธ๊ณ„๋Š” ์™„์ „ํ•œ ์กฐํ™”๋กœ ๊ณต์กด ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์—”์ง€๋‹ˆ์–ด๋ง ์ž‘์—…์„ ํ•  ๋•Œ ํ…์„œ ํ‘œ๊ธฐ๋ฒ•๋ณด๋‹ค ๋” ์ง๊ด€์ ์ด๊ณ  ์‰ฌ์šด ๊ฒƒ์€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ํ•œ ๊ฐ€์ง€ ์ œ์•ˆ์€ ํ™˜๊ฒฝ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘์‹œ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‚ฌ์šฉ์˜ ์šฉ์ด์„ฑ๊ณผ ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋…ผ๋ฆฌ๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ํ•˜๋‚˜์˜ ์ค‘์š”ํ•œ ์Šคํ‚ค๋งˆ๋ฅผ ์„ ํƒํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?

๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค
1) ๋„๊ตฌ ์ƒ์ž, ํŒจ์น˜ ๋˜๋Š” ํ™˜๊ฒฝ ํ”Œ๋ž˜๊ทธ๋ฅผ ๋™์‹œ์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋„๋กํ•ฉ๋‹ˆ๋‹ค.
2) ํŠน๋ณ„ํ•œ ์„ธ๊ณ„๋ฅผ ํ†ตํ•ฉ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ๋น ๋ฅธ ์–ธ์–ด ๊ตฌ์ถ•

์ด๊ฒƒ์ด ์–ผ๋งˆ๋‚˜ ์œ ๋งํ•œ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์ž ์žฌ์ ์œผ๋กœ ํฅ๋ฏธ๋กœ์šด ์—ฐ๊ตฌ ๋ถ„์•ผ๋ฅผ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์‚ฌํ•ญ์—์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด์‹ญ์‹œ์˜ค.

๊ธฐํ•˜ ๋Œ€์ˆ˜ ์—ฐ๊ตฌ ๊ทธ๋ฃน
http://www.mrao.cam.ac.uk/~clifford/pages/introduction.htm

๊ธฐํ•˜ ๋Œ€์ˆ˜ ๊ฐ•์ขŒ
http://www.mrao.cam.ac.uk/~clifford/ptIIIcourse/course99/

๊ธฐํ•˜ ๋Œ€์ˆ˜์˜ ๋ฌผ๋ฆฌ์  ์‘์šฉ
http://www.mrao.cam.ac.uk/~clifford/ptIIIcourse/

21 ์„ธ๊ธฐ ๋ฌผ๋ฆฌํ•™๊ณผ ๊ณตํ•™์„์œ„ํ•œ ํ†ตํ•ฉ ์ˆ˜ํ•™ ์–ธ์–ด
http://www.mrao.cam.ac.uk/%7Eclifford/publications/ps/dll_millen.pdf

๊ธฐํ•˜ ๋Œ€์ˆ˜
http://arxiv.org/pdf/1205.5935v1.pdf

๊ธฐํ•˜ ๋Œ€์ˆ˜ ์ปดํ“จํŒ…์˜ ๊ธฐ์ดˆ
http://link.springer.com/book/10.1007%2F978-3-642-31794-1

๊ธฐํ•˜ ๋Œ€์ˆ˜ ์ปดํ“จํŒ…
http://link.springer.com/book/10.1007%2F978-1-84996-108-0

์ด๊ฒƒ์„ ์กฐ๊ธˆ ๋” ์‚ดํŽด๋ณด๋ฉด ์ •๋ง ๋†€๋ž์Šต๋‹ˆ๋‹ค.

๋Œ€์ˆ˜์™€ ๊ธฐํ•˜ํ•™์ด ๋ถ„๋ฆฌ๋˜์–ด์žˆ๋Š” ํ•œ, ๊ทธ๋“ค์˜ ์ง„ํ–‰์€ ๋Š๋ฆฌ๊ณ  ์‚ฌ์šฉ์ด ์ œํ•œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜์ด ๋‘ ๊ณผํ•™์ด ํ†ตํ•ฉ๋˜์—ˆ์„ ๋•Œ ๊ทธ๋“ค์€ ์„œ๋กœ์˜ ํž˜์„ ๋นŒ๋ ค์ฃผ๊ณ  ์™„๋ฒฝ์„ ํ–ฅํ•ด ํ•จ๊ป˜ ํ–‰์ง„ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ์กฐ์…‰ ๋ฃจ์ด์Šค ๋ผ๊ทธ๋ž‘์ฃผ

์•ˆ๊ฒฝ์ด ํ•„์š”ํ•˜๊ณ  ์•ˆ๊ฒฝ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ชจ๋ฅธ๋‹ค๊ณ  ์ƒ์ƒํ•ด๋ณด์‹ญ์‹œ์˜ค. ๊ทธ๋ฆฌ๊ณ  ์•ˆ๊ฒฝ์„ ๋ฐ›์œผ๋ฉด ์„ธ์ƒ์ด ๊ฐ‘์ž๊ธฐ ๋ฐ”๋€๋‹ˆ๋‹ค. GA๋Š” ๋‡Œ ๋‚ด๋ถ€๋ฅผ์œ„ํ•œ ์•ˆ๊ฒฝ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํŒŒ๋ธ”๋กœ ์ฝœ๋ผ ํ•€ํ† 

์ด ๋…€์„์€ ์˜ณ์€ ์•„์ด๋””์–ด๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ... https://github.com/wolftype/versor

์ผ๋ฐ˜์ ์ธ ํ–‰๋ ฌ ์—ฐ์‚ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ๋ฒกํ„ฐ ๋ฐ ํ–‰๋ ฌ ๊ณฑ์…ˆ์„์œ„ํ•œ ํ…œํ”Œ๋ฆฟ ์ธ๋ผ์ธ ํ•จ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐํ•˜ ๋Œ€์ˆ˜๋Š” ๋‹ค๋ฅธ ๋งŽ์€ ์ˆ˜ํ•™ (ํ–‰๋ ฌ, ํ…์„œ, ๋ฒกํ„ฐ ๋ฐ ๊ฑฐ์ง“๋ง ๋Œ€์ˆ˜)์„ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค. Versor๋Š” ์œ ์‚ฌํ•˜์ง€๋งŒ ๋‹ค์–‘ํ•œ ํฌ๊ธฐ์˜ ๋ฒกํ„ฐ ๋ฐ ํฌ์†Œ ํ–‰๋ ฌ์„ ๋ชจ๋‘ ๋‹ค์ค‘ ๋ฒกํ„ฐ๋ผ๊ณ ํ•˜๋ฉฐ xyz ๋ฐฉํ–ฅ ๋ฐ ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ๋„˜์–ด์„œ๋Š” ๊ธฐํ•˜ํ•™์  ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์Šคํ…Œ๋กœ์ด๋“œ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์›, ์„ , ๊ตฌ, ํ‰๋ฉด, ์ ์€ ์ด๋Ÿฌํ•œ ๋ณ€์ˆ˜๋ฅผ ํšŒ์ „, ๋น„ํ‹€๊ณ , ํ™•์žฅํ•˜๊ณ  ๊ตฌ๋ถ€๋ฆฌ๋Š” ์—ฐ์‚ฐ์ž์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ชจ๋‘ ๋Œ€์ˆ˜์  ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์ด ์š”์†Œ์™€ ์—ฐ์‚ฐ์ž๋Š” ๋ชจ๋‘ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ํ•จ๊ป˜ ์ฆ์‹ํ•˜๋Š” ๋‹ค์ค‘ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.

์ด ๋น„๋””์˜ค๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋œ GA ์ˆ˜ํ•™ ์–ธ์–ด ์ธ Versor์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
https://www.youtube.com/watch?v=W4p-e-g37tg

์ด๊ฒƒ์— ๋Œ€ํ•œ ์Šฌ๋ผ์ด๋“œ์ž…๋‹ˆ๋‹ค. https://github.com/boostcon/cppnow_presentations_2014/blob/master/files/generic_spaces.pdf

์ปดํŒŒ์ผ ํ•  ๋•Œ ์†๋„์— ์ตœ์ ํ™” ๋œ ๋†€๋ผ์šด ํ…์„œ ๊ณ„์‚ฐ์„ ์ •๋ง ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@ esd100 ,์ด ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ ํ† ๋ก ์„ ์ œ๋ชฉ์˜ ํŠน์ • ๋ฌธ์ œ์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@johnmyleswhite "ํ…์„œ"๋ผ๋Š” ์šฉ์–ด๋ฅผ ๊ฒ€์ƒ‰ํ–ˆ๋Š”๋ฐ 171 ๋ฒˆ ์–ธ๊ธ‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค (ํ˜„์žฌ 172 ๋ฒˆ). ๊ท€ํ•˜์˜ ์ง„์ˆ ์— ๋™์˜ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ์ด ์Šค๋ ˆ๋“œ์—๋Š” 157 ๊ฐœ์˜ ๋Œ“๊ธ€ (ํ˜„์žฌ 158 ๊ฐœ)์ด ์žˆ์œผ๋ฉฐ, ๊ทธ์ค‘ ์ผ๋ถ€๋Š” ์›๋ณธ ๊ฒŒ์‹œ๋ฌผ์˜ ์ œ๋ชฉ์„ ์ง๊ฐ„์ ‘ ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค (Taking vector๋Š” ์‹ฌ๊ฐํ•˜๊ฒŒ ์ „์น˜). ๋‚ด ๊ฒŒ์‹œ๋ฌผ์€ ๊ธฐํ•˜ํ•™์  ๋Œ€์ˆ˜๋ฅผ ํ†ตํ•ด ํ…์„œ ์ˆ˜ํ•™์˜ ์ƒˆ๋กœ์šด ์‘์šฉ์œผ๋กœ ํ•  ์ˆ˜์žˆ๋Š” ์ผ์— ๋Œ€ํ•ด ๋” ๋†’์€ ๊ด€์ ์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ ์›๋ณธ ๊ฒŒ์‹œ๋ฌผ์˜ ์ œ๋ชฉ์„ ๊ฐ„์ ‘์ ์œผ๋กœ ๋‹ค๋ฃจ๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” Versor๊ฐ€ Julia์— ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๊ณ ์ฐจ์›์ ์ธ ํž˜์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด Julia์˜ ์ถ”๊ฐ€ ๋œ ์œ ์ตํ•œ ๊ธฐ๋Šฅ์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. YouTube ๋น„๋””์˜ค์˜ ์ œ๋ชฉ์€ "์ผ๋ฐ˜ ๊ณต๊ฐ„์˜ ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ : C ++ 11์„ ์‚ฌ์šฉํ•œ ์ปดํŒŒ์ผ ์‹œ๊ฐ„ ๊ธฐํ•˜ ๋Œ€์ˆ˜"์˜€์Šต๋‹ˆ๋‹ค. C ++ ๋Œ€์‹  Julia๊ฐ€ ๋  ์ˆ˜์—†๋Š” ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ์ €๋Š” ์ˆ˜ํ•™ ์ž๋‚˜ ์ปดํ“จํ„ฐ ๊ณผํ•™์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

@ esd100 ๊ธฐํ•˜ ๋Œ€์ˆ˜๋Š” ํฅ๋ฏธ๋กญ์ง€ ๋งŒ ์ด๋ฒˆ ํ˜ธ์—์„œ ๋‹ค๋ฃจ๋Š” ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ฃผ๋กœ ๊ด€์‹ฌ์„ ๊ฐ€์งˆ ๊ธฐํ•˜ํ•™์  ๋Œ€์ˆ˜๋Š” ์‹ค์ œ Clifford ๋Œ€์ˆ˜ Cl (R ^ n, I); ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ๋ณต์žกํ•œ ๋ฒกํ„ฐ Cl (C ^ n, I)์— ๋Œ€ํ•œ Clifford ๋Œ€์ˆ˜ ๋˜๋Š” ์ž„์˜์˜ ํ•„๋“œ ๋˜๋Š” ๋น„ ๊ตํ™˜ ๊ณ ๋ฆฌ Cl (F ^ n, I)์— ๋Œ€ํ•œ ๋Œ€์ˆ˜์™€ ๊ฐ™์ด ๊ธฐํ•˜ํ•™์  ๋Œ€์ˆ˜๊ฐ€ _ ์•„๋‹Œ _ ๋‹ค๋ฅธ Clifford ๋Œ€์ˆ˜์—๋„ ๊ด€์‹ฌ์ด์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. . ๋”์šฑ์ด ์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ ์ž์‹ ์„ ํด๋ฆฌํฌ๋“œ ๋Œ€์ˆ˜๋กœ ์ œํ•œํ•˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์ง€๋งŒ ์„ ํ˜• ๋Œ€์ˆ˜๊ฐ€ 2 ์ฐจ ํ˜•ํƒœ (๋‚ด์  ๊ณฑ)๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ •์˜๋˜์ง€ ์•Š๋Š”๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ํ…์„œ ๋Œ€์ˆ˜ ์„ค์ •์œผ๋กœ ์ผ๋ฐ˜ํ™”๋˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ณ ๋ คํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํ…์„œ ๋Œ€์ˆ˜ ์„ค์ •์—์„œ OP์˜ " v' is a no-op"์ œ์•ˆ ์€ ๋ฐ˜์ „ ๋ฐ˜ ์ž๋™ํ™”์— ์ผ๊ด€๋˜๊ฒŒ ์ผ๋ฐ˜ํ™”๋˜๊ธฐ ๋•Œ๋ฌธ์— ์™„๋ฒฝํ•˜๊ฒŒ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ํ…Œ์ด๋ธ”์—์žˆ๋Š” ์ ์–ด๋„ ์„ธ ๊ฐ€์ง€ ์ œ์•ˆ ์ค‘ ํ•˜๋‚˜ ์ผ๋ฟ์ž…๋‹ˆ๋‹ค. "v '๊ฐ€ ์ฝ” ๋ฒกํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š”"์ œ์•ˆ์ด ๋งค์šฐ ์ž์—ฐ์Šค๋Ÿฌ์šด ํ…์„œ ํ•ฉ์ฒด๋กœ ์ด์–ด์ง€๋Š” ์Œ๋Œ€ ์ˆ˜ ํ™•์žฅ ์„ ๊ณ ๋ คํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. "์ง„์งœ ๋ฒกํ„ฐ ์—†์Œ"์ œ์•ˆ์ด ์–ด๋–ป๊ฒŒ ํ…์„œ ๋Œ€์ˆ˜๋กœ ์ผ๋ฐ˜ํ™”๋˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

@jiahao ๋งค์šฐ ์œ ์ตํ•œ ๋‹ต๋ณ€์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ฃผ์ œ๋ฅผ ์–ด๋Š ์ •๋„ ์ˆ™๋‹ฌ ํ•œ ์‚ฌ๋žŒ์ด ๋น›์„ ๋น„์ถ”๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋” ๋‚˜์€ ์ดํ•ด๋ฅผ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ์ฃผ์ œ๋ฅผ ๋” ๋งŽ์ด ์‚ดํŽด๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. BLAS์— ๋Œ€ํ•ด ๋งค์šฐ ์ตœ์ ํ™” ๋œ ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š” ์ด์œ ๊ฐ€ ๊ถ๊ธˆํ•˜์ง€๋งŒ Clifford Algebra์™€ ๊ฐ™์€ ๋” ๋ณต์žกํ•œ ๋Œ€์ˆ˜์—๋Š” ๋งค์šฐ ์ตœ์ ํ™” ๋œ ์ฝ”๋“œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด ํ† ๋ก ์ด ์•„์ง ์ง„ํ–‰ ์ค‘์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๊ฐ€ Julia๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์žˆ์–ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ณ  ์„ฑ๊ฐ€์‹  ๋ถ€๋ถ„์ด๊ธฐ ๋•Œ๋ฌธ์— ์ œ ์˜๊ฒฌ์„ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์œ„ ๋‚ด์šฉ ์ค‘ ์ผ๋ถ€๋Š” ๋™์˜ํ•˜๊ณ  ์ผ๋ถ€๋Š” ๋™์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ๊นจ๋‹ฌ์•„์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  Julia ์‚ฌ์šฉ์ž๋Š” ์ด๋ฏธ Julia์—์„œ ๊ตฌํ˜„ ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋น ๋ฅธ ๋‹ค์ฐจ์› ๋ฐฐ์—ด (๋ฐ์ดํ„ฐ ์ €์žฅ ์šฉ)์„ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ / ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๋„ ์„ ํ˜• ๋Œ€์ˆ˜์— ๊ด€์‹ฌ์ด์žˆ์„ ๊ฒƒ์ด๋ฉฐ, ์•ž์„œ ์–ธ๊ธ‰ ํ•œ ๋ฐฐ์—ด์€ ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ์— ํฌํ•จ ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํŒจํ‚ค์ง•ํ•˜๋Š” ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋ช‡๋ช‡ ์‚ฌ์šฉ์ž๋Š” ์ผ๋ฐ˜ ํ…์„œ (๋‹ค ์„ ํ˜•) ๋Œ€์ˆ˜๋ฅผ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ด๋Ÿฌํ•œ "๋ฒ ์–ด"๋ฐฐ์—ด์„ ์„ ํ˜• ๋Œ€์ˆ˜์˜ ์ˆ˜ํ•™์  ๊ฐœ๋…์œผ๋กœ ํ™•์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ตฌ๋ฌธ์„ ์ผ๋ฐ˜ ์ˆ˜ํ•™์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์‚ฌ๋žŒ๋“ค์€ v ''! = v๋ฅผ ํŽธ์•ˆํ•˜๊ฒŒ ํ•  ๊ฒƒ์ธ๊ฐ€? ๊ธฐํƒ€ ๋“ฑ๋“ฑ

์ฒซ ๋ฒˆ์งธ๋Š” ๋ฐฐ์—ด์„ ๋” ๋‚˜์˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ์ง€ ์•Š๊ณ  ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Vector์— ์ถ”๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ Array์— ๋ถˆํ•„์š”ํ•œ ํ…œํ”Œ๋ฆฟ ์ธ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผํ•˜์ง€ ์•Š์„ ๋•Œ C / C ++๋งŒํผ ๋น ๋ฅด๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค (๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ํ•  ๋•Œ C / fortran๋งŒํผ ๋น ๋ฅด๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค).

์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ๊นจ๋‹ฌ์•„์•ผ ํ•  ๋‘ ๋ฒˆ์งธ ์‚ฌ์‹ค์€ ์™„์ „ํ•œ ๋‹ค์ฐจ์› ํ…์„œ ์ˆ˜์ถ•์—๋Š” ์ƒ๋‹นํ•œ ์–‘์˜ ์ถ”๊ฐ€ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ตœ๋Œ€ 2 ์ฐจ์› ํ…์„œ์˜ ๊ฒฝ์šฐ A_B'_C * D์™€ ๊ฐ™์€ ๊ณฑ์…ˆ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฐ˜๋ฉด ์ผ๋ฐ˜ ํ…์„œ์˜ ๊ฒฝ์šฐ ์ˆ˜์ถ•์„ ์ •์˜ํ•˜๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ๋” ์ž์—ฐ ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค (ํ…์„œ ๋„คํŠธ์›Œํฌ ๋‹ค์ด์–ด๊ทธ๋žจ ๋˜๋Š” ์ธ์ž ๊ทธ๋ž˜ํ”„-๊ฐ™์€ ์ผ์ด ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค) ๋‹ค์–‘ํ•œ ์ด๋ฆ„์œผ๋กœ). ๊ณ ์ฐจ์› ํ…์„œ์˜ ๊ฒฝ์šฐ ๋ฒ ์–ด ๋ฐฐ์—ด์„ ๊ฐ์‹ธ๊ณ  ๋ชจ๋“  ๊ฒƒ์„ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฒกํ„ฐ ๊ณต๊ฐ„ ๋“ฑ์œผ๋กœ ์žฅ์‹ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Jutho (๋ฐ ์•„๋งˆ๋„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค)๊ฐ€ ์ž‘์—…์ค‘์ธ ํŒจํ‚ค์ง€์™€ ๊ฐ™์€ ํŒจํ‚ค์ง€์—์„œ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 3 ์ฐจ์› ์ด์ƒ์˜ ํ…์„œ์—์„œ '์˜ ์˜๋ฏธ๋ฅผ ๊ณ ๋ คํ•  ๋•Œ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ˆœ์—ด์ด ์กด์žฌํ•˜๊ฑฐ๋‚˜ ์ „์šฉ ํ…์„œ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์•„๋ฌด๋„ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์—†์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์‚ฌ์šฉ์ž๋Š” ํ–‰๋ ฌ์„ ๊ณฑํ•˜๊ณ  ๋ฒกํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ํ–‰๋ ฌ์„ ์ „์น˜ํ•˜๋ ค๊ณ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋˜ํ•œ ๋‚ด๋ถ€ ์ œํ’ˆ๊ณผ ์™ธ๋ถ€ ์ œํ’ˆ์„ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ข‹๋“  ์‹ซ๋“  ์ด๋“ค์€ ์ด์ค‘ ๊ณต๊ฐ„๊ณผ ํ•จ๊ป˜ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์ด ์‹ค์ˆ˜์™€ ๋ณต์†Œ์ˆ˜์— ๋Œ€ํ•ด ๋ฌด์—‡์ธ์ง€ ์•Œ๊ณ  ์žˆ์œผ๋ฉฐ ๋ฏธ๋ฆฌ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋„ค, ์‹ค์ œ ์œ ํ•œ ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์ด์ค‘ ๊ณต๊ฐ„์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋˜‘๊ฐ™์€ ๋Š๋‚Œ์ด ๋“œ๋Š” ๊ฒƒ์€ ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ์ „์ฒด ๋ฌธ์ œ๋ฅผ ํ๋ฆฌ๊ฒŒํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๊ฐ€์žฅ ํฐ ๋ฌธ์ œ๋Š” ์ ์ ˆํ•œ ์ด์ค‘ ๋ฒกํ„ฐ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ ์—†์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ํŽœ๊ณผ ์ข…์ด์—์„œํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ค„๋ฆฌ์•„์—์„œ ๋ฐฉ์ •์‹์„ "์“ธ"์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค-ํฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค! ๋” ์ค‘์š”ํ•œ ๊ฒƒ์€ v ''= v๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งค์šฐ ์ง๊ด€์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์€ ๋‚ด๋ถ€ ๋˜๋Š” ์™ธ๋ถ€ ์ œํ’ˆ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ด์ค‘ ๋ฒกํ„ฐ๋ฅผ ์›ํ•˜๊ฑฐ๋‚˜ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์— *๋ฅผ ๋งŒ๋‚  ๋•Œ ์ˆ˜ํ–‰ ํ•  ์ž‘์—…์„ ์ปดํŒŒ์ผ๋Ÿฌ์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๊ฐ„๋‹จํ•œ ์žฅ์‹ ๋ž˜ํผ๋Š” ํ˜„๋ช…ํ•œ ํ•ด๊ฒฐ์ฑ…์ด๋ฉฐ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฒ„ ํ—ค๋“œ๊ฐ€ ์—†์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด ์ด์ค‘ ๋ฒกํ„ฐ / ์ฝ” ๋ฒกํ„ฐ๋Š” ์ธ๋ฑ์‹ฑ ๊ฐ€๋Šฅํ•˜๊ณ , ๋”ํ•˜๊ธฐ / ๋นผ๊ธฐ ๊ฐ€๋Šฅํ•˜๊ณ , ์Šค์นผ๋ผ๋กœ ๊ณฑํ•˜๊ณ , ๋ฒกํ„ฐ๋กœ ๊ณฑํ•˜๊ณ  (์Šค์นผ๋ผ ๋ฐ˜ํ™˜) ํ–‰๋ ฌ๋กœ ๊ณฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (์ฝ” ๋ฒกํ„ฐ ๋ฐ˜ํ™˜)-๊ทธ๊ฒŒ ๋‹ค์•ผ! ์†๋„ / ๋ฉ”๋ชจ๋ฆฌ ํ–ฅ์ƒ์„ ์œ„ํ•ด ๋‚ด์ , ์™ธ์ , ์ธ๋ฑ์‹ฑ ๋“ฑ์— ๋‚ด์žฅ ๋  ์ˆ˜์žˆ๋Š” ๋ณต์žกํ•œ ๋ฒกํ„ฐ์— ๋Œ€ํ•œ ๋ณต์žกํ•œ ํ™œ์šฉ๋„ ๋ช…์‹œ ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ํƒ€์ž… ์‹œ์Šคํ…œ์— ๋ณต์žก์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ๊ฑฑ์ •ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๊ณ ๋“ฑํ•™๊ต์™€ ๋Œ€ํ•™์—์„œ ์ˆ˜ํ•™์„ ๋ฐฐ์› ์„ ๋•Œ ์ˆ˜ํ•™์„ ์บก์Šํ™”ํ•˜๋Š” ๋ฐ ์ด๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์„ ํ˜• ๋Œ€์ˆ˜์˜ Dirac ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค) ๋“ฑ.

BTW์ด ๋ฌผ๊ฑด์ด Julia 0.4์—์„œ ๊ตฌํ˜„ ๋˜์—ˆ๋‹ค๋ฉด, ๋‚˜๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค! ๋‚˜๋Š” ์—ฌ์ „ํžˆ 0.3.4๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

@andyferris , ๋‚˜๋Š” ์ผ๋ฐ˜์  ์ œ์•ˆ ์€ ์•ฝ๊ฐ„ ์ˆ˜์ • ๋  ์ˆ˜ ์žˆ๊ณ  ์ž˜ ์ž‘๋™ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. M*v' ์˜ค๋ฅ˜ ๋Œ€์‹  ์ฝ” ๋ฒกํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  v*M ์˜ค๋ฅ˜ ๋Œ€์‹  ๋ฒกํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋„๋กํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ์ด๊ฒƒ์€ ๊ฐœ๋…์ ์œผ๋กœ M ๊ฐ€ ์น˜์ˆ˜๊ฐ€ ์œ„์•„๋ž˜์ธ์ง€์— ๋Œ€ํ•ด ๋ถˆ๊ฐ€์ง€๋ก  ์ ์ž…๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ์ œํ’ˆ์— ๋Œ€ํ•ด v'*M*w ๋˜๋Š” v*M*w' ๋ฅผ ์“ธ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋Œ์•„ ๋‹ค๋‹ˆ๋Š” ํ•œ ๊ฐ€์ง€ ์ƒ๊ฐ์€ row-major ๋ฐ col-major ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ณ  M.' ๋ฅผ ํ•˜๋‚˜์—์„œ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์œ ์‚ฌํ•˜๊ฒŒ v' ๋ฅผ v ์˜ row-major ๋ณ€ํ˜•์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@andyferris ์—๊ฒŒ +1. ๋˜ํ•œ ๋ฒกํ„ฐ, ํ–‰๋ ฌ ๋ฐ ๊ทธ ์ „์น˜์˜ ๊ณฑ์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ„๊ฒฐํ•œ ํ–‰๋ ฌ ๋Œ€์ˆ˜ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๊ฐ„๋‹จํ•œ ๋ž˜ํผ ์œ ํ˜• Transpose ๋ฐ ConjTranspose ๋ฅผ ์›ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. @StefanKarpinski ์ œ์•ˆ ์˜ ํฌ์ธํŠธ 2์™€ ๊ด€๋ จํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋ž˜ํผ๋ฅผ AbstractArray ๊ฐœ์ฒด์˜ ์ปจํ…Œ์ด๋„ˆ๋กœ ์ œํ•œํ•˜์ง€ ์•Š๊ณ  ์œ ํ˜•์„ AbstractArray ์œ ํ˜• ๊ณ„์ธต ์ž์ฒด์˜ ์ผ๋ถ€๋กœ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Transpose(x) ๋Š” ํ‘œํ˜„์‹์— x' ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์ƒ์„ฑ ๋œ ์œ ํ˜•์ด์–ด์•ผํ•˜๋ฉฐ Transpose ์— ๋””์ŠคํŒจ์น˜ํ•˜์—ฌ ๋‚˜๋จธ์ง€ ํ‘œํ˜„์‹์— ๋”ฐ๋ผ ํ‰๊ฐ€๋ฅผ ์—ฐ๊ธฐํ•˜๊ฑฐ๋‚˜ ์ง€์—ฐ ํ‰๊ฐ€๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. * ์‚ฌ๋ก€์˜ 99.9 %์—์„œ). ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ๋žŒ๋“ค์€ ํ–‰๋ ฌ ๋ถ„ํ•ด ๊ฐ์ฒด ๋˜๋Š” ์„ ํ˜• ์—ฐ์‚ฐ์ž์™€ ๊ฐ™์€ ์ •์˜๋ฅผ์œ„ํ•œ ๋‹ค๋ฅธ ์œ ํ˜•๊ณผ ๊ฐ™์ด AbstractArray ๊ณ„์ธต ๊ตฌ์กฐ์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹ ์ˆ˜๋„์žˆ๋Š” ์ƒˆ๋กœ์šด ์œ ํ˜•์— ๋Œ€ํ•ด์ด ๊ตฌ๋ฌธ์— ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ–‰๋ ฌ๊ณผ ๋ฒกํ„ฐ์˜ ํŠน์ • ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ M*v' ์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์‹ค์ œ๋กœ ๋ณผ ์ˆ˜๋Š” ์—†์ง€๋งŒ ๋ณธ์งˆ์ ์œผ๋กœ ๋ฐ˜๋Œ€ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ธฐ๋ณธ ๊ธฐ๋Œ€์น˜๋ฅผ ์ถฉ์กฑํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (์˜ˆ : Stefan์˜ ์ œ์•ˆ ๋์˜ ๊ทœ์น™ 2,4,5,6 ๋ฐ 8).

๋งˆ์ง€๋ง‰ ๋…ผ์˜์˜ ์ฃผ์š” ์š”์ ์€ ์•„๋งˆ๋„ ์Šฌ๋ผ์ด์‹ฑ๊ณผ์˜ ์ƒํ˜ธ ์ž‘์šฉ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ–‰๋ ฌ์˜ ํ–‰ ์กฐ๊ฐ์ด ์ž๋™์œผ๋กœ Transpose ์ด์–ด์•ผํ•ฉ๋‹ˆ๊นŒ? ์—ฌ๊ธฐ ๋‚ด ํˆฌํ‘œ๋Š” APL ์Šฌ๋ผ์ด์‹ฑ ๊ทœ์น™์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@Jutho , ๋™๊ธฐ๋Š” * ์—ฐ๊ด€์„ฑ โ€“ A*(v'w) ๋ฐ (A*v')*w ๋‘˜ ๋‹ค ์ž‘๋™ํ•˜๊ณ  ๊ธฐ๋ณธ ์š”์†Œ ์œ ํ˜•์˜ ๋ชจ๋“ˆ๋กœ ๋น„ ์—ฐ๊ด€์„ฑ (์˜ˆ : ๋ถ€๋™ ํฌ์ธํŠธ).

(A*v')*w ์—์„œ A*(v'*w) ์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•˜๋ ค๋ฉด A*v' ๊ฐ€ N=3 ๋ฐฐ์—ด์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ๋‹น์‹ ์ด ์—ผ๋‘์— ๋‘์—ˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๊นŒ? ๋‚˜๋Š” ์ด๊ฒƒ์„ ์™„์ „ํžˆ ๋†“์ณค๋‹ค.

์ข‹์•„์š”, ๋งค์šฐ ํฅ๋ฏธ ๋กญ์Šต๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€ ์˜๊ฒฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋จผ์ € ํ•ต์‹ฌ ์‚ฌ์šฉ์ž๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ Array{T,n} ๋ฅผ n ์ฐจ์› ์ €์žฅ์†Œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ฃผ์š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์„ ํ˜• ๋Œ€์ˆ˜ํ•™์— ๋Œ€ํ•ด ์•„๋ฌด ์ƒ๊ฐ์ด ์—†์ง€๋งŒ, ์ค„๋ฆฌ์•„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ  ์‹ถ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋กœ ์ดํ•ดํ•œ๋‹ค. ์ด ๋•Œ๋ฌธ์— ์–ด๋–ค ์ƒํ™ฉ์—์„œ๋„ ๋ฐฐ์—ด ์Šฌ๋ผ์ด์Šค๊ฐ€ ๊ณต๋™ ๋ฒกํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค! ์ด๊ฒƒ์€ ๋ฒกํ„ฐ ๊ณต๊ฐ„๊ณผ ๊ทธ ์ด์ค‘ (์˜ˆ : ์ˆซ์ž ๋ฐ์ดํ„ฐ ๋˜๋Š” "ํ•„๋“œ")์„ ์ •์˜ ํ•  ์ˆ˜์žˆ๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ ์œ ํ˜• T ์—๋งŒ ์ ์šฉ๋˜๋Š” ์—„๊ฒฉํ•œ ์„ ํ˜• ๋Œ€์ˆ˜ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

APL ์Šฌ๋ผ์ด์‹ฑ์œผ๋กœ ์–ด๋Š ์ชฝ์ด๋“  ๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถฉ๋ถ„ํžˆ ์ง๊ด€์  ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์œ ํ˜•์ด ์•ˆ์ •์ ์ด๋ฉฐ ๋†€๋ผ์šด ์ผ์€ ์—†์Šต๋‹ˆ๋‹ค. ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ์ž์ฒด์ ์œผ๋กœ ์ผ๊ด€์„ฑ์žˆ๊ฒŒ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์ด ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ ํ•  ํ•„์š”๋Š” ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ... ์ข‹์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค (๋ธŒ๋ ˆ์ดํ‚น ๋ณ€๊ฒฝ ์ผ ์ˆ˜ ์žˆ์Œ). M[1,:] ๊ฐ€ 1xn ํฌ๊ธฐ์ด๊ณ  M[:,1] ๊ฐ€ n (nx1์ด ์•„๋‹˜) ํฌ๊ธฐ๋ผ๋Š” ๊ฒƒ์ด ๋ถˆ์•ˆํ•ฉ๋‹ˆ๋‹ค ... ๋„ˆ๋ฌด ๋น„๋Œ€์นญ ์ธ ๊ฒƒ ๊ฐ™์ง€๋งŒ ... ๋ฉ”๋ชจ๋ฆฌ์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ..์ด ๋ณ€๊ฒฝ์€ ์ถ”์ƒ์  ์ธ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ์กฐ์ž‘์— ์ ํ•ฉํ•œ ๊ฒฝ์šฐ์—๋งŒ ์ด๋ฃจ์–ด์ ธ์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ์ด๋Ÿฌํ•œ ๋ณ€ํ™”๋Š” ์„ ํ˜• ๋Œ€์ˆ˜ ํ† ๋ก ๊ณผ ์ง๊ตํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ APL ์Šฌ๋ผ์ด์‹ฑ ๊ทœ์น™์„ ๊ตฌํ˜„ ํ•˜์ง€ ์•Š๋”๋ผ๋„ ์˜๋ฏธ์žˆ๋Š” ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์›ํ•˜๋Š” ๊ฒฝ์šฐ i ์˜ ์ผ ์—ด ๋ฒกํ„ฐ M ์ „ํ™” colvec(M,i) ๋‹น์‹ ์€ ์›ํ•˜๋Š” ๊ฒฝ์šฐ i ์˜ ๋ฒˆ์งธ ํ–‰์˜ ๊ณต๋™ ๋ฒกํ„ฐ M ์ „ํ™”๋ฅผ rowvec(M,i) i ๊ฐ€ ํŠœํ”Œ์ด๋‚˜ ๋ฒกํ„ฐ๋ผ๋ฉด ํŠœํ”Œ์ด๋‚˜ ๋ฒกํ„ฐ ๋˜๋Š” (๊ณต) ๋ฒกํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๋ณ‘๋ ฌํ™”์— ๋Œ€ํ•œ ์ถ”๋ก ์— ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?). ํ–‰๋ ฌ์„ ์„ ํ˜ธํ•˜๋Š” ๊ฒฝ์šฐ ์ผ๋ฐ˜ ์ƒ‰์ธ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. APL ์Šฌ๋ผ์ด์‹ฑ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ * ๊ธฐํ˜ธ๋กœ ํ–‰ ๋ฐ ์—ด ์กฐ๊ฐ์˜ ๋™์ž‘์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฐ ๋™์ผํ•œ ๋ฐฉ๋ฒ•์ด ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ( rowvec ๋ณต์žกํ•œ ํ™œ์šฉ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ณ ๋ คํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค).

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

* ๊ฒฝ์šฐ ์ค„๋ฆฌ์•„์˜ ํ–‰๋ ฌ / ๋ฒกํ„ฐ ๋Œ€์ˆ˜๊ฐ€ ์ž‘๋™ํ•ด์•ผํ•˜๋ฏ€๋กœ ๊ณฑ์…ˆ ์—ฐ์‚ฐ์ž๋กœ์„œ์˜ ์ˆ˜ํ•™์ฒ˜๋Ÿผ ๋ณด์ด๊ณ  ๋Š๊ปด์ง€๊ณ  ๋‘ ๋ฒกํ„ฐ, ๋‘ ๊ฐœ์˜ ์ฝ” ๋ฒกํ„ฐ, ๋‘ ๊ฐœ์˜ ํ–‰๋ ฌ ๋“ฑ ์‚ฌ์ด ์˜ ํ…์„œ ๊ณฑ ์—ฐ์‚ฐ์ž๋ฅผ M*v' ํ—ˆ์šฉํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๊ณฑํ•˜๊ธฐ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์˜๋ฏธ๊ฐ€ ์ž˜๋ชป ์ •์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค! ํ–‰๋ ฌ ๊ณฑ์…ˆ์ด ๊ตํ™˜ ์ ์ด ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— w*M*v' == v'*M*w ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ M*v'*v ๊ฒฝ์šฐ * ์—ฐ๊ด€์„ฑ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ๊ณฑ์…ˆ ๊ธฐํ˜ธ๊ฐ€ ํ•„์š”ํ•œ innerproduct(outerproduct(M,v'),v) ๋กœ ํ•ด์„ํ•˜๊ฑฐ๋‚˜ ์Šค์นผ๋ผ ๊ณฑ์…ˆ M * innerproduct(v',v) ๋กœ ํ•ด์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋‘˜ ๋‹ค * ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด _ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ธŒ๋ผ์ผ€ํŒ…์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์˜๋ฏธ์žˆ๋Š” ์—ฐ์‚ฐ ์ˆœ์„œ๋ฅผ ๊ฒ€์ƒ‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ๋น ๋ฅธ ํ‰๊ฐ€ ์ˆœ์„œ๋Š” ๋‚ด๊ฐ€ ์œ ์ผํ•œ ์œ ํšจํ•œ ํ‰๊ฐ€ ์ˆœ์„œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด๊ธฐ๋„ํ•ฉ๋‹ˆ๋‹ค).

๋ฒกํ„ฐ, ์ฝ” ๋ฒกํ„ฐ ๋ฐ ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ‘œ์ค€ ์ˆ˜ํ•™๊ณผ ์ผ์น˜ํ•˜๋Š” ๋Œ€์ˆ˜ ์‹œ์Šคํ…œ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒกํ„ฐ ๋˜๋Š” ๋‘ ๊ฐœ์˜ ์ฝ” ๋ฒกํ„ฐ ๋˜๋Š” ๋‘ ๊ฐœ์˜ ํ–‰๋ ฌ ์‚ฌ์ด์—์„œ ์™ธ์ ์„ ์ˆ˜ํ–‰ ํ•  ๋•Œ๋งˆ๋‹ค ๋ณธ์งˆ์ ์œผ๋กœ ๋‹ค์ค‘ ์„ ํ˜• ๋Œ€์ˆ˜ ๋˜๋Š” ์ผ๋ฐ˜ ํ…์„œ ๋Œ€์ˆ˜๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์ƒˆ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ kron(M,N) ์ฒ˜๋Ÿผ ๊ณฑํ•˜๋Š” ํ–‰๋ ฌ๊ณผ ๋ฒกํ„ฐ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ์™„์ „ํ•œ ๋‹ค์ค‘ ์„ ํ˜• ๋Œ€์ˆ˜ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์š”๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ... ์›๋ž˜ ์งˆ๋ฌธ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค (14 ๊ฐœ์›” ์ „, btw ...)

์š”์•ฝํ•˜์ž๋ฉด, ์—ฌ๊ธฐ์—์„œ ๊ฑฐ์˜ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋„ค ๊ฐ€์ง€ ์ผ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. APL ์Šฌ๋ผ์ด์‹ฑ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ ์ž„์˜ ๋ฐ์ดํ„ฐ์˜ Array ์Šฌ๋ผ์ด์‹ฑ์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.
  2. ์ค„๋ฆฌ์•„์˜ ์„ ํ˜• ๋Œ€์ˆ˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ฐ„๋‹จํ•œ ๊ฐœ๋…์„ ์ถ”๊ฐ€ํ•˜์—ฌ๋ณด๋‹ค ์ง๊ด€์ ์ด๊ณ  ์ˆ˜ํ•™๊ณผ ์™„์ „ํžˆ ์ผ์น˜ํ•˜๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ฝ” ๋ฒกํ„ฐ ๋ฐ ํ–‰๋ ฌ์—์„œ ๋ฒกํ„ฐ์™€ ์ฝ” ๋ฒกํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•, ์ฝ” ๋ฒกํ„ฐ, ํ–‰๋ ฌ ๋“ฑ ๊ฐ„์˜ ์—ฐ์‚ฐ. ๋งŽ์€ ์‚ฌ์šฉ์ž๋Š” ์ฝ” ๋ฒกํ„ฐ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์กฐ์ฐจ ์•Œ์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 1xn ๋ฐ nx1 ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜ˆ์ƒ๋Œ€๋กœ ๊ณ„์† ์ž‘๋™ํ•˜๋ฉฐ ๋ฒกํ„ฐ๋Š” ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
  3. ์†๋„๋ฅผ ์œ„ํ•ด ์ฝ” ๋ฒกํ„ฐ์™€ ๋งค์šฐ ์œ ์‚ฌํ•˜์ง€๋งŒ ํ–‰๋ ฌ์— ๋Œ€ํ•ด์„œ๋„ ๋žฉํ•‘ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ transpose , conj ๋“ฑ์— ๋Œ€ํ•œ ์ง€์—ฐ ํ‰๊ฐ€๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ฒ”์šฉ ํ…์„œ ํŒจํ‚ค์ง€๋ฅผ ๊ฐœ๋ฐœํ•˜๊ณ  ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์ฒซ ๋ฒˆ์งธ ๋งŒ์ด ๋ธŒ๋ ˆ์ดํ‚น ์ฒด์ธ์ง€์ผ๊นŒ์š”? ๋‚˜๋จธ์ง€๋Š” ํ˜„์žฌ ๊ธฐ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ๋“ค์€ ๋ชจ๋‘ ์–ด๋Š ์ •๋„ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌํ˜„ ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์•„๋งˆ๋„ ๋ชจ๋‘ ํ•  ๊ฐ€์น˜๊ฐ€์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. (์ถ”์‹  : APL ์Šฌ๋ผ์ด์‹ฑ์„ ์›ํ•˜๋ฉด Julia๊ฐ€ ๋„ˆ๋ฌด "์ปค์ง€๊ณ "๋„ˆ๋ฌด ๋งŽ์€ ํŒจํ‚ค์ง€๋ฅผ ๊นจ๊ธฐ ์ „์— ๊ณง ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.)

์˜ˆ, ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. M*v' ํ—ˆ์šฉ์— ๋Œ€ํ•œ ์ œ ์ œ์•ˆ์€ ์ œํ’ˆ์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋ชจ์–‘์„ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๊ฐ€ ์ด๊ฒƒ์„ ๋ณ€๊ฒฝํ•œ๋‹ค๋ฉด ๋‚˜์˜ ์›๋ž˜ ์ œ์•ˆ์ด ๊ฐˆ ๊ธธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” APL ์Šฌ๋ผ์ด์‹ฑ ๋™์ž‘๊ณผ์˜ ์ตœ์ƒ์˜ ์กฐํ•ฉ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  APL ์Šฌ๋ผ์ด์‹ฑ ๋™์ž‘์„ ์›ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋Š” ๋” ๋†’์€ ์ˆ˜์ค€์˜ ๊ณ ๋ ค ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ๋ง์”€ ๋“œ๋ฆฌ๊ณ  ์‹ถ์€๋ฐ ์†Œ๊ธˆ ํ•œ ์•Œ๊ณผ ํ•จ๊ป˜ ๊ฐ€์ ธ ๊ฐ€์„ธ์š”. ๊ทธ๋“ค์€ ๋‹จ์ง€ ์˜๊ฒฌ ์ผ ๋ฟ์ด๊ณ  ๋‚˜๋Š” ๋‚ด ๊ฒƒ์ด ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ @andyferris ๋Œ“๊ธ€์„ ์ฝ์œผ ๊ฐ๋™ ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค . ์„ ํ˜• ๋Œ€์ˆ˜์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด์ง€๋งŒ Julia์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋ ค๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ์—๊ฒŒ๋Š” ์ดํ•ด๊ฐ€๋˜์–ด์•ผํ•œ๋‹ค๋Š” ์˜๊ฒฌ์— ๋™์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ˆ˜ํ•™ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ์ฒญ์ค‘์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์ด๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜์žˆ๋Š” ๋งŽ์€ ์–ธ์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. Julia๋Š” ์ปดํ“จํŒ… ์–ธ์–ด์ด๋ฉฐ ์ •๊ตํ•œ ๊ธฐ์ˆ  ์ปดํ“จํŒ…์„ ํ—ˆ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@ esd100 ์‚ฌ์‹ค, ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ƒ๊ฐํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ Julia์™€ ํ•จ๊ป˜ ์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ _ ์š•์‹ฌ์Ÿ์ด๊ฐ€๋˜๊ณ  ์‹ถ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค .... ๋งŽ์€ ๋ชฉ์ ์„ ์ถฉ์กฑ์‹œํ‚ค๊ณ  ๋งŽ์€ ์ผ์— ๋›ฐ์–ด ๋“ค๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฐ์—๋Š” ์ง„์ •ํ•œ ๊ณผํ•™์  ์ด์œ ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์›ํ•˜๋Š” Julia ์‚ฌ์šฉ์ž ์ธ ํ˜„์žฌ ๋˜๋Š” ์ „ ๊ณผํ•™์ž๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜์˜ ์ด์ „ ์š”์ ์€ ์šฐ๋ฆฌ๊ฐ€ Array ๋Š๋ฆฌ๊ฒŒ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์กฐ์˜ฎ๊น€ / ํ™œ์šฉ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•  ์ถ”๊ฐ€ ํ•„๋“œ๋ฅผ ์ œ๊ณตํ•จ์œผ๋กœ์จ ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

APL ์Šฌ๋ผ์ด์‹ฑ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ ํ–‰ ๋˜๋Š” ์—ด ์Šฌ๋ผ์ด์Šค๋Š” ๋™์ผํ•œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์งˆ๋ฌธ์€ : APL ์Šฌ๋ผ์ด์‹ฑ์—†์ด M[1,:] ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์Œ, M[1,:,:,:,:] ์ด Array{T,n} M[1,:] ๋ฐ˜ํ™˜ํ•˜๋ฉด covector{T} ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋ชจ๋“  ์‚ฌ๋žŒ์ด ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. M = zeros(3,3,3) ํ•˜๊ณ  ํ˜„์žฌ 1x9 ํ–‰๋ ฌ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” M[1,:] ํ˜ธ์ถœํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”? ์ด๊ฒƒ๋„ ์ฝ” ๋ฒกํ„ฐ๋กœ ๋งŒ๋“ค์–ด์•ผํ•ฉ๋‹ˆ๊นŒ? M ์ด Array{String,3} ์ด๋ฉด ์–ด๋–ป๊ฒŒ๋ฉ๋‹ˆ๊นŒ?

๋‚˜์—๊ฒŒ ์ด๊ฒƒ์€ ๋งค์šฐ ๋†€๋ž๊ณ  ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฏธ๋ž˜์— ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ APL ์Šฌ๋ผ์ด์‹ฑ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„ ํ˜• ๋Œ€์ˆ˜ ๋ชฉ์ ์œผ๋กœ rowvec(M,i) ๋ฐ colvec(M,i) ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ ํ•  ๊ฒƒ์„ ์ œ์•ˆํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์ด์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€๋งŒ ์ ์–ด๋„ ์„ ํ˜• ๋Œ€์ˆ˜ ๋ชฉ์ ์œผ๋กœ ๋ฌด์—‡์„ ๋ฐ˜ํ™˜ํ•ด์•ผํ•˜๋Š”์ง€๋Š” ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ œ๋„ค๋ฆญ ๋ฐฐ์—ด์— ๋Œ€ํ•œ ์ข‹์€ ์†์„ฑ๊ณผ ์„ ํ˜• ๋Œ€์ˆ˜์— ๋Œ€ํ•œ ์ข‹์€ ์†์„ฑ (์ฝ” ๋ฒกํ„ฐ ์œ ํ˜•๊ณผ ํ•จ๊ป˜)์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜์žˆ๋Š” ์œ ์ผํ•œ ๊ฒƒ์ด์—ˆ์ง€๋งŒ ๋‹ค์ค‘ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ์ˆ˜์šฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ–‰๋ ฌ์—์„œ ์ฝ” ๋ฒกํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๊ธฐ์œ„ํ•œ ๋” ์ข‹์€ ํ‘œ๊ธฐ๋ฒ•์„ ๊ฐ€์ง„ ์‚ฌ๋žŒ์ด ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!

@ esd100 : ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” Julia๊ฐ€ ๋””์ž์ธ ํ•œ ์ฒญ์ค‘์ด๋ผ๊ณ  ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ๊ณผํ•™ ์ปดํ“จํŒ…์€ Julias์˜ ๊ฐ•์ ์ด์ง€๋งŒ ๋ฒ”์šฉ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์‚ฌ์šฉํ•˜๋Š” Julia ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

ํ…์„œ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ปจํ…Œ์ด๋„ˆ ์š”๊ตฌ ์‚ฌํ•ญ์—์„œ ๋ถ„๋ฆฌ ํ•ด์•ผ ํ•œ๋‹ค๋Š”

์ „์ฒด ์Šค๋ ˆ๋“œ๋ฅผ ์ฝ์ง€ ์•Š๊ณ  ๋‚ด ๊ฐœ์ธ์ ์ธ ๋ฌธ์ œ๋Š” 3D ๋ฐฐ์—ด A (์˜ˆ : ๋‹จ์ธต ์ดฌ์˜ ๋ฐ์ดํ„ฐ)๊ฐ€ ์žˆ๊ณ 

imagesc( data[1,:,:] )

์ด๊ฒƒ์€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. IMHO data[1,:,:] , data[:,1,:] ๋ฐ data[:,:,1] ๋Š” 2D ๋ฐฐ์—ด (๋˜๋Š” ํ•˜์œ„ ๋ฐฐ์—ด)์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ์ด ๋ฌธ์ œ๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์ž์ฒด ์ •์˜ ๋œ squeeze ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ํ–‰๋™์—์„œ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ๋‹ค๋Š” ์ ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋‚ด ์˜๊ฒฌ ์ผ ๋ฟ์ด๋ฉฐ ๋งค์šฐ ์ค‘์š”ํ•˜์ง€ ์•Š์€ ์˜๊ฒฌ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐœ๋ฐœ ๋  ๋•Œ ๊ทธ๊ฒƒ์„ ์•ˆ๋‚ดํ•˜๋Š” ์ผ๋ จ์˜ ๋””์ž์ธ ์›์น™์„ ๊ฐ€์ ธ์•ผํ•œ๋‹ค๊ณ  ๋Š๋‚๋‹ˆ๋‹ค. ๊ฑด์ถ•์—…์ž๋Š” ๊ทธ ๋ชฉ์ ๊ณผ ์ •์ฒด์„ฑ์— ๋Œ€ํ•ด ๋ช…ํ™•ํ•˜๊ณ  ํ†ต์ผ ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋น ๋ฅด๊ณ  ์ง๊ด€์ ์ด๋ฉฐ ์ •๊ตํ•œ ๊ธฐ์ˆ  ์ปดํ“จํŒ… ํ”Œ๋žซํผ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๊ณ  ๊ทธ๊ฒƒ์ด Julia์˜ ๊ฐ•์ ์ด๋ผ๋ฉด ๊ทธ๊ฒƒ์— ์ถฉ์‹คํ•˜์‹ญ์‹œ์˜ค. ๋ชฉ์ ์ด ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์ฒญ์ค‘์—๊ฒŒ ์ ํ•ฉํ•˜๋„๋กํ•˜์—ฌ ํ˜ผํ•ฉ ์‹ ํ˜ธ๋ฅผ ๋ณด๋‚ด์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์š”์ ์€ ์ˆœ์ „ํžˆ ๊ณผํ•™์ ์ด๊ฑฐ๋‚˜ ์ˆ˜ํ•™์  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฝ์šฐ์—๋„ ๋ช‡ ๊ฐ€์ง€ ์ƒ์ถฉ๋˜๋Š” ํ•ด์„์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ‘œํ˜„ํ•  ์ˆ˜์žˆ๋Š” ์—ฌ๋Ÿฌ ์ˆ˜ํ•™์  ๊ฐ์ฒด๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋„ˆ๋ฌด ๊ตฌ์ฒด์ ์ธ ์„ ํƒ์„ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

ํŠน์ • ๊ทœ์น™ ์ง‘ํ•ฉ์— ๋”ฐ๋ผ ํŠน์ • ๋ถ„์•ผ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด ์ „์šฉ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@jutho ๋‚ด ์ง๊ฐ์€ ๋‹น์‹ ์ด ์˜ณ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ํŒจํ‚ค์ง€๊ฐ€ "๋” ๋‚ซ๋‹ค"๊ณ  ์–ด๋–ค ๋Œ€์•ˆ๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ ๋‹น์‹ ์˜ ๊ฒฐ๋ก ์˜ ๊ทผ๊ฑฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์•„์ฃผ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ Julia ์‚ฌ์šฉ์ž์—๊ฒŒ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์€ Base์— ์†ํ•ฉ๋‹ˆ๋‹ค. ๋ณด๋‹ค ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ์€ ํŒจํ‚ค์ง€์— ์†ํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์—ฌ๊ธฐ์— ์„ ์„ ๊ทธ๋ฆฌ๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ ์‰ฌ์šด ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ๊ฐ€์ ธ ์˜ค๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์ด๊ฒƒ์„ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Base์— ํƒ‘์žฌ ๋œ ๋‹ค์–‘ํ•œ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์ด ํŒจํ‚ค์ง€๋กœ ์ฒ˜์Œ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

@ esd100 , ๊ท€ํ•˜์˜ ์งˆ๋ฌธ์„ ์™„์ „ํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ๊ณผํ•™ ์–ธ์–ด๊ฐ€ ์ œ๊ณตํ•ด์•ผํ•˜๋Š” ๊ฒƒ์€ ๊ณผํ•™์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ „ํ˜•์ ์ธ ๊ฐ์ฒด๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ๊ณ„์‚ฐํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์™€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํŠน์ • ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ๋‹ค๋ฅธ ์ˆ˜ํ•™์  ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋•Œ๋กœ๋Š” ๋™์ผํ•œ ์œ ํ˜•์˜ ๊ฐ์ฒด์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ํ‘œํ˜„์ด ํŽธ๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ณ ์ • ๋œ ์ˆ˜ํ•™์  ๊ตฌ์กฐ๋ฅผ ๋ฐ์ดํ„ฐ ์œ ํ˜•์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์€ ์ผ๋ถ€ ๋ถ„์•ผ์—์„œ๋Š” ๋„ˆ๋ฌด ์ œํ•œ์ ์ผ ์ˆ˜ ์žˆ๊ณ  ๋‹ค๋ฅธ ๋ถ„์•ผ์—์„œ๋Š” ๋„ˆ๋ฌด ๋ณต์žก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์€ Julia ๊ธฐ์ง€์—์„œ ์ถ”๊ตฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ํ•œ ๋ถ„์•ผ์˜ ์š”๊ตฌ๋ฅผ ์ถฉ์กฑ์‹œํ‚ค๋ ค๋Š” ํŠน์ • ํŒจํ‚ค์ง€์— ์˜ํ•ด ์ถ”๊ตฌ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋…ผ์˜์™€ ๊ด€๋ จํ•˜์—ฌ ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ๋กœ ์ž‘์—…ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ๋žŒ์€ ๋ฒกํ„ฐ๋ฅผ ์ „์น˜ํ•˜๊ณ  v ^ T * w = ์Šค์นผ๋ผ๋ฅผ ๊ฐ€์งˆ ๊ฐ€๋Šฅ์„ฑ์„ ๊ธฐ๋Œ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Š” ์•„๋งˆ๋„ ๋ถ„์•ผ / ๋ถ„์•ผ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ„์˜ ๊ฒŒ์‹œ๋ฌผ์—์„œ v ^ T๊ฐ€ ์‹ค์ œ ์ฝ” ๋ฒกํ„ฐ๊ฐ€ ์•„๋‹ ์ˆ˜์žˆ๋Š” ์˜ˆ๋ฅผ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

2015 ๋…„ 1 ์›” 11 ์ผ 18:10์— esd100 [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

@jutho https://github.com/jutho ๋‚ด ์ง๊ฐ์€ ๋‹น์‹ ์ด ์˜ณ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ํŒจํ‚ค์ง€๊ฐ€ "๋” ๋‚ซ๋‹ค"๊ณ  ์–ด๋–ค ๋Œ€์•ˆ๊ณผ ๋น„๊ตํ•  ๋•Œ ๋‹น์‹ ์˜ ๊ฒฐ๋ก ์˜ ๊ทผ๊ฑฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub https://github.com/JuliaLang/julia/issues/4774#issuecomment -69501771์—์„œ

์ด๊ฒƒ์€ ์•„์ฃผ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ Julia ์‚ฌ์šฉ์ž์—๊ฒŒ ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์€ Base์— ์†ํ•ฉ๋‹ˆ๋‹ค. ๋ณด๋‹ค ํŠน๋ณ„ํ•œ ๊ธฐ๋Šฅ์€ ํŒจํ‚ค์ง€์— ์†ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Base์—๋Š” Bessel ํ•จ์ˆ˜๊ฐ€ ์žˆ์œผ๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ Julia ์‚ฌ์šฉ์ž์—๊ฒŒ ์ค‘์š” ํ•  ๊ฐ€๋Šฅ์„ฑ์€ ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์ด Base์—์žˆ์„ ์ˆ˜์žˆ๋Š” ์ด์œ ๋Š” Bessel ํ•จ์ˆ˜๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋Œ€ํ•ด ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณดํŽธ์  ์ธ ํ‘œ์ค€์ด ์žˆ๊ณ , ๋ˆ„๊ตฌ๋„์ด ์ด๋ฆ„์„ ๋‹ค๋ฅธ ๊ฒƒ์— ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์‹ ์ค‘ํ•œ ์ด๋ฆ„ ์ง€์ • ๊ทœ์น™์„ ํ†ตํ•ด Mathematica๋Š” ํ•ต์‹ฌ ์–ธ์–ด์— 4000 ๊ฐœ ์ด์ƒ์˜ ํ•จ์ˆ˜๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ํŒจํ‚ค์ง€๋ฅผ๋กœ๋“œ ํ•  ํ•„์š”๊ฐ€ ๊ฑฐ์˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด ๋งค์šฐ ํŽธ๋ฆฌํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์กฐ์ ์œผ๋กœ, ๋‚ด๊ฐ€ Python / Sage๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ํ•˜๋‚˜์˜ ํŒŒ์ผ / ๋…ธํŠธ๋ถ์ด ์ƒ๋‹จ์— 200 ๊ฐœ์˜ ํ•จ์ˆ˜๋ฅผ ๋ช…์‹œ ์ ์œผ๋กœ ๊ฐ€์ ธ ์˜ค๋Š” ๊ฒƒ์€ ๋“œ๋ฌธ ์ผ์ด ์•„๋‹™๋‹ˆ๋‹ค (์ถ”์  ๋ถˆ๊ฐ€๋Šฅํ•œ "from ___ import *"๊ตฌ๋ฌธ์„ ํ”ผํ•จ). ๋‚ด์žฅ๋˜์ง€ ์•Š์€ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ๋งˆ๋‹ค ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ์•ผํ•ฉ๋‹ˆ๋‹ค.

(1) ํ•ด๋‹น ํŒŒ์ผ์—์„œ ์ด๋ฏธ ์‚ฌ์šฉํ–ˆ๋Š”์ง€ ๊ธฐ์–ตํ•˜๊ฑฐ๋‚˜ ํ…์ŠคํŠธ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค (์ด๋ฆ„์ด ๋‹ค๋ฅธ ํ•ญ๋ชฉ์˜ ํ•˜์œ„ ๋ฌธ์ž์—ด ์ธ ๊ฒฝ์šฐ ์ „์ฒด ๋‹จ์–ด๋กœ ์ œํ•œ).
(2) ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜ : (a) ์ฆ‰์‹œ ์ˆ˜์ž…ํ’ˆ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋‚ด ์ƒ๊ฐ์„ ์žƒ๊ณ  ๋‹ค์‹œ ์ฐพ๋Š”๋‹ค. ๋˜๋Š” (b) ๋‚ด๊ฐ€ํ•˜๋˜ ์ผ์„ ํ•œ ํ›„์— ๊ฐ€์ ธ ์˜ค๊ธฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•˜๊ณ  ๋‹ค๋ฅธ ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋ณด๊ด€ํ•˜์‹ญ์‹œ์˜ค.
(3) ๋œ ์ผ๋ฐ˜์ ์ธ ๊ธฐ๋Šฅ์˜ ๊ฒฝ์šฐ ์–ด๋–ค ํŒจํ‚ค์ง€์— ๋“ค์–ด ์žˆ๋Š”์ง€ ์ฐพ์•„์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์งœ์ฆ๋‚˜๊ณ  ์‡ ์•ฝํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ €๋Š” Bessel ํ•จ์ˆ˜์™€ ๊ฐ™์ด ํ‘œ์ค€์œผ๋กœ ๊ฐ„์ฃผ๋˜๋Š” ๋ชจ๋“  ๊ฒƒ (๋”ฐ๋ผ์„œ ์ด๋ฆ„ ์ถฉ๋Œ์ด๋‚˜ ํ˜ผ๋™์„ ์ผ์œผํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค)์€ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด Base์— ์žˆ์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ์„ ํ˜• ๋Œ€์ˆ˜.


๋‹ค์‹œ ์ฃผ์ œ๋กœ ๋Œ์•„๊ฐ€์„œ, ์˜๋ฏธ ๋ก ์ ์œผ๋กœ ๋ฒ ์–ด ์ปจํ…Œ์ด๋„ˆ ( Base.AbstractArray ์—์„œ ๊ตฌํ˜„ ๋จ)๋กœ์„œ์˜ ๋ฐฐ์—ด์—์„œ up / down ์‹œ๋งจํ‹ฑ์ด์žˆ๋Š” Cartesian ํ…์„œ ๊ฐ์ฒด (my์—์„œ ์„ค๋ช…ํ•œ๋Œ€๋กœ)์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ๊ณ„์ธต์˜ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. AbstractTensorArray ์ œ์•ˆ , ๋ฒกํ„ฐ ๊ณต๊ฐ„ ( @Jutho ์˜ TensorToolbox ์—์„œ์™€ ๊ฐ™์ด)์— ๋งคํ•‘ ๋œ ์ธ๋ฑ์Šค๊ฐ€์žˆ๋Š”๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ํ…์„œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ผ๋ฐ˜์„ฑ ์ฆ๊ฐ€ ๋ฐ ์ตœ์ ํ™” ์ž ์žฌ๋ ฅ ๊ฐ์†Œ.

์‚ฌ์šฉ์ž๊ฐ€ ์ด๋Ÿฌํ•œ ๊ณ„์ธต๊ฐ„์— ์‰ฝ๊ฒŒ ์ „ํ™˜ ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์‹œ์ž‘ํ•  ๋•Œ ์‹ค์ œ๋กœ ํ•„์š”ํ•œ ์ผ๋ฐ˜์„ฑ ์ˆ˜์ค€์„ _ ๋ชจ๋ฅผ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์˜ˆ๋กœ์„œ @Jutho ๋Š” @jdbates ์˜ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ์˜ˆ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ด๋ฏธ์ง€ ์ขŒํ‘œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์ƒ‰์ƒ ๊ณต๊ฐ„์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ์ธ๋ฑ์Šค ํ•˜์œ„ ์ง‘ํ•ฉ์„ ๋ณ„๊ฐœ์˜ ๊ธฐํ•˜ํ•™์— ์—ฐ๊ฒฐํ•˜๊ธฐ๋ฅผ ์›ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ง€์ ํ–ˆ์Šต๋‹ˆ๋‹ค . ๊ทธ๋Ÿฌ๋‚˜ ๊ธฐํ•˜ํ•™์ ์œผ๋กœ ์ด๋“ค ์ค‘ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค๋ฉด ๊ฐ๊ฐ ๊ณ ์œ  ํ•œ ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š”๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ํ‘œํ˜„์œผ๋กœ ์—… ์บ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ํŽธ๋ฆฌ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ ์ผ๋ฐ˜์„ฑ ์ˆ˜์ค€์—์„œ ์‹œ์ž‘๋˜๋Š” ์ถ”๊ฐ€ ํ•จ์ˆ˜ (๋˜๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ ํŒจํ„ด)๊ฐ€ ํ•ฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ (์˜ˆ : AbstractTensorArray s์˜ ์—… / ๋‹ค์šด ์ธ๋ฑ์Šค ๋ฐ ์ค‘๋ฆฝ ์ธ๋ฑ์Šค๋ฅผ ๋‹จ์ผ ๊ธฐ๋ณธ ๋ฐ์นด๋ฅดํŠธ ๋ฒกํ„ฐ ๊ณต๊ฐ„ ๋ฐ "์‹œํ€€์Šค"๊ณต๊ฐ„์€ ๊ฐ๊ฐ --- ๊ทธ๋Ÿฌ๋ฉด ๊ฑฐ์˜ ๋งค๋„๋Ÿฝ๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ํ•˜์œ„ ๊ธฐ๋Šฅ ๊ณ„์ธต์˜ ์‚ฌ์šฉ์ž๋Š” ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ ์ƒ์œ„ ๊ณ„์ธต์— ๋Œ€ํ•ด ์•Œ๊ฑฐ๋‚˜ ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ช…ํ™•ํ•˜๊ณ  ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„์€ ๊ณ„์ธต ๊ตฌ์กฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ํ•ฉ๋ฆฌ์ ์œผ๋กœ Base์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง„์งœ ์งˆ๋ฌธ์€ --- ๋ฐฐ์—ด ์—ฐ์‚ฐ์ด๋“  ์„ ํ˜• ๋Œ€์ˆ˜์ด๋“  ํ…์„œ ๋Œ€์ˆ˜์ด๋“  ---์ด ์œ ํ˜•์˜ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง„ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค๋ฅธ ๋ฐฉ์‹์„ ๊ธฐ๋Œ€ํ•˜๊ฑฐ๋‚˜ ์›ํ•  ๊ฐ€๋Šฅ์„ฑ์€ ์–ผ๋งˆ๋‚˜๋ฉ๋‹ˆ๊นŒ?

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด Python-land์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ˆ˜์ž…ํ’ˆ์ด ํ•„์š”ํ•œ์ง€์— ๋Œ€ํ•œ ์–ด๋ฆฌ์„์€ ์„ธ๋ถ„์„ฑ์„ ์‹ซ์–ดํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” ์•„๋ฌด๋„ ๊ทธ ์ •๋„ ๊ธธ์ด๋กœ ๊ฐˆ ๊ฒƒ์„ ์ œ์•ˆํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋งŽ์€ ์ˆ˜์˜ ์ข…์†์„ฑ๊ณผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒฝ์ฐฝ์ด ์ผ๋ถ€ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š๋‹ค๋Š” ์ค‘์š”ํ•œ ์ฃผ์žฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. Julia ์–ธ์–ด๋Š” ์‹ค์ œ๋กœ ์ปดํ“จํ„ฐ์— Fortran ๋Ÿฐํƒ€์ž„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†์–ด์•ผํ•˜์ง€๋งŒ ํ˜„์žฌ Julia ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ์‹คํ–‰ํ•˜๋ ค๋Š” ์ฝ”๋“œ๋Š” ์„ ํ˜• ๋Œ€์ˆ˜ (๋˜๋Š” Bessel ํ•จ์ˆ˜ ๋˜๋Š” FFT ๋“ฑ)๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ชจ๋‘ # 5155 ๋ฐ ๊ธฐํƒ€ ๋ฌธ์ œ์— ์˜ํ•ด ์ž˜ ๋‹ค๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. "๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์น˜๋จ"๋ฐ "๋ชจ๋“  ๊ธฐ๋Šฅ์— ํ•„์š”ํ•œ ์ตœ์†Œ๊ฐ’"์€ ๊ฒฐ๊ตญ ์„œ๋กœ ๋‹ค๋ฅธ ๋ชจ๋“ˆ ์„ธํŠธ๋กœ ๋ถ„๋ฆฌ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค Tony, ๋‘ ๋ฒˆ์งธ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ, ์šฐ๋ฆฌ์˜ ํŒจํ‚ค์ง€ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ๊ทธ๋ฃน์„ ํ•จ๊ป˜ ๊ทธ๋ฃนํ™”ํ•˜๋Š” ํŒจํ‚ค์ง€์™€ ๊ฐ™์€ "๋„๊ตฌ ์ƒ์ž"๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ์‹ค์ œ๋กœ ๋ฌธ์ œ๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. @reexport ๋งคํฌ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋˜ ๋‹ค๋ฅธ ์š”์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ๋‚ด์—์„œ ์•„์ด๋””์–ด๋ฅผ ์ถ”์ง„ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ์‰ฝ์Šต๋‹ˆ๋‹ค. ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ฐ”๊พธ๊ณ  ์‹ถ๋‹ค๋ฉด ๊ทธ๋ƒฅํ•˜์„ธ์š”. Base one ๋‚ด์—์„œ ํ›จ์”ฌ ๋” ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ํŒจ์น˜ ์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋…๋ฆฝ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ํƒ์ƒ‰ํ•˜๊ธฐ ๋” ์–ด๋ ค์šด ๋‹จํŽธํ™” ๋œ ํ”Œ๋žซํผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ณด๋‹ค ํ†ต์ผ๋˜๊ณ  ์ผ๋ฐ˜ํ™” ๋œ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ถ„์•ผ ๊ฐ„ ์ƒํ˜ธ ์ž‘์šฉ๊ณผ ์ƒˆ๋กœ์šด ์˜์—ญ ํƒ์ƒ‰์„ ๊ฐ„์†Œํ™”ํ•˜๊ณ  ์šฉ์ดํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ฒกํ„ฐ * ํ–‰๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ€์žฅ ๊ด€์šฉ์  ์ธ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์˜ˆ ๋‚ด๊ฐ€์žˆ์–ด ๋ง์„ X ๋ชจ์–‘์œผ๋กœ (K, N) ๋ฐ b ๋ชจ์–‘ (K,) , ๊ทธ๋ฆฌ๊ณ  ๊ณฑ์…ˆ์— ์˜ํ•ด ์›ํ•˜๋Š” b ์˜จ ๊ธธ์ด๊ฐ€ (N,) ๋ฒกํ„ฐ๋ฅผ ์–ป์œผ๋ ค๋ฉด ์™ผ์ชฝ.
BLAS.gemv('T',1.0,X,b) ์ „ํ™”ํ•˜๋‚˜์š”
๋˜๋Š” reshape(b'*X,size(x,2))
๋‘˜ ๋‹ค ์•ฝ๊ฐ„ ๋ชป ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

X'b ํ•  ์ˆ˜์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”

2015-03-13 17:15 GMT-04 : 00 joschu [email protected] :

ํ˜„์žฌ ๋ฒกํ„ฐ * ํ–‰๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ€์žฅ ๊ด€์šฉ์  ์ธ ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์˜ˆ๋ฅผ ๋“ค์–ด X๋Š” ๋ชจ์–‘ (K, N), b์—๋Š” ๋ชจ์–‘ (K)์ด ์žˆ๊ณ 
๊ธธ์ด (N,)์˜ ๋ฒกํ„ฐ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์™ผ์ชฝ์— b๋ฅผ ๊ณฑํ•ฉ๋‹ˆ๋‹ค.
BLAS.gemv ( 'T', 1.0, X, b)๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๊นŒ?
๋˜๋Š” reshape (b '* X, size (x, 2))
๋‘˜ ๋‹ค ์•ฝ๊ฐ„ ๋ชป ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/JuliaLang/julia/issues/4774#issuecomment -79405868.

๊ทธ๋ž˜, ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด X์˜ ๋ณต์‚ฌ๋ณธ์„ ์œ ๋ฐœํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ @time ์€ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์— ๋”ฐ๋ผ ์‚ฌ๋ณธ์ด ์—†์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

julia> X = rand(1000,1000); y = rand(1000);

julia> <strong i="8">@time</strong> y'X;
elapsed time: 0.00177384 seconds (15 kB allocated)

julia> <strong i="9">@time</strong> X'y;
elapsed time: 0.000528808 seconds (7 kB allocated)

์šฐ๋ฆฌ๋Š” '์˜ ๋ฉ‹์ง„ ๊ตฌ๋ฌธ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ X'y ๋Š” Ac_mul_B(X,y) ๋กœ ๋๋‚˜๊ณ 
๋‹น์‹ ์ด ์ œ์•ˆํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ BLAS ์ „ํ™”.

2015-03-13 17:28 GMT-04 : 00 joschu [email protected] :

๊ทธ๋ž˜, ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด X์˜ ์‚ฌ๋ณธ์„ ์œ ๋ฐœํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ.
(ํ•˜์ง€๋งŒ @time https://github.com/time ์€
๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์— ๋”ฐ๋ผ ๋ณต์‚ฌ

์ค„๋ฆฌ์•„> X = rand (1000,1000); y = rand (1000);

์ค„๋ฆฌ์•„> @time y'X;
๊ฒฝ๊ณผ ์‹œ๊ฐ„ : 0.00177384 ์ดˆ (15kB ํ• ๋‹น)

์ค„๋ฆฌ์•„> @time X'y;
๊ฒฝ๊ณผ ์‹œ๊ฐ„ : 0.000528808 ์ดˆ (7kB ํ• ๋‹น)

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/JuliaLang/julia/issues/4774#issuecomment -79421713.

๋ฏฟ๊ฑฐ ๋‚˜ ๋ง๊ฑฐ๋‚˜์ด ์ „์ฒด ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ ๊ธ€์ด ๊ตฌ์ฒดํ™”์— ๊ฐ€๊นŒ์›Œ์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

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

์–ด์จŒ๋“  conj(transpose(x)) ๋Š” ctranspose(x) ์™€ ๋™์ผํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ์ฃผ์žฅ๋Œ€๋กœ, ๋‚ด๊ฐ€ ๊ทธ ๋ž˜ํผ ์œ ํ˜•์˜ ๋น„ ํฌ๋ง transpose ๋ฐ ctranspose ์™€ ๊ฐ™์€ ํŠน์ • ์ˆ˜ํ•™์  ๊ฐœ๋…์„ ํฌํ•จํ•˜๋Š” ์ด๋ฆ„์ด ์ฃผ์–ด์ง‘๋‹ˆ๋‹ค ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค dual . Julia์™€ ๊ฐ™์€ ๊ณผํ•™์  ์–ธ์–ด๋Š” ์œ ์šฉํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์„ธํŠธ๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๊ณตํ†ต ์—ฐ์‚ฐ์„ ๊ตฌํ˜„ํ•ด์•ผํ•˜์ง€๋งŒ ์—„๊ฒฉํ•œ ์ˆ˜ํ•™์  ๊ตฌ์กฐ๋ฅผ ์—ฌ๊ธฐ์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ผ๋ถ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๊ณ  ๋„ˆ๋ฌด ๋ณต์žกํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ธฐํƒ€. ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ๋ฐ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ˆ˜ํ•™์  ์—ฐ์‚ฐ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. z ๊ฐ€ ๋ณต์†Œ ๋ฒกํ„ฐ์ด๊ณ  A ์ผ๋ถ€ ํ–‰๋ ฌ์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์Šค์นผ๋ผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” z.' * A * z ๋Œ€ํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„๋ก ์ด๊ฒƒ์ด ๋‚ด๋ถ€ ๊ณฑ ๋ฐ / ๋˜๋Š” ์ด์ค‘๊ณผ ๊ด€๋ จ์ด ์—†๋”๋ผ๋„ ๋ฒกํ„ฐ.

@jutho z.' * A * z ๋Œ€ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

z1 ๋ฐ z2 ๊ฐ€ ๋‘ ๊ฐœ์˜ ๋ณต์žกํ•œ ๋ฒกํ„ฐ Z1 ๋ฐ Z2 (์˜ˆ : Kรคhler ๋งค๋‹ˆ ํด๋“œ์˜ ์ ‘์„  ๊ณต๊ฐ„์˜ ํ™€๋กœ ๋ชจํ”ฝ ๋ถ€๋ถ„์—์žˆ๋Š” ์ ‘์„  ๋ฒกํ„ฐ ) ๋ฐ a ๋Š” ๋‘ ๊ฐœ์˜ ๊ณต๋ณ€ ์ธ๋ฑ์Šค (์˜ˆ : Kรคhler ๋งค๋‹ˆ ํด๋“œ์˜ ๋ณต์žกํ•œ (2,0) ํ˜•์‹)๊ฐ€์žˆ๋Š” ํ…์„œ A ์˜ ํ–‰๋ ฌ ํ‘œํ˜„์ด๊ณ  A(Z1,Z2) = z.' * a * z ์ž…๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๊ฐ•์กฐํ•˜๋Š” ๊ฒƒ์€ ์ค„๋ฆฌ์•„ ๊ฐœ์ฒด z1 , z2 ๋ฐ a ๋Š” ํŠน์ • ์ˆ˜ํ•™์  ๊ฐœ์ฒด์˜ _ ํ‘œํ˜„ _ (์„ ํƒ๋œ ๊ธฐ์ค€ / ์กฐ์ •๊ณผ ๊ด€๋ จํ•˜์—ฌ) ๋งŒ ํ˜•์„ฑํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์—ฐ์‚ฐ์€ ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋ฌด์—‡์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ง€ ๋ชจ๋ฅธ ์ฑ„ ์ˆ˜ํ•™์  ์—ฐ์‚ฐ๊ณผ ๊ณ ์œ ํ•˜๊ฒŒ ์—ฐ๊ด€ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@jutho ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํ‘œํ˜„์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์š”์ ์€ ์ž˜ ๋ฐ›์•„ ๋“ค์—ฌ์กŒ์œผ๋ฉฐ์ด ํ† ๋ก ์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ํ‘œํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ์˜ ์ตœ์†Œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ฐพ๊ณ , ๊ทธ ์ตœ์†Œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ฐฐ์—ด์˜ ์ตœ์†Œ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ทผ๋ณธ์ ์œผ๋กœ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š”์ง€, ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž ์ •์˜ ์ถ”์ƒ ๋ฐ์ดํ„ฐ ์œ ํ˜•์œผ๋กœ ์˜คํ”„๋กœ๋“œ ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ ์ €๋Š” @StefanKarpinski ์ œ์•ˆ์— ์ „์ ์œผ๋กœ ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ @andyferris ๋„ ๋Œ€๋ถ€๋ถ„ ๋ฐ˜ํ–ฅํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ

  1. APL ์Šคํƒ€์ผ ์ธ๋ฑ์‹ฑ
  2. v '๋Š” ์ผ์ข…์˜ Covector ๋˜๋Š” Transpose ์œ ํ˜•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์€ ์„ธ๋ถ€ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. row(M,i) ๋ฐ col(M,i) ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ–‰์„ ์ฝ” ๋ฒกํ„ฐ๋กœ ์ถ”์ถœํ•˜๋ ค๋ฉด M[i,:].' ๊ฐ€ ํ•„์š”ํ• ๊นŒ์š”? IIUC, M[i,:]' ๋Š”์ด ๊ฒฝ์šฐ์— ์›ํ•˜์ง€ ์•Š๋Š” conj ํ• ๊นŒ์š”?

์˜ˆ, ์ œ๊ฐ€ ๋งˆ์ง€๋ง‰์œผ๋กœ ์ž‘์„ฑํ•œ APL ์Šคํƒ€์ผ ์ธ๋ฑ์‹ฑ์˜ ์ข‹์€ ์ ์„ ์ถฉ๋ถ„ํžˆ ์ธ์‹ํ•˜์ง€ ๋ชปํ–ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ๊ทธ ๋ณ€๊ฒฝ์„ ์ „์ ์œผ๋กœ ์ง€์›ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ฐจ๋ก€๋กœ ์ด์ค‘ ๋ฒกํ„ฐ๋ฅผ ๋”์šฑ ๋งค๋ ฅ์ ์œผ๋กœ ๋งŒ๋“ค๊ณ  row / col ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๊ทธ ์ดํ›„๋กœ ๋‚˜๋Š” ๊ตฌํ˜„์„ ๊ฐ€์ง€๊ณ  ๋†€์•„ ๋ณด์•˜๊ณ  ๊ฐ€์žฅ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ๊ฒƒ์€ ํ–‰๋ ฌ์—์„œ ์ถ”์ถœ ๋œ covector๊ฐ€ ๊ณต์•ก์ธ์ง€ ์•„๋‹Œ์ง€์˜€์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ํ–‰๋ ฌ์˜ ๋ฆฌํ„ฐ๋Ÿด ๊ฐ’์„ ์›ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Dirac ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ (๋ชจ๋“ ) ํ–‰๋ ฌ ํ™•์žฅ M = sum_i | i>์˜ˆ๋ฅผ ๋“ค์–ด [0,0,1, ..., 0], ์šฐ๋ฆฌ๋Š”U ์šฐ๋ฆฌ๋Š” ๊ณ ์œ  ๋ถ„ํ•ด์—์„œ ์™ผ์ชฝ ๋ฐ ์˜ค๋ฅธ์ชฝ ๊ณ ์œ  ๋ฒกํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ๋ฐ ์™„๋ฒฝํ•œ ์˜๋ฏธ๊ฐ€์žˆ๋Š” row(U,i)' = col(Uโ€™,i) ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

์•ค๋””

2015 ๋…„ 3 ์›” 15 ์ผ ์˜คํ›„ 9์‹œ 36 ๋ถ„์— Jeff Bezanson [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ ๋‚˜๋Š” @StefanKarpinski์— ์ฐฌ์„ฑ ์™„์ „ํžˆ ํ•ด์š” https://github.com/StefanKarpinski ๋˜ํ•œ ๋Œ€๋ถ€๋ถ„ @andyferris์— ์˜ํ•ด ์—์ฝ”, ์ œ์•ˆ https://github.com/andyferris ์œ„. ํŠนํžˆ

APL ์Šคํƒ€์ผ ์ธ๋ฑ์‹ฑ
v '๋Š” ์ผ์ข…์˜ Covector ๋˜๋Š” Transpose ์œ ํ˜•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒƒ์€ ์„ธ๋ถ€ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. row (M, i) ๋ฐ col (M, i) ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ–‰์„ ์ฝ” ๋ฒกํ„ฐ๋กœ ์ถ”์ถœํ•˜๋ ค๋ฉด M [i ,:]์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ' ? IIUC, M [i ,:] '์ด ๊ฒฝ์šฐ ์›ํ•˜์ง€ ์•Š๋Š” conj๋ฅผํ• ๊นŒ์š”?

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub https://github.com/JuliaLang/julia/issues/4774#issuecomment -81228816์—์„œ

์ด ์ž‘์—…์„ ์‹œ์ž‘ํ•  ์ž์› ๋ด‰์‚ฌ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์˜ˆ๋ฅผ ๋“ค์–ด @mbauman , @jakebolewski ๊ฐ€ ๋†€๋ž๊ฒŒ๋„ ์ด๋ฏธ์ด ์Šค๋ ˆ๋“œ์— ์—†์Šต๋‹ˆ๋‹ค. :)

๋ณ€๊ฒฝํ•ด์•ผํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ์„ ์ฐพ๋Š” ๊ฒƒ์€ ์ง€๋ฃจํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ธ๋ฑ์‹ฑ ๋™์ž‘์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๋ณ€๊ฒฝ์€ ๊ทธ๋ฆฌ ๋‚˜์˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ @jiahao ์™€ @andreasnoack ์€ Covector๋ฅผ ํ†ตํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋” ๋งŽ์ด ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๋ ค๋ฉด 9 ๊ฐœ, 8 ๊ฐœ ๋” ์ด์ƒ์˜ ์ฃผ์„์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ œ๊ฐ€ ๋„์™€ ๋“œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ฝค ๊ฐ€๊น์Šต๋‹ˆ๋‹ค

๊ด€๋ จ ์ฃผ์„์œผ๋กœ Transpose ๋ฐ CTranspose ๋ž˜ํผ ์œ ํ˜•์ด์žˆ๋Š” ๊ฒฝ์šฐ conj(A) ์™€ ๊ฐ™์€ ์ผ๋ฐ˜ Conjugate ๋ž˜ํผ ์œ ํ˜•์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๊ฒŒ์œผ๋ฅธ. ํ–‰๋ ฌ์„ BLAS๋กœ ๊ณฑํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ํŠน๋ณ„ํ•œ ์ง€์›์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (BLAS์˜ C ๋Š” hermitian conjugate๋ฅผ ์˜๋ฏธ ํ•จ). ์ „์ฒด Julia BLAS ๊ตฌํ˜„์ด ์žˆ๋‹ค๋ฉด ์ง€์›ํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์Šต๋‹ˆ๋‹ค. ๋ช…์‹œ ์  ํ™œ์šฉ์—†์ด conj(A)*B .

์ €๋Š” ์˜ˆ์ „๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ง„์ง€ํ•˜๊ฒŒ ๋ฒกํ„ฐ ์ „์น˜๋ฅผ ์ทจํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค.

์•„๋งˆ๋„ @andreasnoack ๊ณผ @simonbyrne ์€ # 6837์„ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•ด์•ผํ•˜๋Š”์ง€ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Transpose{Array} <: AbstractArray ์ด (๊ฐ€) ์—†์–ด์•ผํ•œ๋‹ค๋Š” @simonbyrne์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐํƒ€ ์ผ๋ฐ˜์ ์ธ ์ƒ๊ฐ :

  • ์™ธ๋ถ€ ๊ณฑ ๊ณ„์‚ฐ์— ํ˜„์žฌ "ํ›„ํ–‰ ๋‹จ์ผ ์น˜์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Œ"๊ทœ์น™์— ๋Œ€ํ•œ ์˜ˆ์™ธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Œ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. u ํฌ๊ธฐ๊ฐ€ (n,) ๊ฒฝ์šฐ u * u' ๋Š” (n,) x (1, n) ์™€ ๊ด€๋ จ๋œ ๊ณ„์‚ฐ์ž…๋‹ˆ๋‹ค. ์ด ๊ณฑ์€ ํ–‰๋ ฌ ๊ณฑ์…ˆ์˜ ์ผ๋ฐ˜์ ์ธ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. _unless_ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜๋ฅผ (n, 1) ์œผ๋กœ ์ž๋™ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š” ํ•œ.
  • MATLAB ์ธ๋ฑ์‹ฑ ์˜๋ฏธ ์ฒด๊ณ„์˜ "ํ›„ํ–‰ ๋‹จ์ผ ์ฐจ์› ์ž๋™ ์ถ”๊ฐ€"๊ทœ์น™์€ "์ „์น˜๊ฐ€ ๋ชจ๋“  ์ฐจ์›์„ ๋ฐ˜์ „ ํ•จ"๊ทœ์น™๊ณผ ๊ทผ๋ณธ์ ์œผ๋กœ ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ „ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋ฉด (n,) ๋ชจ์–‘์˜ ๋ฐฐ์—ด์€ (n,1) ๋ชจ์–‘ ๋ฐ ๋ชจ์–‘ (n,1,1) ๋“ฑ์˜ ๋ชจ์–‘์„ ๋ณ€๊ฒฝ ํ•œ ๋ฐฐ์—ด๊ณผ ์˜๋ฏธ ์ƒ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ์กฐ์˜ฎ๊น€์ด ๋ชจ๋“  ์ฐจ์›์„ ๋ฐ˜์ „ํ•˜๋ฉด ๊ฒฐ๊ณผ ๋ฐฐ์—ด์˜ ๋ชจ์–‘์€ (n,) , (1, n) ๋ฐ (1,1,n) ์ด๋ฉฐ, ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค ๋งŒ ์ถ”๊ฐ€ ํ•  ์ˆ˜์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ๋™๋“ฑ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค _. ์ด๋ฅผ ๋…ผ๋ฆฌ์  ๊ทน๋‹จ์œผ๋กœ ๊ฐ€์ ธ ๊ฐ€๋ฉด ๋ฐฐ์—ด์˜ ์ „์น˜๊ฐ€ ์ž„์˜์˜ ์ˆ˜์˜ _leading_ ์‹ฑ๊ธ€ ํ†ค์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ผ๊ด€์„ฑ์ด์—†๋Š” ๋ชจํ˜ธํ•œ ๋ชจ์–‘์„ ๊ฐ–์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ๋ฌธํ—Œ ์กฐ์‚ฌ๋ฅผํ–ˆ๊ณ  ํฅ๋ฏธ๋กœ์šด APL ์—ญ์‚ฌ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ APL ์ธ๋ฑ์‹ฑ ๊ทœ์น™์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์€ Iverson์˜ 1962 ์ฑ…์ด ์•„๋‹ˆ๋ผ APL \ 360 (1968, APL์˜ ์ฒซ ๋ฒˆ์งธ ๊ตฌํ˜„)์— ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ APL \ 360์€ ์Šค์นผ๋ผ์™€ 1- ๋ฒกํ„ฐ๋ฅผ ํ•ฉ์ณ์„œ๊นŒ์ง€ ๋ฌธํ—Œ์—์„œ ์ธ์‹๋˜์ง€ ์•Š์•˜๋˜ ๋ถˆ์ผ์น˜์ด๋‹ค (Haegi, 1976). ๋‹ค์ฐจ์› ๋ฐฐ์—ด์˜ ํ˜•์‹์  ์˜๋ฏธ๋ก ์— ๋Œ€ํ•œ ๋…ผ์˜๋Š” Brown์˜ PhD ๋…ผ๋ฌธ (1972; ๋‚˜์ค‘์— APL2๋ฅผ ์„ค๊ณ„ ํ•จ)์— ์ฒ˜์Œ ๋“ฑ์žฅํ–ˆ์œผ๋ฉฐ, ์˜๋ฏธ๋ก ์„ ํ˜•์‹ํ™”ํ•˜๋Š” ์ผ๋ จ์˜ ์ž‘์—…์— ๋ฐ•์ฐจ๋ฅผ๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

APL2๋กœ ์ด์–ด์ง€๋Š” ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ํ›Œ๋ฅญํ•œ ์„ค๋ฌธ ์กฐ์‚ฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Karl Fritz Ruehr. "APL ํ™•์žฅ์— ๋Œ€ํ•œ ์„ค๋ฌธ ์กฐ์‚ฌ." APL์— ๊ด€ํ•œ ๊ตญ์ œ ์ปจํผ๋Ÿฐ์Šค, APL '82, ํŽ˜์ด์ง€ 277โ€“314, ๋ฏธ๊ตญ ๋‰ด์š• ์ฃผ ๋‰ด์š•, 1982 ๋…„ ACM.

์ƒ‰์ธ ๊ทœ์น™์— ๋Œ€ํ•œ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ธ ๋ฌธํ—Œ์—์„œ ์ฃผ๋ชฉํ• ๋งŒํ•œ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • T. ๋”. "๋ฐฐ์—ด ์ด๋ก ์— ๋Œ€ํ•œ ๊ณต๋ฆฌ์™€ ์ •๋ฆฌ." IBM Journal of Research and Development, 17 (3 ์›”) : 135โ€“175, 1973.

    • Quine์˜ ๊ณต๋ฆฌ์  ์ง‘ํ•ฉ ์ด๋ก ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์ฐจ์› ๋ฐฐ์—ด์˜ ์˜๋ฏธ๋ฅผ ๊ณต์‹ํ™”ํ•˜๋Š” ๊ฑฐ๋Œ€ํ•œ ์ฑ…. APL ๋ฌธํ—Œ์—์„œ "๋ถ€๋™ ๋ฐฐ์—ด"์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์„ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์ž์ฒด ํฌํ•จ ์ง‘ํ•ฉ์˜ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šค์นผ๋ผ๋ฅผ ์ˆœ์œ„ 0 ๋ฐฐ์—ด๊ณผ ๊ฒฐํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ([1] == 1, ์—ฌ๊ธฐ์„œ [1]! = 1. "์ ‘์ง€ ๋œ ๋ฐฐ์—ด"๊ณผ ๋Œ€์กฐ๋˜๋Š” [1]! = 1. ๋‚˜์ค‘์— Sheila M. Singleton์ด 1980 ๋…„ ์„์‚ฌ ๋…ผ๋ฌธ์—์„œ ์ž‘์—… ํ•œ ๊ฒฐ๊ณผ More์˜ ๋ฐฐ์—ด ์ด๋ก ์€ ์ ‘์ง€ ๋œ ๋ฐฐ์—ด์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐ์—๋„ ์ ์šฉ๋  ์ˆ˜ ์žˆ์Œ์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.)

    • More๋Š” ๋˜ํ•œ ๋ฐฐ์—ด ์˜๋ฏธ๋ก ์„ ์•ˆ๋‚ดํ•˜๋Š” ์ค‘์š”ํ•œ ๊ทœ์น™์œผ๋กœ ์Šค์นผ๋ผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋‚ด๋ถ€ ๊ณฑ์„ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

    • ๋˜ํ•œ ์ผ๋ฐ˜์ ์ธ ๋‹ค์ฐจ์› ๋ฐฐ์—ด์— ๋Œ€ํ•œ "์—… / ๋‹ค์šด"์ฒ˜๋ฆฌ์˜ ๋ณต์žก์„ฑ์„ ์•”์‹œํ•ฉ๋‹ˆ๋‹ค.

      "V๋ฅผ ํ•„๋“œ์— ๋Œ€ํ•œ n ์ฐจ์› ๋ฒกํ„ฐ ๊ณต๊ฐ„์ด๋ผ๊ณ ํ•ฉ์‹œ๋‹ค. ๋ฐ˜ ๋ถ„์‚ฐ ๋ฐ ๊ณต๋ถ„์‚ฐ์˜ ๊ณ ๋ ค ์‚ฌํ•ญ์„ ๋ฌด์‹œํ•˜๊ณ  V์˜ ์›์ž๊ฐ€ q ํ…์„œ๋Š” ๋ชฉ๋ก VV ... V์˜ ๋ฐ์นด๋ฅดํŠธ ๊ณฑ์„ ๋ฒกํ„ฐ๋กœ ๋‹ค์ค‘ ์„ ํ˜• ๋งคํ•‘ ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. V์— ๋ฐ‘์ด ์žˆ์œผ๋ฉด V์—์žˆ๋Š” valence q์˜ ํ…์„œ๋Š” ๊ธธ์ด๊ฐ€ n ์ธ q ์ถ•์—์žˆ๋Š” ๋ฐฐ์—ด ์ธ _component tensor_๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "

  • G. ๋ฃจ์ด์Šค. "APL์„์œ„ํ•œ ์ƒˆ๋กœ์šด ์–ด๋ ˆ์ด ์ธ๋ฑ์‹ฑ ์‹œ์Šคํ…œ", APL์— ๊ด€ํ•œ ์ œ 7 ์ฐจ ๊ตญ์ œ ํšŒ์˜ ์ ˆ์ฐจ-APL '75, 234-239, 1975.

    • ์ด ๋…ผ๋ฌธ์€ ์ธ๋ฑ์‹ฑ ์ž‘์—…์—์„œ ์ธ๋ฑ์Šค ํŠœํ”Œ์„ APL์—์„œ ์ผ๋ฅ˜ ๊ฐ์ฒด๋กœ ์˜นํ˜ธ ํ•œ ์ตœ์ดˆ์˜ ๋ฌธ์„œ์ด๋ฉฐ ์ธ๋ฑ์Šค ํŠœํ”Œ์˜ ๊ฐ ์ˆœ์œ„์— ๋”ฐ๋ผ ์ฒด๊ณ„์ ์ธ ๋ฐ์นด๋ฅดํŠธ ๊ณฑ์„ ํ†ตํ•ด ์ธ๋ฑ์‹ฑ ๊ฒฐ๊ณผ์˜ ์ผ๊ด€๋œ ๊ตฌ์„ฑ์„ ๋‹ฌ์„ฑ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • Hans R Haegi. "ํŠธ๋ฆฌ์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ์˜ APL ํ™•์žฅ." ACM SIGAPL APL ๊ฒฌ์  ์ฟผ๋“œ, 7 (2) : 8โ€“18, 1976.

    • ์ด ๋…ผ๋ฌธ์€ ์Šค์นผ๋ผ์™€ 1- ๋ฐฐ์—ด์„ ํ•ฉ์นœ ๊ณ ์ „์ ์ธ APL \ 360์˜ ๋ถˆ์ผ์น˜์— ๋Œ€ํ•ด ๋ถˆํ‰ํ•˜๊ณ  APL ์ธ๋ฑ์‹ฑ ๊ทœ์น™์ด์ด ํ•ฉ๋ณ‘์ด ์œ ์ง€๋˜์ง€ ์•Š๋„๋ก ์š”๊ตฌํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค.

    • ์ด ๋…ผ๋ฌธ์€ ๋˜ํ•œ 1975 ๋…„ Lewis์™€ ๋งค์šฐ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—…์€ ๋…๋ฆฝ์  ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

  • JA Gerth ๋ฐ DL Orth. "APL์—์„œ ์ธ๋ฑ์‹ฑ ๋ฐ ๋ณ‘ํ•ฉ." APL์— ๊ด€ํ•œ ๊ตญ์ œ ํšŒ์˜ ํšŒ๋ณด, APL '88, 156โ€“161 ํŽ˜์ด์ง€, ๋ฏธ๊ตญ ๋‰ด์š•, ๋‰ด์š•, 1988. ACM.

    • APL ์ธ๋ฑ์‹ฑ ๊ทœ์น™์€ ์ธ๋ฑ์Šค ์ง‘ํ•ฉ์„ ๊ฐ’ ์ง‘ํ•ฉ์— ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ์†ก ์ž‘์—…์œผ๋กœ ์ธ๋ฑ์‹ฑ์„ ์ƒ๊ฐํ•˜๋ฉด ์ •๋‹นํ™” ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ธฐ๋Šฅ์  ํ•ด์„์€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ˆœ์œ„ ๋ณด์กด ๊ทœ์น™๊ณผ ๋ฃจ์ด์Šค์™€ ํ•ด๊ธฐ์˜ ๋ฐ์นด๋ฅดํŠธ ๊ตฌ์„ฑ์„ ์•”์‹œํ•œ๋‹ค.

๋˜ํ•œ "ํ›„ํ–‰ ๋‹จ์ผ ์น˜์ˆ˜ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ"๊ทœ์น™์ด ์—†์œผ๋ฉด ์šฐ๋ฆฌ๋Š”

image

์™ผ์ชฝ์€ ์Šค์นผ๋ผ (ํŠธ๋ ˆ์ด์Šค ์ •์˜์— ๋”ฐ๋ผ)์ด๊ณ  ์˜ค๋ฅธ์ชฝ์€ (1, n) x (n, n) x (n,) = (1,) ๋ชจ์–‘์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ, ๋ฒกํ„ฐ ์ „์น˜ ์˜๋ฏธ๋ก ์„ ์„ ํƒํ•˜๊ธฐ์œ„ํ•œ ์ง€์นจ ์›์น™์œผ๋กœ์ด ์ •์ฒด์„ฑ์„ ์ทจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์ ์€ ์ฒซ ๋ฒˆ์งธ ID๋ฅผ ์ •์˜ํ•˜๋Š” ์ถ”์  ์ž‘์—…์˜ ์ˆœํ™˜ ์†์„ฑ์ž…๋‹ˆ๋‹ค. ํŠธ๋ ˆ์ด์Šค ๋‚ด๋ถ€์˜ ์ˆ˜๋Ÿ‰์€ ์Šค์นผ๋ผ ๋˜๋Š” ํ–‰๋ ฌ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค (๋ฒกํ„ฐ ํŠธ๋ ˆ์ด์Šค๋Š” ์ •์˜๋˜์ง€ ์•Š์Œ). Avv' ์€ (๋Š”) ์ด๋ฏธ ๋ชจํ˜ธํ•˜์ง€ ์•Š์€ ํ–‰๋ ฌ์ž…๋‹ˆ๋‹ค. (Av)v' ๋ฐ A(vv') ๋Š” ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‘ ๋ฒˆ์งธ ์ˆ˜๋Ÿ‰์—์„œ๋„ v'Av ๋Š” ํ–‰๋ ฌ _ ๋˜๋Š” _ ์Šค์นผ๋ผ ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค. (์Šค์นผ๋ผ ์ธ ๊ฒฝ์šฐ ๋‘ ๋ฒˆ์งธ ํ•ญ๋“ฑ๋„ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.) v'Av ๋Š” "ํ›„ํ–‰ ๋‹จ์ผ ์ฐจ์›์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Œ"๊ทœ์น™์ด ํ™œ์„ฑํ™” ๋œ ๊ฒฝ์šฐ์—๋งŒ 1- ๋ฒกํ„ฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ,์ด ๊ฒฝ์šฐ ํˆฌ๋ช…ํ•˜๊ฒŒ 1x1 ํ–‰๋ ฌ๋กœ ๋ชจ์–‘์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ถ”์ ์„ ์ •์˜ํ•˜๋ ค๋ฉด ์™ธ๋ถ€ ์ œํ’ˆ vv' ๋ฐ 2 ์ฐจ ํ˜•์‹ v'Av ์˜ ํ—ˆ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ์–‘์— ๋Œ€ํ•ด ๋ฐ˜๋“œ์‹œ ์ œํ•œ์„ ๋ถ€๊ณผํ•ฉ๋‹ˆ๋‹ค.

@jihao : ๋‚˜๋Š” ๋‹น์‹ ์ด ์šฐ๋ฆฌ์— ๋Œ€ํ•ด ๋ฌด์—‡์„ ์ฃผ์žฅํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. "ํ›„ํ–‰ ๋‹จ์ผ ์น˜์ˆ˜ ๊ทœ์น™์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Œ"์„ ์ข€ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์–ธ์ œ ์ ์šฉ ๋˜๋‚˜์š”? ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ์ง€์›ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

์ „์น˜๊ฐ€ ๋ชจ๋“  ์ฐจ์›์„ ์—ญ์ „์‹œํ‚ค๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜์—†๋Š” ์ž…์žฅ์„ ๊ฐ•ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ ์ฃผ์žฅ์„ ์ทจํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (์—ด ๋ฒกํ„ฐ๋Š” ์—ด ๋ฒกํ„ฐ๋กœ ์ „์น˜๋˜๊ฑฐ๋‚˜ ์ž„์˜์˜ ์ˆ˜์˜ ์„ ํ–‰ ์‹ฑ๊ธ€ ํ†ค ์ฐจ์›์ด์žˆ๋Š” ๋ฐฐ์—ด๋กœ ์ „์น˜ ๋จ). ํ–‰๋ ฌ ๋Œ€์ˆ˜์™€ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ ค๋ฉด ๋Œ€์‹  ๋‘ ๊ฐœ์˜ ์ฒซ ๋ฒˆ์งธ ์ฐจ์›์„ ๋ฐ”๊พธ๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋‚˜๋Š” ๋‹น์‹ ์ด ๋งํ•˜๋Š” ๋ชจ์ˆœ ์ค‘ ์ผ๋ถ€๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ์ „์น˜ ํ•  ๋•Œ ์‹ฑ๊ธ€ ํ†ค ์ฐจ์›์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‚˜๋จธ์ง€๋Š” ์‚ฌ๋ผ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค (์ฝ” ๋ฒกํ„ฐ์˜์—†๋Š” ์ฒซ ๋ฒˆ์งธ ์ฐจ์›์€ ๊ณ„์‚ฐ๋˜์ง€ ์•Š์Œ).

์œ„์˜ ์ผ๋ฐ˜์ ์ธ ์˜๊ฒฌ์€ ์ด๋Ÿฌํ•œ ๊ทœ์น™์„ ์˜นํ˜ธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฐฐ์—ด ์ธ๋ฑ์‹ฑ ๊ทœ์น™์˜ ์„ค๊ณ„ ๊ณต๊ฐ„๊ณผ ์„ ํ˜• ๋Œ€์ˆ˜ ID์™€์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐ ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค.

"ํ›„ํ–‰ ๋‹จ์ผ ์ฐจ์› ์ถ”๊ฐ€ ๊ฐ€๋Šฅ"๊ทœ์น™์€ MATLAB์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ (@alanedelman์— ๋”ฐ๋ผ) ๋‹ค์ฐจ์› ๋ฐฐ์—ด์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. MATLAB ๋ฐฐ์—ด์— ์‚ฌ์šฉ๋˜๋Š” ์ธ๋ฑ์Šค-์˜คํ”„์…‹ ๊ณ„์‚ฐ์€ sub2ind ๋กœ ์ •์˜๋˜๋ฉฐ, ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ›„ํ–‰ 1์„ ๋ช‡ ๊ฐœ ๋˜ ์กŒ๋Š”์ง€์— ๊ด€๊ณ„์—†์ด ๋™์ผํ•œ ์„ ํ˜• ์ธ๋ฑ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ MATLAB์˜ ํ–‰๋ ฌ ์ธ๋ฑ์‹ฑ ๋ฌธ์„œ ์—๋Š” ์ธ๋ฑ์‹ฑ ์ž‘์—…์— ๋Œ€ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

1๊ณผ ๊ฐ™์€ ํ›„ํ–‰ ์ฒจ์ž๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๊ณ  B์— ์ง€์ •๋œ ์ฒจ์ž์˜ ์ˆ˜๋Š” ndims (B)๋ฅผ ์ดˆ๊ณผํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋” ๊ณต์‹์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ์—ด์„ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ (n,) -arrays, (n,1) -arrays, (n,1,1...) ๋ฐฐ์—ด์€ ์ด๋Ÿฌํ•œ ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ์œ ํšจํ•œ ์ธ์ˆ˜๋ผ๋Š” ์ ์—์„œ ๋ชจ๋‘ ๋™์ผํ•œ ๋“ฑ๊ฐ€ ํด๋ž˜์Šค์— ์žˆ์Šต๋‹ˆ๋‹ค. ( n=1 ์ธ ๊ฒฝ์šฐ ๋“ฑ๊ฐ€ ํด๋ž˜์Šค์—๋Š” ์Šค์นผ๋ผ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.)

์˜ˆ :

  • A*b ๋ฐ A\b ์—ฌ๊ธฐ์„œ A ๋Š” ํ–‰๋ ฌ์ด๊ณ  b ๋Š” ๋ฒกํ„ฐ ๋˜๋Š” ํ–‰๋ ฌ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ( n x 1 ํ–‰๋ ฌ์— ๋Œ€ํ•œ ๋™์ผํ•œ ์˜๋ฏธ).
  • hcat(A, b) ์—ฌ๊ธฐ์„œ A ๋Š” ํ–‰๋ ฌ์ด๊ณ  b ๋Š” ๋ฒกํ„ฐ ๋˜๋Š” ํ–‰๋ ฌ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ Julia๋Š” ์™ธ๋ถ€ ์ œํ’ˆ ์˜ˆ์ œ๋ฅผ ์ œ์™ธํ•˜๊ณ  "ํ›„ํ–‰ ๋‹จ์ผ ์น˜์ˆ˜๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Œ"๊ทœ์น™์ด ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋„์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ง€๊ธˆ์€ ์ƒ๊ฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Transpose{A<:AbstractArray} ์ด AbstractArray ์˜ ํ•˜์œ„ ์œ ํ˜•์ด ์•„๋‹Œ ํ•œ ๋‚˜๋Š” ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ๋ถ„๋งŒํผ ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ญ”๊ฐ€ ๊ฐ„๊ณผํ•˜๊ณ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค) :
์™€

typealias AbstractVectorTranspose{A<:AbstractVector} Transpose{A}
typealias AbstractMatrixTranspose{A<:AbstractMatrix} Transpose{A}
typealias AbstractTMatrix Union(AbstractMatrix, AbstractMatrixTranspose} 

(๊ทธ๋ฆฌ๊ณ  ์œ ์‚ฌํ•˜๊ฒŒ CTranspose ) ์šฐ๋ฆฌ๋Š”

AbstractVectorTranspose * AbstractVector = Number
AbstractVector * AbstractVectorTranspose = AbstractMatrix
AbstractVectorTranspose * AbstractTMatrix = AbstractVectorTranspose
AbstractTMatrix * AbstractVector = AbstractVector
AbstractTMatrix * AbstractTMatrix = AbstractTMatrix

์œ ์ผํ•œ ์—ด๋ฆฐ ์งˆ๋ฌธ์€ AbstractTMatrix ์ฒซ ๋ฒˆ์งธ ํฌ๊ธฐ๊ฐ€ 1 AbstractVector * AbstractTMatrix ๊ฐ€ ์ง€์›๋˜์–ด์•ผํ•˜๋Š”์ง€ ๋˜๋Š” AbstractVector * AbstractVectorTranspose ๊ฐ€ ์ถฉ๋ถ„ํ•œ ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์ƒˆ๋กœ์šด ์œ ํ˜• ์‹œ์Šคํ…œ์€ typealias ๋ฐ union sa ์ค‘ ์ผ๋ถ€๋ฅผ ์ข€ ๋” ์‹ ์ค‘ํ•˜๊ฒŒ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ v.'*A ๊ฐ€ (A.'*v).' ๋กœ ๊ณ„์‚ฐ๋˜๋Š” ๊ฒฝ์šฐ A ์ž์ฒด๊ฐ€ A=B' ์ด๋ฉด A Conjugate ๋ž˜ํผ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. .

Transpose{Array} <: AbstractArray ์ด (๊ฐ€) ์—†์–ด์•ผํ•œ๋‹ค๋Š” @simonbyrne์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ฑฐ๊ธฐ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? https://github.com/JuliaLang/julia/issues/4774#issuecomment -59428215์˜ ์˜๊ฒฌ์€ CoVector๊ฐ€ AbstractVector์˜ ํ•˜์œ„ ์œ ํ˜•์ด๋˜์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ Transpose{Matrix} <: AbstractArray ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์กฐ๊ธˆ ์ด์ƒํ•˜๊ฒŒ ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฌด์—‡์˜ ๊ฐ€์น˜๋ฅผ ์œ„ํ•ด, ๋‚˜๋Š” ์ƒ๊ฐ CoVector ๋Œ€๋ถ€๋ถ„์ฒ˜๋Ÿผ ํ–‰๋™ํ•œ๋‹ค Vector ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ  Vector ๋กœ ๋ณ€ํ™˜ Matrix ๋กœ ์—ด ๋งคํŠธ๋ฆญ์Šค ๋™์•ˆ CoVector ๋Š” Matrix ๋กœ ํ–‰ ํ–‰๋ ฌ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

covector์— ๋Œ€ํ•œ ์ธ๋ฑ์‹ฑ์ด ํ–‰ ํ–‰๋ ฌ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

ํฅ๋ฏธ๋กœ์šด ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. ์ „์น˜ / ์ฝ” ๋ฒกํ„ฐ ์œ ํ˜•์—์„œ _leading_ ์‹ฑ๊ธ€ ํ†ค ์ฐจ์› ๋งŒ ์‚ญ์ œํ•˜๋ฉด ์ผ์ด ๋” ์‰ฌ์›Œ ์ง€๊ฑฐ๋‚˜ ๋ณต์žกํ•ด ์ง‘๋‹ˆ๊นŒ?

(๋‚˜๋Š” ๊ด€์‹ฌ์„ ๊ฐ€์ง€๊ณ ์ด ๋ฌธ์ œ๋ฅผ ๋”ฐ๋ผ ์™”์ง€๋งŒ ๋‚ด ์„ ํ˜• ๋Œ€์ˆ˜๋Š” ์ถฉ๋ถ„ํžˆ ๋…น์Šฌ ์–ด์„œ ๊ธฐ์—ฌํ•  ์ž๊ฒฉ์ด ์—†๋‹ค๊ณ  ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค).

@mbauman :

์ „์น˜ / ์ฝ” ๋ฒกํ„ฐ ์œ ํ˜•์—์„œ ์„ ํ–‰ ๋‹จ์ผ ์ฐจ์› ๋งŒ ์‚ญ์ œํ•˜๋ฉด ์ผ์ด ๋” ์‰ฌ์›Œ ์ง€๊ฑฐ๋‚˜ ๋ณต์žกํ•ด ์ง‘๋‹ˆ๊นŒ?

์ž„์˜์˜ ์ˆ˜์˜ ์„ ํ–‰ ์‹ฑ๊ธ€ ํ†ค ์ฐจ์›์„ ํ—ˆ์šฉํ•˜๋ฉด ๋ฐฐ์—ด ์ธ๋ฑ์Šค๊ฐ€ ๋” ์ด์ƒ ์ž˜ ์ •๋ ฌ๋˜์ง€ ์•Š๊ณ  ""์ฒซ ๋ฒˆ์งธ ์ฐจ์›๊ณผ ๊ฐ™์€ ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ๊ณต๋ฆฌ๋กœ ์ž˜ ์ •๋ ฌ ํ•  ์ˆ˜์žˆ์„๋งŒํผ ๊ธฐ์ด ํ•  ์ •๋„๋กœ ๊ธฐ์ดํ•ฉ๋‹ˆ๋‹ค.

@tkelman :

# 4774 (์ฝ”๋ฉ˜ํŠธ)์˜ ์˜๊ฒฌ์€ CoVector๊ฐ€ AbstractVector์˜ ํ•˜์œ„ ์œ ํ˜•์ด๋˜์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์ง€๋งŒ Transpose {Matrix} <: AbstractArray๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์กฐ๊ธˆ ์ด์ƒํ•˜๊ฒŒ ๋ณด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ „์ ์œผ๋กœ ์„ ํ˜• ๋Œ€์ˆ˜ ์˜๋ฏธ๋ก ์—์„œ ๋ฐฐ์—ด ์˜๋ฏธ๋ก  (cf # 10064 ์ฐธ์กฐ)์„ ๋ถ„๋ฆฌํ•˜๊ณ  ํ˜ผํ•ฉ ๋œ ์žฅ์†Œ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ž„์ด ๋ถ„๋ช…ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

  • ๋ฐฐ์—ด ์˜๋ฏธ๋ก ์€ size, length, getindex, setindex, hcat, vcat, reshape, rot90 ...๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค.
  • ์„ ํ˜• ๋Œ€์ˆ˜ ์˜๋ฏธ๋ก ์€ +,-, *, /,, ', trace ...์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค.

cat ํ•จ์ˆ˜๋ฅผ AbstractArray ์˜ ํ•„์ˆ˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ผ๋ถ€๋กœ ์ •์˜ํ•˜๋ฉด cat Transpose{<:AbstractArray} ๋Š” ์—ฐ๊ฒฐ ๋™์ž‘์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„๋ช…ํžˆ AbstractArray ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. . ๋ชจ์–‘๊ณผ ์ธ๋ฑ์‹ฑ ๋งŒ ํ•„์ˆ˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ผ๋ถ€๋กœ ๊ฐ„์ฃผํ•˜๋ฉด ์ƒํ™ฉ์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š”์˜ ํ•„์ˆ˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ผ๋ถ€๋กœ ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ AbstractArray , ์ •๋‹นํ™”๋„ ์‰ฝ๊ฒŒ ์™œ ๊ฐ™์€ ์ข…๋ฅ˜์˜ SymTridiagonal ๋˜์–ด ์žˆ์ง€ AbstractArray ์ด์ƒ ์—ฐ๊ฒฐ ์ž‘์—… ์ดํ›„์˜, SymTridiagonal ์œ ์‚ฌํ•œ๋‹ค [SymTridiagonal(randn(5), randn(4)) randn(5)] ํ˜„์žฌ ์ •์˜๋˜์ง€ ์•Š์€ ์žˆ์Šต๋‹ˆ๋‹ค.

@toivoh :

covector์— ๋Œ€ํ•œ ์ธ๋ฑ์‹ฑ์ด ํ–‰ ํ–‰๋ ฌ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๊นŒ?

Transpose{Vector} ์˜ ์ธ๋ฑ์‹ฑ ๋™์ž‘์ด ์ผ๋ฐ˜ Vector ์™€ ๋™์ผํ•ด์•ผํ•œ๋‹ค๊ณ  ์ œ์•ˆํ•˜๋Š” ID๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆซ์ž ์œ ํ˜•์˜ ๊ฒฝ์šฐ v[1] ๋Š” v' * eโ‚ = v โ‹… eโ‚ ์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  v[1:2] ๋Š” v' * [eโ‚ eโ‚‚] ์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ eโ‚ ๋Š” ํ‘œ์ค€ ๋ฒ ์ด์‹œ์Šค Vector{Int} [1, 0, 0, ...] ๋ฐ eโ‚‚ ๋Š” [0, 1, 0, 0, ...] ์ž…๋‹ˆ๋‹ค. ์ธ๋ฑ์‹ฑ, ๋‚ด๋ถ€ ์ œํ’ˆ ๋ฐ ์กฐ์˜ฎ๊น€๊ณผ ๊ด€๋ จ๋œ ์ด๋Ÿฌํ•œ ์‹ ์›์„ ์œ ์ง€ํ•ด์•ผํ•œ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฃผ์žฅ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

(v')[1] == (eโ‚' * v'') == (v' * eโ‚)' == (v โ‹… eโ‚)' == conj(v โ‹… eโ‚)* = conj(v[1])

(์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ์ƒˆ๋กœ์šด ๊ณต๋ฆฌ์ด๊ณ  ๋„ค ๋ฒˆ์งธ ๋‹จ๊ณ„๋Š” ์Šค์นผ๋ผ๋ฅผ ์ „์น˜ํ•˜๋Š” ๊ฒƒ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค) Transpose{Vector} ๋กœ ์ธ๋ฑ์‹ฑํ•˜๋ฉด ๋ณธ์งˆ์ ์œผ๋กœ ์ „์น˜๊ฐ€ ๋ฌด์‹œ๋˜๊ณ  CTranspose{Vector} ๋กœ ์ธ๋ฑ์‹ฑ๋ฉ๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ์ด ๋ฌธ์ œ๋Š” ์ „์ ์œผ๋กœ ์„ ํ˜• ๋Œ€์ˆ˜ ์˜๋ฏธ๋ก ์—์„œ ๋ฐฐ์—ด ์˜๋ฏธ๋ก  (cf # 10064 ์ฐธ์กฐ)์„ ๋ถ„๋ฆฌํ•˜๊ณ  ํ˜ผํ•ฉ ๋œ ์žฅ์†Œ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ๋ฐฐ์—ด ์˜๋ฏธ๋ก ์€ size, length, getindex, setindex, hcat, vcat, reshape, rot90 ...๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค.
  • ์„ ํ˜• ๋Œ€์ˆ˜ ์˜๋ฏธ๋ก ์€ +,-, *, /,, ', trace ...์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ๊ด€์ ์— +1ํ•˜๊ณ  Transpose <: AbstractArray . ๋˜ํ•œ, covector๋ฅผ ์ธ๋ฑ์‹ฑ ํ•  ๋•Œ๋Š” ๋‹จ์ผ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด covector * ๋ฒกํ„ฐ (๋‹จ์ผ ์ธ๋ฑ์Šค์— ๋Œ€ํ•œ ์ถ•์†Œ)์˜ ๊ฒฐ๊ณผ๊ฐ€ ์Šค์นผ๋ผ (์ธ๋ฑ์Šค๊ฐ€ 0 ์ธ ๊ฐ์ฒด)๊ฐ€ ๋  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

@jihao : ์™œ ์šฐ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์›ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

(v')[1] == (eโ‚' * v'')

์ƒˆ๋กœ์šด ๊ณต๋ฆฌ๋กœ. covector๊ฐ€ ํ–‰ ํ–‰๋ ฌ๋กœ ์ธ๋ฑ์‹ฑํ•˜๋”๋ผ๋„ ์„ ํ˜• ์ธ๋ฑ์‹ฑ์œผ๋กœ ์ธํ•ด ์œ„์™€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์„ ํ˜• ๋Œ€์ˆ˜์™€ ๊ด€๋ จํ•˜์—ฌ ์ฝ” ๋ฒกํ„ฐ๋ฅผ ๋ณด๋Š” ๋ฐ +1ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ SymTridiagonal ์™€์˜ ์—ฐ๊ฒฐ์„ ์ •์˜ํ•ด์„œ๋Š” ์•ˆ ๋  ์ด์œ ๊ฐ€ ์—†์ฃ ?

๋ฐฐ์—ด์— ๋Œ€ํ•œ @toivoh ์„ ํ˜• ์ธ๋ฑ์‹ฑ์€ ๋จผ์ € ๋ฐฐ์—ด์„ ๋ฒกํ„ฐ๋กœ ์žฌ๊ตฌ์„ฑ ํ•œ ๋‹ค์Œ ์ƒˆ ๋ฒกํ„ฐ๋ฅผ ์ธ๋ฑ์‹ฑํ•˜์—ฌ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์„ ํ˜• ์ธ๋ฑ์‹ฑ์ด ์ „์น˜ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•˜๋ ค๋ฉด ์ „์น˜ ๋ฒกํ„ฐ์— ๋Œ€ํ•œ ์ธ๋ฑ์‹ฑ ๊ทœ์น™์„ ๋จผ์ € ์ •์˜ํ•˜์—ฌ ์„ ํ˜• ์ธ๋ฑ์‹ฑ ๊ทœ์น™์„ ํŒŒ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. (๋˜ํ•œ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ํ•‘์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.)

์„ ํ˜• ์ธ๋ฑ์‹ฑ์ด ์ €์žฅ ์ˆœ์„œ์— ๊ด€ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ์–ด์จŒ๋“  ๋ฒกํ„ฐ์˜ ์„ ํ˜• ์ธ๋ฑ์‹ฑ์„์œ„ํ•œ ๋‹ค๋ฅธ ํ•ฉ๋ฆฌ์ ์ธ ์ˆœ์„œ๋Š” ์—†์Šต๋‹ˆ๋‹ค. (๋งž์ถค๋ฒ• ์˜ค๋ฅ˜์— ๋Œ€ํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.)

๋ฉ”๋ชจ๋ฆฌ์—๋Š” ๊ณ ์œ  ํ•œ ์ˆœํšŒ ์ˆœ์„œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. Fortran ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ์—๋„ ์ฃผ์š” ์—ด, ์ฃผ์š” ํ–‰ ๋˜๋Š” ์—ญ์—ด ์ฃผ์š” ์ˆœ์„œ๋กœ ์š”์†Œ๋ฅผ ์ €์žฅํ•˜๋„๋ก ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์›๋ž˜ IBM Fortran I ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ˆ˜ํ–‰ ํ•œ ๊ฒƒ๊ณผ ๋™์ผ ํ•จ). ๋˜ํ•œ ๋ฐฐ์—ด๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์ˆœํšŒ ์ˆœ์„œ์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์˜ต์…˜์ด์žˆ๋Š” try์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ (# 10064 ์ฐธ์กฐ)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ์— ๋Œ€ํ•ด์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์„ ํ˜• ์ธ๋ฑ์‹ฑ์€ ์—ด ํ–‰๋ ฌ๊ณผ ์ „์น˜ (์—ด ๋ฒกํ„ฐ์˜ ๊ฒฝ์šฐ์™€ ๋™์ผ)์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ˆœ์„œ๋กœ ์š”์†Œ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ” ๋ฒกํ„ฐ๊ฐ€ ๋‹ฌ๋ผ์•ผํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‹ฌ๋ผ์•ผํ•œ๋‹ค๋ฉด ์ฝ” ๋ฒกํ„ฐ์— ๋Œ€ํ•œ ์ธ๋ฑ์‹ฑ์„ ์ „ํ˜€ ์ •์˜ํ•˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@toivoh ์˜ˆ ์ผ๋ฐ˜ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ๋™์ผํ•œ ์ •์˜๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฒฝ์šฐ ๋ชจ๋‘ ์„ ํ˜• ์ธ๋ฑ์‹ฑ์ด ์ผ๋ฐ˜ (ํŠœํ”Œ?) ์ธ๋ฑ์‹ฑ์—์„œ ํŒŒ์ƒ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Transpose ๊ฐœ์ฒด ์ธ๋ฑ์‹ฑ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์‹ฑ์ด ๊ฐ€๋Šฅํ•ด์•ผํ•œ๋‹ค๋Š” ๋ง์€ ์•„๋‹ˆ์ง€๋งŒ ์ธ๋ฑ์‹ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋ฐ˜๋“œ์‹œ ๋™์ผํ•œ ์ธ๋ฑ์‹ฑ ๋™์ž‘์„ ๊ฐ€์งˆ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋ณด์ˆ˜์ ์œผ๋กœ ์ธ๋ฑ์‹ฑ์„ ์ •์˜ํ•˜์ง€ ์•Š์€ ์ฑ„๋กœ๋‘๊ณ  ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ ํ˜• ๋Œ€์ˆ˜ ํ•จ์ˆ˜์˜ ๋งŽ์€ ์ˆœ์ˆ˜ Julia ๊ตฌํ˜„์€ Transpose๋กœ ์ธ๋ฑ์‹ฑํ•˜๊ธฐ๋ฅผ ์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ด€๋ จ๋œ ๋‘ ํ–‰๋ ฌ์— ๋Œ€ํ•ด ๊ฐ€๋Šฅํ•œ ๋Œ€์†Œ ๋ฌธ์ž (normal, transpose, ctranspose, conj?)๋ฅผ ๊ตฌ๋ถ„ํ•  ํ•„์š”๊ฐ€ ์—†์ง€๋งŒ ์ผ๋ฐ˜ ํ–‰๋ ฌ๋กœ ์ทจ๊ธ‰ํ•˜๋ฉด ์ˆœ์ˆ˜ Julia ํ–‰๋ ฌ ๊ณฑ์…ˆ (BLAS๊ฐ€ ์•„๋‹Œ ์ˆซ์ž ์œ ํ˜•์˜ ๊ฒฝ์šฐ)์„ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฝ๊ฐ„์˜ ๋กœ์ปฌ ๋ฉ”๋ชจ๋ฆฌ ์•ก์„ธ์Šค ํŒจํ„ด์„ ์–ป๊ธฐ ์œ„ํ•ด ์บ์‹œ ์ธ์‹ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งž์•„.

@Jutho : ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฑฐ๊ธฐ์— ๋งž์ถ”๋ ค๋ฉด ์ฝ” ๋ฒกํ„ฐ๋Š” ํ–‰ ํ–‰๋ ฌ์ฒ˜๋Ÿผ ์ธ๋ฑ์‹ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@toivoh , ๊ทธ๋“ค์ด ์•ž์— ์—ฌ๋ถ„์˜ ์ธ๋ฑ์Šค 1์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค๋ฉด, ๋‚˜๋Š” ๋™์˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ทธ๊ฒƒ์ด ๋‚ด ์ง„์ˆ ์—์„œ ์–ด๋–ป๊ฒŒ ์•”์‹œ๋˜๋Š”์ง€ ๋ณด์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋งคํŠธ๋ฆญ์Šค ๋งคํŠธ๋ฆญ์Šค ์ œํ’ˆ์— ๋Œ€ํ•ด์„œ๋งŒ ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. Matrix * vector ๋˜๋Š” covector * matrix๋Š” ๋ฉ”๋ชจ๋ฆฌ ์•ก์„ธ์Šค ํŒจํ„ด์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ผ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฐ˜ํ™˜ ์œ ํ˜•์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— (Matrix_vector = vector ๋˜๋Š” covector_matrix = covector) ๋‹ค๋ฅธ ํ•จ์ˆ˜ ์ •์˜๊ฐ€ ํ•„์š”ํ•œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด๋ฏ€๋กœ ther์€ ์ค„๋ฆฌ์•„์—์„œ ์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค์„ ํ˜ผํ•ฉํ•˜์ง€ ์•Š๋Š” ๋งค์šฐ ์‹ค์šฉ์ ์ธ ์ด์œ .

์ผ๋ฐ˜์ ์œผ๋กœ ์ €๋Š” N ์ฐจ์› ๋ฐฐ์—ด์„ ์ธ๋ฑ์‹ฑ ํ•  ๋•Œ ์ถ”๊ฐ€ ์ธ๋ฑ์Šค 1์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋Šฅ๋ ฅ์ด๋‚˜ ์˜ˆ๋ฅผ ๋“ค์–ด VecOrMat ์œ ํ˜• ๋ณ„์นญ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์—‰์„ฑํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ—ˆ์šฉํ•˜์ง€๋งŒ ์‹ค์ˆ˜๋ฅผ ์ € ์ง€๋ฅด๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์‹ค์ˆ˜๋ฅผ ๋” ๋Š๋ฆฌ๊ฒŒ ๊ฐ์ง€ ํ•  ์ˆ˜์žˆ๋Š” ์ด์œ ์ด๊ธฐ๋„ํ•ฉ๋‹ˆ๋‹ค. ํ…์„œ ๊ณฑ์˜ ๋ฒกํ„ฐ๋กœ ์ฒ˜๋ฆฌ ํ•  ๋•Œ ๋‹ค์ค‘ ์„ ํ˜• ๊ฐ์ฒด๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์„ ํ˜• ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ •ํ™•ํ•œ N ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ N ์ฐจ์› ๋ฐฐ์—ด์„ inexํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์œ ์šฉํ•œ ๋ฐฉ๋ฒ• ๋งŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฐ„ (์˜ˆ : ์ด๋Ÿฌํ•œ ๋ฐฐ์—ด ๋‘ ๊ฐœ๋ฅผ ๋”ํ•˜๊ฑฐ๋‚˜ ์Šค์นผ๋ผ๋ฅผ ๊ณฑํ•˜๋Š” ๊ฒฝ์šฐ). ๋‚ด ์‚ฌ์šฉ caes์—๋Š” ์ถฉ๋ถ„ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ๋Š” ์ œํ•œ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ๋ฐ›์•„ ๋“ค์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@Jutho : ์ข‹์•„, ์–ด์จŒ๋“  ๋ฐ˜ํ™˜ ์œ ํ˜•์ด ๋‹ฌ๋ผ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•„๋งˆ๋„ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์šฐ๋ฆฌ๊ฐ€ํ•˜๋ ค๋Š” ์ž‘์—…์„ ์„ค๋ช…ํ•˜๊ณ  ๋ช‡ ๊ฐ€์ง€ ๊ณต๋ฆฌ๋ฅผ ๋ถ€์—ฌํ•˜๋ ค๋Š” ์‹œ๋„์ž…๋‹ˆ๋‹ค.

์ถœ๋ฐœ์ ์ด ํ–‰๋ ฌ ๋Œ€์ˆ˜ (ํ–‰๋ ฌ๋งŒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•จ)๋ผ๋Š” ๋งค์šฐ ๋ช…ํ™•ํ•œ ํ•ฉ์˜์— ๋„๋‹ฌํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์˜ ๊ฒฝ์šฐ ์ˆœ์ˆ˜ ํ–‰๋ ฌ ์„ค์ •์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ํ•˜๋ ค๋Š” ๊ฒƒ์€ ์ง„์ •ํ•œ ์Šค์นผ๋ผ์™€ ๋ฒกํ„ฐ๋ฅผ ๊ฐ–๋„๋ก ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ์ˆœ์ˆ˜ ๋งคํŠธ๋ฆญ์Šค ์„ค์ •์„ ํ™•์žฅํ•˜๊ณ  ์ •์ œํ•˜๋Š” ๊ฒƒ์ด๋ฉฐ, ์ผ๊ด€์„ฑ, ์ฝ” ๋ฒกํ„ฐ๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์Šค์นผ๋ผ์™€ ๋ฒกํ„ฐ์— ๋Œ€ํ•œ ๋‚ด ๊ด€์ ์ž…๋‹ˆ๋‹ค (์ˆœ์ˆ˜ ํ–‰๋ ฌ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ) : ์Šค์นผ๋ผ๋Š” ํ–‰๋ ฌ์ด๋ฉฐ, ์œ ํ˜•์— ๋”ฐ๋ผ 1 x 1๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ๋Š” ํ–‰๋ ฌ์ด๋ฉฐ, ์œ ํ˜•์— ๋”ฐ๋ผ (์•„๋ž˜์—์„œ covector๋Š” ์œ ํ˜•์— ๋”ฐ๋ผ 1 x n์œผ๋กœ ์ œํ•œ๋˜๋Š” ํ–‰๋ ฌ์ด๋ผ๊ณ  ์ฃผ์žฅ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.)์ด ๊ด€์ ์—์„œ ์šฐ๋ฆฌ๋Š” ๋‘ ๊ฐ€์ง€ ๊ณต๋ฆฌ๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์•„๋ž˜์—์„œ ๋งค์šฐ ๊ณต์‹์ ์œผ๋กœ ์„ค๋ช…ํ•˜์ง€ ์•Š์Œ)

  • ํ™•์žฅ : ํ–‰๋ ฌ์—์„œ ํ–‰๋ ฌ๋กœ์˜ ํ•จ์ˆ˜๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ํŠน์ • ์œ ํ˜•์˜ ์ž…๋ ฅ์ด ์ฃผ์–ด์ง€๋ฉด ์ฃผ์–ด์ง„ ์ฐจ์›์—์„œ ํฌ๊ธฐ๊ฐ€ 1 ์ธ ์ถœ๋ ฅ ํ–‰๋ ฌ์„ ํ•ญ์ƒ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ์‚ฌ์‹ค์€ ์ถœ๋ ฅ ์œ ํ˜•์œผ๋กœ ์ธ์ฝ”๋”ฉ๋ฉ๋‹ˆ๋‹ค (์Šค์นผ๋ผ / ๋ฒกํ„ฐ / ์ฝ” ๋ฒกํ„ฐ๊ฐ€ ๋จ).
  • ๊ตฌ์ฒดํ™” : ์ˆœ์ˆ˜ ํ–‰๋ ฌ ์„ค์ •์—์„œ ํ–‰๋ ฌ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์ž…๋ ฅ์ด ํ•˜๋‚˜ ์ด์ƒ์˜ ์ฐจ์›์—์„œ 1 ํฌ๊ธฐ๋ฅผ ๊ฐ€์ ธ์•ผํ•˜๋Š” ๊ฒฝ์šฐ์ด ์‚ฌ์‹ค์ด ์œ ํ˜•์œผ๋กœ ์ธ์ฝ”๋”ฉ๋˜์ง€ ์•Š์€ ์ž…๋ ฅ์„ ๊ฑฐ๋ถ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ๋‚ด์šฉ์— ๋™์˜ํ•˜๋ฉด ๋ฒกํ„ฐ์˜ ์ „์น˜๊ฐ€ ์œ„์— ์„ค๋ช… ๋œ ์ฝ” ๋ฒกํ„ฐ ์œ ํ˜•์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. anx 1 ํ–‰๋ ฌ์˜ ์ „์น˜๋Š” 1 xn ํ–‰๋ ฌ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์˜ ์ฒซ ๋ฒˆ์งธ ์ฐจ์›์— ๋”ฐ๋ฅธ ํฌ๊ธฐ๊ฐ€ ํ•ญ์ƒ 1์ด๋ผ๋Š” ์‚ฌ์‹ค์„ ์ธ์ฝ”๋”ฉํ•˜๋ฉด ์œ„์—์„œ ์„ค๋ช…ํ•œ๋Œ€๋กœ ์ฝ” ๋ฒกํ„ฐ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.

ํ–‰๋ ฌ ๋Œ€์ˆ˜ ๊ด€์ ์—์„œ ์‹œ์ž‘ํ•˜๋ฉด ๋ง์ด ๋งž์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ MATlab์ด ์•„๋งˆ๋„ ์™„๋ฒฝํ•˜๊ฒŒ ๊ตฌํ˜„ ํ•œ ๋ชจ๋ธ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๋งคํŠธ๋ฆญ์Šค์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํ์‡„ ๋œ ์‹œ์Šคํ…œ์ด๋ฉฐ, ํ–‰๋ ฌ์— ๋Œ€ํ•œ ๋ชจ๋“  ์—ฐ์‚ฐ์€ ์ƒˆ๋กœ์šด ํ–‰๋ ฌ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ™•์‹คํžˆ์ด ๋ฌธ์ œ์˜ ์š”์  (๋ฒกํ„ฐ๊ฐ€ ๋‹จ์ˆœํžˆ ํ–‰๋ ฌ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ฌ๊ฐํ•˜๊ฒŒ ์ „์น˜ํ•˜๋Š” ๋ฒกํ„ฐ๋ฅผ ์ทจํ•˜๋Š” ๊ฒƒ)์€ ๊ทธ ํ–‰๋ ฌ ๋Œ€์ˆ˜ ๋ชจ๋ธ์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒƒ์ด๋ผ๋Š” ์ธ์ƒ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์ด์œ  ๋•Œ๋ฌธ์— 1x1 ํ–‰๋ ฌ์—์„œ ์ˆซ์ž๋ฅผ ๋ถ„๋ฆฌํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ๋ถˆ์ผ์น˜๋ฅผ ๋ณด์ด๊ธฐ ์‹œ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ํšจ์œจ์„ฑ. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋Œ€์•ˆ์€ ์„ ํ˜• ๋Œ€์ˆ˜ ๋ชจ๋ธ์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ•„๋“œ (์Šค์นผ๋ผ), ๋ฒกํ„ฐ ๊ณต๊ฐ„ (๋ฐ ํ•ด๋‹น ์ด์ค‘), ์„ ํ˜• ์—ฐ์‚ฐ์ž / ๋ณ€ํ™˜ ๊ณต๊ฐ„ (ํ–‰๋ ฌ) ์‚ฌ์ด์— ๋ถ„๋ช…ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค„๋ฆฌ์•„์˜ ์„ ํ˜• ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์€ ์Šค์นผ๋ผ์™€ ๋ฒกํ„ฐ๊ฐ€ ์žˆ๊ณ  ์‚ฌ์šฉ์ž๋ฅผ ์ถ”์ธกํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ช‡ ๊ฐ€์ง€ ์ฃผ๋ชฉํ• ๋งŒํ•œ ์˜ˆ์™ธ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” MATLAB ์ „ํ†ต์— ์ƒ๋‹นํžˆ ๋ฟŒ๋ฆฌ๋ฅผ๋‘๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์—์„œ ๋„ˆ๋ฌด ๋ฉ€์–ด์ง€๋Š” ๊ฒƒ์€ ๋งค์šฐ ํฐ ํ˜ผ๋ž€ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์˜ ๊ณต๋ฆฌ๋Š” ํšจ์œจ์„ฑ๊ณผ ์ •ํ™•์„ฑ์„ ์œ„ํ•ด ํ–‰๋ ฌ์—์„œ ์Šค์นผ๋ผ์™€ ๋ฒกํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ๋ถˆ์ผ์น˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ง„ํ–‰๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋‹ค๋ฅธ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์— ๋Œ€ํ•ด ํ™•์‹คํžˆ ๋“ฃ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ @Jutho์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์˜ ์š”์ ์€ MATLAB์˜ "๋ชจ๋“  ๊ฒƒ์ด ํ–‰๋ ฌ์ž…๋‹ˆ๋‹ค"๋ผ๋Š” ์˜๋ฏธ์—์„œ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. MATLAB์˜ "ํ›„ํ–‰ ๋‹จ์ผ ์ฐจ์›์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Œ"๊ทœ์น™์€ ์„ ํ˜• ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์—์„œ ์œ ๋‹ˆ๋ฒ„์Šค๋ฅผ ๋‹ซ๋Š” ๋ฐ ํ•„์š”ํ•˜์ง€๋งŒ์ด ๊ทœ์น™์€ T ์œ ํ˜•์˜ ๋ฉค๋ฒ„์™€ Array{T,N} ์œ ํ˜•์˜ ๋‹ค๋ฅธ ๋ฉค๋ฒ„๋ฅผ ํฌํ•จํ•˜๋Š” ๋™๋“ฑ ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋‘ N ์ด๋ฉฐ MATLAB์˜ ์œ ํ˜• ์‹œ์Šคํ…œ์„ ๊ฒฐ์ •ํ•  ์ˆ˜์—†๋Š” ์ฃผ๋œ ์ด์œ ์ž…๋‹ˆ๋‹ค. ( Joisha and Banerjee, 2006 ์˜ Theorem 1 ์ฐธ์กฐ-๊ฒฐ๊ณผ๊ฐ€ ๋ชจ์–‘์œผ๋กœ ๋ช…์‹œ๋˜์–ด ์žˆ์ง€๋งŒ ๋ฌธ์ œ๋Š” ์‹ค์ œ๋กœ ๋ฐฐ์—ด ์ˆœ์œ„๋ฅผ ๋ณ€๊ฒฝํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ ์˜๋ฏธ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š”์ง€์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.)

ํ•˜์ง€๋งŒ ์ €๋Š” ์—ฌ์ „ํžˆ ์Šค์นผ๋ผ, ๋ฒกํ„ฐ, ์ฝ” ๋ฒกํ„ฐ, ํ–‰๋ ฌ์˜ ๊ณฑ์…ˆ์ด ์—ฐ๊ด€๋˜์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ฝค ์ข‹์€ ํ•ฉ์˜๋ฅผ ์ด๋ฃจ์—ˆ๋‹ค ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค ( (v'*v)*v ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋‘ ๊ฐœ์˜ ๋น„ ์Šค์นผ๋ผ๊ฐ€ ๊ณฑํ•˜์—ฌ ์Šค์นผ๋ผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค). ์˜ˆ๋ฅผ ๋“ค์–ด v'*M*v ๋Š” ์Šค์นผ๋ผ, M*v ๋ฒกํ„ฐ ๋ฐ v'*M ๋ฒกํ„ฐ๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋ฉด์„œ ๋ชจ๋“  ๊ฒƒ์ด ๋งคํŠธ๋ฆญ์Šค๋ผ๋Š” ์˜๋ฏธ์—์„œ ์–ผ๋งˆ๋‚˜ ๋ฉ€๋ฆฌ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๊ฐ€ ํ”ผํ•˜๋ ค๋Š” ๊ฒƒ์ด ๋” ๋ฌด์—‡์ด๋ฉฐ ๋Œ€์‹  ์–ด๋–ค ์†์„ฑ์„ ์–ป๊ณ  ์‹ถ์Šต๋‹ˆ๊นŒ?

๊ฒฝ์šฐ์— ๋”ฐ๋ผ T ์™€ Array{T,0} ๋งŒ ํ•ฉ์น˜๋ฉด ์–ผ๋งˆ๋‚˜ ๋” ๋‚˜๋น ์งˆ๊นŒ์š”? (์˜ˆ : ์ธ๋ฑ์‹ฑ : M[:,2] ๋Š” Array{T,1} ๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ M[2,2] ๋Š” Array{T,0} ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

์šฐ๋ฆฌ๋Š” Transpose{Vector} ์—ฌ์ „ํžˆ ์œ ํšจํ•œ ์˜๋ฏธ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฐ๊ด€์„ฑ์— ๋Œ€ํ•œ ๋ชจ๋“  ์˜๊ฒฌ์„ ๋‹ค์‹œ ์ฝ์—ˆ๊ณ  ๊ทธ ํ† ๋ก ์˜ ๋Œ€๋ถ€๋ถ„์€ ์‹ค์ œ๋กœ ์—ฐ๊ด€์„ฑ ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ ๋‚ด๋ถ€ ์ œํ’ˆ๊ณผ ์™ธ๋ถ€ ์ œํ’ˆ์˜ ์˜๋ฏธ๋ก ์— ๊ด€ํ•œ ๊ฒƒ์ด๋ผ๊ณ  ๊ฒฐ๋ก ์ง€์—ˆ์Šต๋‹ˆ๋‹ค. ๋‘˜ ์ค‘ ํ•˜๋‚˜์— ํ•ด๋‹นํ•˜์ง€ ์•Š๋Š” ํ‘œํ˜„์„ ์ฐพ์œผ๋ฉด ์ง€์ ํ•˜์‹ญ์‹œ์˜ค.

Matlab ์œ ํ˜• ์˜๋ฏธ ์ฒด๊ณ„์˜ ๋ฌธ์ œ์ ์€ M*v' ๋ฐ v*M ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์•„๋„ ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. M ์ด m x 1 ์ด๋ฉด M*v' ๊ฐ€ ์œ ํšจํ•˜๊ณ  ์™ธ๋ถ€ ์ œํ’ˆ๊ณผ ์œ ์‚ฌํ•œ ์ˆ˜๋Ÿ‰์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค ( v' ๋Š” 1 x n ์ด๋ฏ€๋กœ). ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ M ๊ฐ€ 1 x m ์ด๊ณ  "can add trailing singletons"๊ทœ์น™์ด์žˆ๋Š” ๊ฒฝ์šฐ v*M ๋Š” n x 1 ๋ฐ 1 x m ์˜ ๊ณฑ์œผ๋กœ ํ‰๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค

T ์™€ Array{T,0} ์˜ ๊ฒฐํ•ฉ ๋ฌธ์ œ๋Š” APL ๋ฌธํ—Œ์—์„œ๋„ ์ œ๊ธฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. APL์—์„œ ๋‹ค์ฐจ์› ๋ฐฐ์—ด์€ ์žฌ๊ท€ ์ ์œผ๋กœ ์ค‘์ฒฉ๋˜์–ด Array{T,0} ๋ฐ T ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์„ ์ œ๊ธฐํ•ฉ๋‹ˆ๋‹ค. T ๊นŒ์ง€ ๋ฐ˜๋ณต๋จ), ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด "๋ถ€๋™ ๋ฐฐ์—ด"( Array{T,0} ๊นŒ์ง€๋งŒ ๋ฐ˜๋ณต๋จ)์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” More, 1973์ด ์‹ค์ œ๋กœ ๋‘ ์„ ํƒ์ด ๊ณต๋ฆฌ์ ์œผ๋กœ ์ผ๊ด€์„ฑ์ด ์žˆ์Œ์„ ์ฆ๋ช…ํ–ˆ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” APL์ด ๋Œ€๋ถ€๋ถ„์˜ ์‹ค๋ฌด์ž๊ฐ€ ์€ํ‡ดํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉํ•  ์งˆ๋ฌธ์„ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@jiahao : ๋‹น์‹ ์˜ ๊ด€์ฐฐ์ด ์–ผ๋งˆ๋‚˜ ๊ทผ๋ณธ์ ์ธ์ง€

v[i] = e_i' * v

์„ ํ˜• ๋Œ€์ˆ˜์™€ ์ธ๋ฑ์‹ฑ ์˜๋ฏธ๋ฅผ ํ•จ๊ป˜ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹น์‹ ์€ ๋˜ํ•œ ๊ณ ๋ คํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค

M[i,j] = e_i' * M * e_j

์ด๋Š” ์˜ค๋ฅธ์ชฝ์—์„œ ๊ธฐ์ € ๋ฒกํ„ฐ๊ฐ€์žˆ๋Š” ๋‚ด์ ์ด ๋‘ ๋ฒˆ์งธ ์ฐจ์›์˜ ์ธ๋ฑ์‹ฑ์— ํ•ด๋‹นํ•จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ” ๋ฒกํ„ฐ v' ์˜ i ๋ฒˆ์งธ ํ•ญ๋ชฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ธ๋ฑ์‹ฑ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

v' * e_i = v'[1, i]

๋ฌผ๋ก  ์ฒซ ๋ฒˆ์งธ ์ƒ‰์ธ์œผ๋กœ 1 ์ด์™ธ์˜ ๊ฒƒ์„ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์€ ๊ณณ์€ ์–ด๋””์ž…๋‹ˆ๊นŒ?
์–ด์จŒ๋“ , ์šฐ๋ฆฌ๋Š” ํ—ˆ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—

e_i' * v = v[i] = v[i, 1]

์œ„์˜ ๊ฒฝ์šฐ์—๋„ 1 ๋ฅผ ์ž๋ฆฌ ํ‘œ์‹œ ์ž๋กœ ํ—ˆ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

v' * e_i ๋Š” ์Šค์นผ๋ผ์ด๋ฏ€๋กœ e_1' * (v' * e_i) ๋Š” ์Šค์นผ๋ผ๊ฐ€ ์•„๋‹ˆ๋ผ ์ฝ” ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ v'[1, i] = e_1' * v' * e_i ๋ฅผ ์ƒ๊ฐํ•  ๋•Œ ์น˜์ˆ˜๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํŽธ์ง‘ : ์ด๊ฒƒ์ด ์ธ๋ฑ์‹ฑ์—์„œ ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๋…ผ์Ÿ ์ผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ?

์˜ˆ, ํ–‰๋ ฌ ์ธ๋ฑ์‹ฑ์€ ๋‹ค์Œ ๋…ผ๋ฆฌ์  ๋‹จ๊ณ„์ด๋ฉฐ e_i' * M * e_j ๋Š” ์‹ค์ œ๋กœ ์—ฐ๊ด€์„ฑ ๊ณต๋ฆฌ๊ฐ€ ์œ ์šฉํ•œ ํ‘œํ˜„์‹ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

(e_i' * M) * e_j = m_i' * e_j

e_i' * (M * e_j) = e_i' * m_j

๋™์ผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ–‰๋ ฌ ์ธ๋ฑ์‹ฑ์€ ๋ฒกํ„ฐ ์ธ๋ฑ์‹ฑ ๊ทœ์น™๊ณผ ์ฝ” ๋ฒกํ„ฐ ์ธ๋ฑ์‹ฑ ๊ทœ์น™์—์„œ ํŒŒ์ƒ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ธ๋ฑ์‹ฑ ๋™์ž‘์„ ํ—ˆ์šฉํ•˜๋Š” ๊ทœ์น™ ๋•Œ๋ฌธ์—์ด ๋ฌธ์ œ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด v[i, 1] ์™€ ๊ฐ™์€ ์‹์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
a) A*v' ๋ฐ v*A ์— ๋Œ€ํ•œ ๊ฐ€์งœ ์ผ€์ด์Šค๊ฐ€ ์ž‘๋™ํ•˜๋„๋กํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (์ „์ž๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ ํ›„์ž๋Š” ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค ๊ทœ์น™์„ ์ผ๊ด€์„ฑ์—†์ด ์ ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•˜์ง€ ์•Š์Œ).
b) v[i] = v[i, 1, 1, 1] ์˜ ๋™๋“ฑ์„ฑ์„ ๊ณ ๋ คํ•œ๋‹ค๋ฉด, ์ƒ์‘ํ•˜๋Š” ์ฝ” ๋ฒกํ„ฐ ์ธ๋ฑ์‹ฑ ๊ทœ์น™์€ (v')[1, 1, 1, i] ์ฒ˜๋Ÿผ ๋ณด์ผ ๊ฒƒ์ด๊ณ  ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ์ฝ” ๋ฒกํ„ฐ์— ๋Œ€ํ•ด ์ƒ์‘ํ•˜๋Š” "์ž„์˜์˜ ์„ ํ–‰ ์‹ฑ๊ธ€ ํ†ค ํ—ˆ์šฉ"๊ทœ์น™์„ ๊ฐ€์ ธ์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋…ํŠนํ•˜๊ฒŒ ์ •์˜ ๋œ 1 ์ฐจ์›์˜ ๋ถ€์กฑ์ด ๋งค์šฐ ํ˜ผ๋ž€ ์Šค๋Ÿฝ๋‹ค๋Š” ๊ฒƒ์„ ์•ˆ๋‹ค.

๋‚˜๋Š”์ด ์ƒ‰์ธ ์ถ”๋ก ์ด ์‹ค์ œ๋กœ ์•„๋ฌด๋ฐ๋„ ๊ฐ€์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์ธ๋ฑ์‹ฑ์€ N ์ฐจ์› ๋ฐฐ์—ด์˜ ์ผ๋ฐ˜์ ์ธ ์†์„ฑ์ด๋ฉฐ N=1 ๋˜๋Š” N=2 ๋Œ€ํ•œ ๊ฐ„๋‹จํ•œ ํ–‰๋ ฌ ์‹์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์€ ๋‹ค์†Œ ์‚ฌ์†Œํ•˜๊ณ  ๊ธฐ๋ณธ์ ์ธ ์š”์†Œ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •๋ณด. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋” ๋†’์€ ์ˆœ์œ„์˜ ๋ฐฐ์—ด๋กœ ์ผ๋ฐ˜ํ™”๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ธ๋ฑ์‹ฑ ํ•  ๋•Œ covector๊ฐ€ ์„ ํ–‰ 1์ด ํ•„์š”ํ•œ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ด์ „ ๊ฒŒ์‹œ๋ฌผ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๋ถˆ์ผ์น˜๊ฐ€ ๋น ๋ฅด๊ฒŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, ๋‚˜๋Š” ํ•˜๋‚˜์˜ ์ธ๋ฑ์Šค์— ์˜์กดํ•˜๋Š” ํŒฌ์ด ์•„๋‹ˆ์—ˆ๊ณ  ๊ทธ๊ฒƒ์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์‹ค์ œ๋กœ ์œ ์šฉํ•œ ๋‹จ์ผ ์ƒํ™ฉ์„ ์ƒ๊ฐํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋‚ด ๊ด€์ ์ด ๋„ˆ๋ฌด ์ œํ•œ์ ์ด๋ผ๋Š” ๊ฒƒ์„ ๋ฐ›์•„ ๋“ค์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š”์ด ๋ชจ๋“  ๊ฒƒ์„ ์™„์ „ํžˆ ์†Œํ™”ํ•˜์ง€๋Š” ๋ชปํ–ˆ์ง€๋งŒ ๋‚ด ์ฃผ์š” ์งˆ๋ฌธ์€ ๋‹จ์ˆœํžˆ size(covector) ๊ฐ€ (n,) ๊ฐ™๊ฑฐ๋‚˜ (1,n) ๊ฐ™์Šต๋‹ˆ๊นŒ?

AbstractArray ํŒจ๋ฐ€๋ฆฌ์˜ ์ผ๋ถ€๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ size ๋ฅผ ์ •์˜ ํ•  ํ•„์š”๋„ ์—†์Šต๋‹ˆ๋‹ค.

์‹ค์šฉ์ ์ธ ์ด์œ ๋กœ ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ •์˜ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ (์ˆซ์ž ๋“ฑ) ๋‚ด ํˆฌํ‘œ๋Š” (n,) ํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅ / ์ปจํ…Œ์ด๋„ˆ ๊ด€์ ์—์„œ ๋ฒกํ„ฐ์™€ ์ฝ” ๋ฒกํ„ฐ ์‚ฌ์ด์—๋Š” ๊ตฌ๋ณ„์ด ์—†๋‹ค๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ” ๋ฒกํ„ฐ๋ฅผ ์ปจํ…Œ์ด๋„ˆ๋กœ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฏ€๋กœ AbstractArray ๊ณ„์ธต ๊ตฌ์กฐ์— ์†ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„ ํ˜• ๋Œ€์ˆ˜ ์—ฐ์‚ฐ๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋ฒกํ„ฐ์™€ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํ•œ ๋ž˜ํผ ์œ ํ˜•์ž…๋‹ˆ๋‹ค.

"๋Œ€์ˆ˜ํ•™๊ณผ ๊ธฐํ•˜ํ•™์ด ๋ถ„๋ฆฌ๋˜์–ด์žˆ๋Š” ํ•œ, ๊ทธ๋“ค์˜ ๋ฐœ์ „์€ ๋Š๋ฆฌ๊ณ  ๊ทธ ์šฉ๋„๋Š” ์ œํ•œ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜์ด ๋‘ ๊ณผํ•™์ด ํ†ตํ•ฉ๋˜์—ˆ์„ ๋•Œ ๊ทธ๋“ค์€ ๊ฐ๊ฐ์˜ ์ƒํ˜ธ ํž˜์„ ๋นŒ๋ ค์ฃผ๊ณ  ์™„๋ฒฝ์„ ํ–ฅํ•ด ํ•จ๊ป˜ ํ–‰์ง„ํ–ˆ์Šต๋‹ˆ๋‹ค." -์กฐ์…‰ ๋ฃจ์ด์Šค ๋ผ๊ทธ๋ž‘์ฃผ

๋” ๋งŽ์ด ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์ง€ ๋งŒ ๋ฌผ๋ฆฌํ•™ ์ž์™€ ์—”์ง€๋‹ˆ์–ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์ •๊ตํ•œ ์ˆ˜ํ•™์  ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ์ •ํ™•ํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ์‹œ์Šคํ…œ์„ ์„ ํ˜ธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ MIT์˜์ด ๋ฆฌ์†Œ์Šค๊ฐ€ ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ...

http://ocw.mit.edu/resources/res-8-001-applied-geometric-algebra-spring-2009/lecture-notes-contents/

์‚ฌ์‹ค ์ƒ๊ฐํ•ด ๋ณด๋ฉด ๋” ๊ณตํ‰ํ•˜๋‹ค๊ณ 

e_i' * x = x[i, :] # x is a vector or matrix
x * e_j  = x[:, j] # x is a covector or matrix

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋งคํŠธ๋ฆญ์Šค ์ธ๋ฑ์‹ฑ์„ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š”

e_i' * M * e_j = e_i' * (M * e_j) = e_i' * M[:, j] = M[:, j][i, :] = M[i, j]
e_i' * M * e_j = (e_i' * M) * e_j = M[i, :] * e_j  = M[i, :][:, j] = M[i, j]

ํ˜„์žฌ ์ด๊ฒƒ์€ ์ค„๋ฆฌ์•„์—์„œ ์ž˜ ์œ ์ง€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด v[i, :] ํ˜„์žฌ ์Šค์นผ๋ผ๊ฐ€ ์•„๋‹Œ 1x1 ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. (ํ•˜์ง€๋งŒ ์•ˆ ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค)
e_i' * M * e_j ์—์„œ ํ–‰๋ ฌ ๊ณฑ์…ˆ์˜ ์—ฐ๊ด€์„ฑ์€ ๋‹ค๋ฅธ ์ฐจ์› M[:, j][i, :] = M[i, :][:, j] ๋”ฐ๋ผ ์ž๋ฅด๋Š” commutativity์— ํ•ด๋‹นํ•˜๋ฉฐ, ์ด๋Š” ๋ฐ”๋žŒ์งํ•œ ๊ธฐ๋Šฅ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.
์œ„์˜ reasoing ๋ผ์ธ์— ์˜ํ•ด ์šฐ๋ฆฌ๋Š”

v'[:,i] = conj(v[i])

@Jutho :์ด "๋ฐ˜๋ณต ๋œ ์Šฌ๋ผ์ด์Šค๋กœ ์ธ๋ฑ์‹ฑ"ํŒจ๋Ÿฌ๋‹ค์ž„์ด ๋” ๋†’์€ ์ฐจ์›์˜ ๋ฐฐ์—ด / ํ…์„œ์— ์ผ๋ฐ˜ํ™”ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค์— ๊ฐ ์ฐจ์›์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ์Šฌ๋ผ์ด์‹ฑ์„ ์ˆœ์„œ์— ๊ด€๊ณ„์—†์ด ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ e_i ๋“ฑ์— ํ•ด๋‹นํ•˜๋Š” 1 ์ฐจ ํ…์„œ๊ฐ€์žˆ๋Š” ์ผ๋ จ์˜ ์ˆ˜์ถ•์— ํ•ด๋‹นํ•˜๋ฉฐ, ์–ด๋–ค ์ˆœ์„œ๋กœ๋„ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค (์–ด๋–ค ์ฐจ์›์ด ์ผ์น˜ํ•˜๋Š”์ง€ ์ถ”์ ํ•˜๋Š” ํ•œ).

์ด "๋ฐ˜๋ณต ๋œ ์Šฌ๋ผ์ด์Šค๋กœ ์ธ๋ฑ์‹ฑ"ํŒจ๋Ÿฌ๋‹ค์ž„์ด ๋” ๋†’์€ ์ฐจ์›์˜ ๋ฐฐ์—ด / ํ…์„œ์— ์ผ๋ฐ˜ํ™”ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค์— ๊ฐ ์ฐจ์›์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ์Šฌ๋ผ์ด์‹ฑ์„ ์ˆœ์„œ์— ๊ด€๊ณ„์—†์ด ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ e_i ๋“ฑ์— ํ•ด๋‹นํ•˜๋Š” 1 ์ฐจ ํ…์„œ๋ฅผ ๊ฐ€์ง„ ์ผ๋ จ์˜ ์ˆ˜์ถ•์— ํ•ด๋‹นํ•˜๋ฉฐ, ์–ด๋–ค ์ˆœ์„œ๋กœ๋„ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค (์–ด๋–ค ์ฐจ์›์ด ์ผ์น˜ํ•˜๋Š”์ง€ ์ถ”์ ํ•˜๋Š” ํ•œ).

์˜ˆ ์ €๋Š” ํ…์„œ ์ˆ˜์ถ• ๋“ฑ์— ๋งค์šฐ ์ต์ˆ™ํ•˜๋ฉฐ ์‹ค์ œ๋กœ ํ–‰๋ ฌ ์š”์†Œ / ํ…์„œ ์š”์†Œ๋ฅผ ์–ป๋Š” ๊ฒƒ์€ ํ‘œ์ค€ ๊ณ„์‚ฐ ๊ธฐ๋ฐ˜์—์„œ ๊ธฐ๋Œ€ ๊ฐ’์„ ์ทจํ•˜๋Š” ๊ฒƒ๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ผ๋ถ€ ๊ธฐ์ € ๋ฒกํ„ฐ๋กœ ์ถ•์†Œํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค (์ตœ์†Œํ•œ ์ง๊ต ๊ธฐ์ €๊ฐ€์žˆ๋Š” ํ•œ ), ๊ทธ๋Ÿฌ๋‚˜ ์ธ๋ฑ์Šค๊ฐ€ e_i ๋˜๋Š” e_i' ์™€์˜ ์ถ•์†Œ์— ํ•ด๋‹นํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ๊ณ ์œ  ํ•œ ์—ฐ๊ด€์„ฑ์€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Š” ํ•ด๋‹น ์ธ๋ฑ์Šค๊ฐ€ ๊ณต๋ณ€ ๋˜๋Š” ๋ฐ˜ ๋ณ€์„ฑ ์œ„์น˜์— ๋‚˜ํƒ€๋‚˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์— ํ•ด๋‹นํ•˜๋ฉฐ ๊ณ ์œ  ํ•œ ๊ฒฐ์ •์ด ์—†์Šต๋‹ˆ๋‹ค. ์ƒ์œ„ ๋ฐ ํ•˜์œ„ ์ธ๋ฑ์Šค์˜ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์กฐํ•ฉ์—๋Š” ์œ ์šฉํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ e_i ๋ฐ e_i' ์™€ ๊ณ„์•ฝํ•˜๋Š” ๊ฒƒ์€ ์ˆ˜ํ•™์  ๊ด€์ ์—์„œ์ด ์งˆ๋ฌธ์„ ์ œ๊ธฐํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์กฐ์ฐจ ์•„๋‹™๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์‹ค์ œ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆ˜ํ•™์  ๋งคํ•‘์€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์˜ ์ „์น˜. ์ „์น˜๋Š” ์„ ํ˜• ๋งต (ํ–‰๋ ฌ)์— ๋Œ€ํ•ด ์ •์˜ ๋œ ์—ฐ์‚ฐ์ด๋ฉฐ ์ด์ค‘ ๋ฒกํ„ฐ๋ฅผ ์—ด ๋ฒกํ„ฐ๋กœ ์“ฐ๋Š” ๊ฒฝ์šฐ์—๋„ ํ–‰๋ ฌ ์ „์น˜์—๋งŒ ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์˜ ์ „์น˜ (transpose)๋Š” ํ–‰๋ ฌ ๋Œ€์ˆ˜ (์‹ค์ œ๋กœ ๋ฒกํ„ฐ๊ฐ€ n x 1 ํ–‰๋ ฌ ์ธ ๊ฒฝ์šฐ)์— ๋„์ž… ๋œ ํŽธ๋ฆฌํ•œ ํŠธ๋ฆญ์ด๋ฉฐ (conjugate์—์„œ ์ •๊ทœ ๋งคํ•‘์ด์žˆ๋Š” ์œ ํด๋ฆฌ๋“œ ๊ณต๊ฐ„์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ) ๋ฒกํ„ฐ ๊ณต๊ฐ„์„ ์ด์ค‘ ๊ณต๊ฐ„์œผ๋กœ.

ํŠนํžˆ ์œ„์—์„œ ์„ค๋ช…ํ•œ ์†์„ฑ์„ ์›ํ•˜๋ฉด M[i,:] ๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด ( 1xn ํ–‰๋ ฌ ๋˜๋Š” ์ฝ” ๋ฒกํ„ฐ)๋ฅผ ๋ฐ˜ํ™˜ ํ•œ ๋‹ค์Œ M[:,i] ( nx1 ํ–‰๋ ฌ ๋˜๋Š” ๋ฒกํ„ฐ). ์ด๊ฒƒ์ด ๋” ๋†’์€ ์ฐจ์›์œผ๋กœ ๋ช…ํ™•ํ•˜๊ฒŒ ์ผ๋ฐ˜ํ™”๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์€ ์ •ํ™•ํžˆ์ด ๋ฌธ์ œ์˜ ์ฃผ์š” ๋…ผ์˜ ์‚ฌํ•ญ ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ์ˆซ์ž๋กœ ์ธ๋ฑ์Šค ๋œ ์ฐจ์›์ด ์‚ญ์ œ๋˜๋Š” APL ์ธ๋ฑ์‹ฑ์„ ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค (์˜ˆ : ๋‘˜ ๋‹ค M[:,i] ๋ฐ M[i,:] ๋Š” ์ˆœ์œ„ 1 ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ๋ฒกํ„ฐ๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ธ๋ฑ์‹ฑ์€ ๋ฐฐ์—ด์˜ ์†์„ฑ์ด๋ฉฐ ์ธ๋ฑ์‹ฑ ๋™์ž‘๊ณผ ์„ ํ˜• ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์ด ํ˜ผํ•ฉ๋˜์–ด ์ฒ˜์Œ์— ๋ชจ๋“  ํ˜ผ๋ž€ / ๋ถˆ์ผ์น˜๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค. N=2 ๋“ฑ๊ธ‰ ๊ฐ์ฒด์˜ ํ์‡„ ๋œ ์ƒํƒœ๊ณ„ ๋‚ด์— ๋จธ๋ฌด๋ฅด๋Š” ํ•œ ์ผ๊ด€์„ฑ์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ชจ๋“  ๊ฒƒ์ด ํ–‰๋ ฌ์ด๋ฉฐ ๋ฒกํ„ฐ์™€ ์ˆซ์ž์ด๋ฉฐ ๋” ๋†’์€ ์ฐจ์›์˜ ๋ฐฐ์—ด์€ ๊ณ ๋ คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋˜ํ•œ ๋‹น์‹ ์ด ๋งํ–ˆ๋“ฏ์ด ์œ„์˜ ์ถ”๋ก ์— ์˜ํ•ด M[i,:] ์ด ์ฝ” ๋ฒกํ„ฐ๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ covector๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ APL ์ธ๋ฑ์‹ฑ๊ณผ ๊ทผ๋ณธ์ ์œผ๋กœ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์ˆ˜์ค€์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ APL ์ธ๋ฑ์‹ฑ์„ ์„ ํ˜ธํ•œ๋‹ค๋ฉด (๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค) ๊ทธ ์„ธ๊ณ„์™€ ์ฝ” ๋ฒกํ„ฐ๊ฐ€ ์‚ฌ๋Š” ์„ธ๊ณ„ ์‚ฌ์ด์— ์„ ์„ ๊ทธ๋ฆด ์œ„์น˜๊ฐ€ ๋ฌธ์ œ๊ฐ€๋ฉ๋‹ˆ๋‹ค. (๋‚˜๋Š” ๋‘˜์„ ํ™”ํ•ด์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋žฌ๋Š”๋ฐ, ์•„๋งˆ๋„ ๋‚˜๋จธ์ง€๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ํฌ๊ธฐํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ด๋ฏธ ๊นจ๋‹ฌ์•˜์„ ๊ฒƒ์ž…๋‹ˆ๊นŒ?)

์ด ๊ฐˆ๋“ฑ์€ ๋‹น์‹ ์ด ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•œ๋‹ค๋ฉด ๊ทธ๋ฆฌ ๋†€๋ผ์šด ์ผ์ด ์•„๋‹ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • APL ์ธ๋ฑ์‹ฑ์—์„œ๋Š” ์˜๋ฏธ ์žˆ๊ณ  ์ธ๋ฑ์‹ฑ ๊ฐ€๋Šฅํ•œ ์ฐจ์› ๋งŒ ๊ฒฐ๊ณผ์— ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€๋Š” ์••์ฐฉ๋ฉ๋‹ˆ๋‹ค.
  • v' ๋กœ ๊ทธ๋ ‡๊ฒŒํ•œ๋‹ค๋ฉด v' = conj(v) ๊ฐ–๊ฒŒ๋ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ์ฝ” ๋ฒกํ„ฐ๋Š” ๋ˆ„๋ฝ ๋œ 1 ์ฐจ์›์„ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๊ณฑ์…ˆ, ๋”ํ•˜๊ธฐ / ๋นผ๊ธฐ ๋ฐ ์™ผ์ชฝ ๋‚˜๋ˆ—์…ˆ์„ ์ •์˜ํ•˜์—ฌ ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์ด ์ฝ” ๋ฒกํ„ฐ๋ฅผ ์ œํ•œํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์‹œ์ž‘์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•„์ด๋””์–ด๋Š” ๊ทธ๋“ค์„ <: AbstractArray ๋งŒ๋“ค์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด LinearOperator ์œ ํ˜•์˜ ํ•˜์œ„ ์œ ํ˜•์ด๋˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ผ๊นŒ์š”? (๋‚ด๊ฐ€ ์•„๋Š” ๊ฒƒ์€ ์ด์ „์— ๋…ผ์˜๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ๊ฒฐ๋ก ์„ ์ž˜ ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.)

๋‹ค์ค‘ ์ƒ์†์ด ์—†๊ฑฐ๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ์–ธ์–ด ๊ตฌ์„ฑ (๋‘˜ ๋‹ค ๋…ผ์˜ ์ค‘์ž„)์€ ํŠน์ • ๊ฐœ๋…์ด '์•”์‹œ ์ '์ธํ„ฐํŽ˜์ด์Šค, ์ฆ‰ ์ •์˜ํ•ด์•ผํ•˜๋Š” ๋ฉ”์„œ๋“œ ์ง‘ํ•ฉ์— ์˜ํ•ด์„œ๋งŒ ๊ตฌํ˜„๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ณต์ž๋Š” ์ด๋Ÿฌํ•œ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ ์„ ํ˜• ์—ฐ์‚ฐ์ž๋Š” ์œ ํ˜• ๊ณ„์ธต ๊ตฌ์กฐ๊ฐ€ ์•„๋‹Œ ๋ฉ”์„œ๋“œ ์ง‘ํ•ฉ์— ์˜ํ•ด ์ง€์ •๋˜์–ด์•ผํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๊ฐœ๋… ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ถ”์ƒ ์œ ํ˜•์ด LinearOperator ์ด๊ณ  ๊ทธ ํ•˜์œ„ ์œ ํ˜•์ด ๋  Matrix ๊ฐ€์—†๋Š” ๊ฒƒ์€ ์ด์ƒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@toivoh ์ด๊ฒƒ์€ ์ค‘์š”ํ•œ ๊ณ ๋ ค ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ œ๊ฐ€ row(M,i) ๋ฐ col(M,i) ์™€ ๊ฐ™์€ ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ์ œ์•ˆํ•˜์—ฌ ํ–‰๋ ฌ์—์„œ i ๋ฒˆ์งธ ๋ฒกํ„ฐ ๋˜๋Š” ์ฝ” ๋ฒกํ„ฐ๋ฅผ ์ถ”์ถœํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” 2 ์ฐจ์› ๋ฐฐ์—ด M ๋ฐ ํ–‰๋ ฌ ๋Œ€์ˆ˜์— ๊ด€์‹ฌ์ด์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์„์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” MATLAB ์Šคํƒ€์ผ ์ธ๋ฑ์‹ฑ๋ณด๋‹ค ์•ฝ๊ฐ„ ๋œ ๋ช…ํ™• ํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ „๋ฐ˜์ ์œผ๋กœ ๋ฒกํ„ฐ์˜ ๊ฐœ๋…์„ ๊ฐœ๋…์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ์ด์ค‘ / ์ „์น˜ / ์ฝ” ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ƒํ™ฉ์„ ๋ช…ํ™•ํ•˜๊ฒŒํ•˜๋Š” ๋ฐ ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค. ์–‘์ž ์—ญํ•™์˜ ๊ฒฝ์šฐ, ๋ฒกํ„ฐ์™€ ์ฝ” ๋ฒกํ„ฐ ๊ฐ„์˜ ์ด๋Ÿฌํ•œ ๊ตฌ๋ณ„์ด ๋ณต์žกํ•œ ๋ฒกํ„ฐ์— ๋งค์šฐ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ํ•„๋“œ๊ฐ€ โ€‹โ€‹Dirac์˜ ๋ธŒ๋ผ์ผ“ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๋›ฐ์–ด ์˜ฌ๋ž์œผ๋ฉฐ Dirac์˜ ํ‘œ๊ธฐ๋ฒ•์ด์ด๋ฅผ ๋ช…๋ฐฑํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. Julia๊ฐ€์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ• ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ณ ์ฐจ์› ์ €์žฅ ๋ฐฐ์—ด ๋ฐ ๊ณ ์ฐจ์› ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ์œ„ํ•œ ์ข‹์€ ๋„๊ตฌ๊ฐ€๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. (์šฐ๋ฆฌ๊ฐ€ ์š•์‹ฌ ์ด๋‹ˆ๊นŒ?)

MATLAB์— ๋Œ€ํ•œ ๊ฒฝํ—˜์ด ์žˆ๊ณ  ๋Œ€๋ถ€๋ถ„ ์‹ค์ œ ํ–‰๋ ฌ์— ์ต์ˆ™ํ•œ ์‚ฌ๋žŒ (ํ•˜๋“œ ์ฝ”์–ด ์„ ํ˜• ๋Œ€์ˆ˜ ๊ด‘์‹ ์ž๋Š” ์•„๋‹˜)์ด ์šฐ๋ฆฌ ์ค‘ ์†Œ์ˆ˜๊ฐ€ ์ฃผ์žฅํ•˜๋Š” ๊ฒƒ์ด ์™œ ์ค‘์š”ํ•œ์ง€ ์ฒ˜์Œ์—๋Š” ๊นจ๋‹ซ์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ €๋Š” ๋ฏฟ์œผ์„ธ์š”.

์•ž์„œ ๋ง์”€ ๋“œ๋ ธ์ง€๋งŒ ๋ฐ˜๋ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚ด ๊ด€์ ์—์„œ ์šฐ๋ฆฌ๋Š” ์šฐ์„  ์ˆœ์œ„ ๋ชฉ๋ก์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์ธ๊ณผ ๊ด€๊ณ„๋Š” ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ‘๋‹ˆ๋‹ค.

(1) ๋ฐฐ์—ด์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  Julia ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•  ์ €์žฅ์†Œ ์ปจํ…Œ์ด๋„ˆ์ด๋ฉฐ์ด๋ฅผ์œ„ํ•œ ์ตœ์ƒ์˜ ์˜๋ฏธ ์ฒด๊ณ„๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์–ด์จŒ๋“  APL ์Šคํƒ€์ผ์˜ ๊ทœ์น™์€ ์ €์—๊ฒŒ ์•„์ฃผ ์ข‹์€ ํ•ด๊ฒฐ์ฑ… ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด์—, ํ›„ํ–‰ 1 ์ฐจ์› ์ธ๋ฑ์Šค๊ฐ€์žˆ๋Š” ๊ฐ€์ •์ด์žˆ๋Š” MATLAB ์Šคํƒ€์ผ์˜ ์ตœ์†Œ 2 ์ฐจ์› ๋ฐฐ์—ด์€ ๋ถ€์ž์—ฐ์Šค๋Ÿฝ๊ณ  ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ ๋ณด์ด๋ฉฐ Jutho๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ถ”์ ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ์—‰์„ฑํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์ด์–ด์งˆ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ์ฐจ์›. ์ง€๊ธˆ๊นŒ์ง€ v ๋ฒกํ„ฐ์˜ ๊ฒฝ์šฐ v ๊ฐ€ 1 ์ฐจ์›์ด๋ฏ€๋กœ v[i,:] ์ฝ”๋“œ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. + ๋ฐ .* ์™€ ๊ฐ™์€ ์š”์†Œ ๋ณ„ ์—ฐ์‚ฐ์€ ํ–‰๋ ฌ ๋˜๋Š” ๋‹ค์ค‘ ์„ ํ˜• ๋Œ€์ˆ˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ ํด๋ž˜์Šค์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ์‚ฌ๋žŒ๋“ค์ด ๋งŒ๋“œ๋Š” ์œ ์ผํ•œ ์–‘๋ณด ์ €์žฅ์†Œ ์ปจํ…Œ์ด๋„ˆ๋Š” .* ๋“ฑ์˜ ์ถ”๊ฐ€ ์ ์ž…๋‹ˆ๋‹ค.

(2) ์ „๋ถ€๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์˜ Julia ์‚ฌ์šฉ์ž๋Š” ํ–‰๋ ฌ ๋Œ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋Œ€๋ถ€๋ถ„ * ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ผ๋ถ€ ๋ฒกํ„ฐ ๋ฐ ํ–‰๋ ฌ ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ๊ตฌ๋ฌธ ์„คํƒ•์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค (๊ทธ๋Ÿฌ๋‚˜ ํ–‰๋ ฌ ๋ถ„ํ•  ๋“ฑ์ด์žˆ์„ ์ˆ˜ ์žˆ์Œ). ์ด ์‹œ์Šคํ…œ์—์„œ๋Š” 1 ์ฐจ์› ๋ฐฐ์—ด๊ณผ 2 ์ฐจ์› ๋ฐฐ์—ด์„ ๊ฐ๊ฐ ์—ด ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์™„์ „ํžˆ ๊ธฐ๋Šฅํ•˜๋Š” ํ–‰๋ ฌ ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ํ–‰ ๋ฒกํ„ฐ (์ฝ” ๋ฒกํ„ฐ)์™€ ์ „์น˜ ์—ฐ์‚ฐ ' ํ•ฉ๋‹ˆ๋‹ค. ํ–‰ ๋ฒกํ„ฐ๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์˜๋ฏธ์—์„œ 1 ์ฐจ์› ๋ฐฐ์—ด์ด๋ฉฐ, ๊ทธ ์ž์ฒด๋กœ ์ธ๋ฑ์‹ฑ๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค (ํ™•์‹คํžˆ covec[1,i] !!) APL ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ถ€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์™€ covectors ๋ฐ ํ˜•์‹ ์‹œ์Šคํ…œ ์‚ฌ์ด์˜ ์ฐจ์ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์›์น™์ ์œผ๋กœ ...์ด ์ด์ƒ์ ์ด (์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ์˜คํžˆ๋ ค ๋ž˜ํผ ํ˜• ์ด์ƒ ๋ฐ 2 ์ฐจ์› ๋ฐฐ์—ด์˜ typealiases ๊ฐ™์€ ํ–‰๋ ฌ ๋ฐ ๋ฒกํ„ฐ๋ฅผ ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์šด์ด ๊ธฐ์–ต์ž…๋‹ˆ๋‹ค ๊ทธ๊ฒƒ๋“ค๋„ ํฌ์žฅํ•˜์ง€๋งŒ ์š”์ ์€ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค). ํƒ€์ž… ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” CoVector * Vector ๊ฐ€ ์Šค์นผ๋ผ์ด๊ณ  Vector * CoVector ๊ฐ€ ํ–‰๋ ฌ์ž„์„ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. toivoh๊ฐ€ ๋งํ–ˆ๋“ฏ์ด _MATLAB ๊ด€์ ์—์„œ CoVector๋Š” "๋ˆ„๋ฝ ๋œ"์ฒซ ๋ฒˆ์งธ ์ฐจ์›์„ ์ •ํ™•ํžˆ ์ถ”์ ํ•ฉ๋‹ˆ๋‹ค ._ ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” ์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋ฅผ ๊ตฌ์„ฑ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ์„ ์ž…๋ ฅํ•˜๊ณ  * ๋ฐ ' ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ด€์‹ฌ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์€ ๊ทธ ์ฐจ์ด๋ฅผ ์•Œ์•„ ์ฐจ๋ฆฌ๊ณ  ๊ฐ์‚ฌ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ€์žฅ ํฐ ๋ณ€ํ™”๋Š” M[i,:] ๋ฅผ ์ƒˆ ํ•จ์ˆ˜ row(M,i) ํ•˜๊ฑฐ๋‚˜ Transpose(M[i,:]) ๋˜๋Š” M[i,:]' ์™€ ๊ฐ™์€ ๋ž˜ํผ ํด๋ž˜์Šค๋กœ ๋ณ€ํ™˜ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Dirac ํ‘œ๊ธฐ๋ฒ•์ฒ˜๋Ÿผ ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ๋ฒกํ„ฐ์ธ์ง€ ์ฝ” ๋ฒกํ„ฐ์ธ์ง€ ์ ˆ๋Œ€ ์žŠ์ง€

(3) ์šฐ๋ฆฌ ์ค‘ ์ผ๋ถ€๋Š” ๋‹ค์ค‘ ์„ ํ˜• ๋Œ€์ˆ˜์— ๊ด€์‹ฌ์ด ์žˆ๊ณ  ์ด์ค‘ ๊ณต๊ฐ„๊ณผ ์ „์น˜ ๋“ฑ์˜ ์ฐจ์ด๋ฅผ ๋ฐฐ์›Œ์•ผํ–ˆ์Šต๋‹ˆ๋‹ค. Jutho๊ฐ€ ์ด์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. Julia์˜ ๋ฐฐ์—ด์€ ์ด๋ฏธ ๋” ๋†’์€ ์ฐจ์›์˜ ํ…์„œ๋ฅผ์œ„ํ•œ ํ›Œ๋ฅญํ•œ ์ €์žฅ ์žฅ์น˜์ด๋ฉฐ, ์šฐ๋ฆฌ์™€ ๊ฐ™์€ ์‚ฌ๋žŒ๋“ค์€ ์ถ”๊ฐ€ ํŒจํ‚ค์ง€ (Base๋กœ ๊ฐˆ ์ˆ˜๋„ ์žˆ๊ณ  ์—†์„ ์ˆ˜๋„ ์žˆ์Œ)๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. 2๋ณด๋‹ค ํฐ ์ฐจ์› ๋ฐฐ์—ด์— ์ •์˜ ๋œ ' ๋˜๋Š” * ์™€ ๊ฐ™์€ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•˜์ง€๋„, ์›ํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ์ธ๋ฑ์Šค๋ฅผ ๋ช…์‹œ ์ ์œผ๋กœ ์žฌ์ •๋ ฌํ•˜์—ฌ ๋” ๊น”๋”ํ•˜๊ฒŒ ์ˆ˜ํ–‰ ํ•  ์ˆ˜์—†๋Š” ' ๋Œ€ํ•œ ์Šคํ† ๋ฆฌ์ง€ ์ง€ํ–ฅ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ›„ํ–‰ 1 ์ฐจ์› ์ธ๋ฑ์Šค์— ๋Œ€ํ•œ ์ „์ฒด ์•„์ด๋””์–ด๋Š” ๊ฐœ๋…์„ ๋œ ๋งค๋ ฅ์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ MATLAB๊ณผ ๊ฐ™์ด 1 ์ฐจ์› ๋ฐ 2 ์ฐจ์› ๋ฐฐ์—ด์—๋งŒ ' ์„ ์œ ์ง€ํ•˜์‹ญ์‹œ์˜ค. MATLAB์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜์‹ญ์‹œ์˜ค ...)

์™„์ „ํžˆ ๊ธฐ๋Šฅํ•˜๋Š” ํ–‰๋ ฌ ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ํ–‰ ๋ฒกํ„ฐ (์ฝ” ๋ฒกํ„ฐ)์™€ ์ „์น˜ ์—ฐ์‚ฐ '๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด ์ง„์ˆ ์€ ์‹ค์ œ๋กœ ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์„ ์ž˜๋ผ๋ƒ…๋‹ˆ๋‹ค. ์ธ๋ฑ์‹ฑ, ์กฐ์˜ฎ๊น€ ๋ฐ * ์ œํ’ˆ์€ ๋ชจ๋‘ ํ˜ผํ•ฉ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ์ƒ๊ธฐ์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๋„์ž…ํ•˜์ง€ ์•Š๊ณ  covectors์˜ ๊ฒƒ๊ณผ ํ–‰ ๋ฒกํ„ฐ์˜ ๋ชจ๋“  ์˜๋ฏธ๋ฅผ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅ row(A, i) ๋ณต๊ท€ํ•˜๋„๋ก i ์˜ ํ–‰์งธ๋ฅผ A A์™€ 1 ์ฐจ์› ๋ฐฐ์—ด์ด ์•„๋‹Œ covector. ํ˜„์žฌ A[1, :] ๋Š” "A์˜ ์ฒซ ๋ฒˆ์งธ ํ–‰ ๊ฐ€์ ธ ์˜ค๊ธฐ"์™€ "A์˜ ๋‘ ๋ฒˆ์งธ ์ฐจ์›์„ ๋”ฐ๋ผ ์ฒซ ๋ฒˆ์งธ ์Šฌ๋ผ์ด์Šค ๊ฐ€์ ธ ์˜ค๊ธฐ"๋ฅผ ๋ชจ๋‘ ์˜๋ฏธํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๊ฐœ๋…์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝ” ๋ฒกํ„ฐ ์ œ์•ˆ์—์„œ ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ–‰ ๋ฒกํ„ฐ๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์˜๋ฏธ์—์„œ 1 ์ฐจ์› ๋ฐฐ์—ด์ด๋ฉฐ, ์ด์™€ ๊ฐ™์ด ์ธ๋ฑ์‹ฑ๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด์ด ์„ฑ๋ช…์„œ์— ๋„ˆ๋ฌด ๋ƒ‰๋‹ดํ•˜๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ์•ž์˜ ๋…ผ์˜๋Š” ์™„์ „ํ•œ ์„ ํ˜• ๋Œ€์ˆ˜ ์˜๋ฏธ๋ก  (์˜ฌ๋ฐ”๋ฅธ ๊ณฑ ๋ฐ ์ „์น˜ ํฌํ•จ)์„ ์›ํ•œ๋‹ค๋ฉด ํ–‰ ๋ฒกํ„ฐ๊ฐ€ 1 ์ฐจ์› ๋ฐฐ์—ด๊ณผ ๋™์ผํ•œ ์œ ํ˜•์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๋งค์šฐ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒซ์งธ, covector์— ๋Œ€ํ•œ ์ธ๋ฑ์‹ฑ์€ ๋‚ด์  dot ์™€์˜ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ๋ณต์žกํ•œ ์ผค๋ ˆ ๊ฐ’ (v')[1] = conj(v[1]) ๋ฐ˜ํ™˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‘˜์งธ, ์ฝ” ๋ฒกํ„ฐ๋Š” ๋ฒกํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ฉฐ ๋ฒกํ„ฐ๋กœ ๋‚ด์ ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐํ•˜๋Š” ์„ ํ˜• ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์…‹์งธ, ๋ฒกํ„ฐ์™€ ์ฝ” ๋ฒกํ„ฐ๋Š” hcat ๋ฐ vcat ์•„๋ž˜์—์„œ ๋ฐฐ์—ด ์—ฐ๊ฒฐ ๋™์ž‘์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์ด์œ ๋กœ ํ–‰ ๋ฒกํ„ฐ๋Š” "๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์˜๋ฏธ์—์„œ 1 ์ฐจ์› ๋ฐฐ์—ด"์ด ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค์„ ์ œ๊ฑฐํ•˜๋Š” ํŽธ์— ์ฐฌ์„ฑ ํ•  ๊ฒƒ์ด๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” Julia ์ฝ”๋“œ๋ฅผ ๋ณธ ์ ์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ์›๋ž˜ 0 ์ฐจ์› ๋ฐฐ์—ด์— ํ•„์š”ํ•˜๋‹ค๊ณ  ๋งํ•˜๋ ค๊ณ ํ–ˆ์ง€๋งŒ X[] ๊ฐ€ ์ž˜ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค.

ํ–‰ ๋ฒกํ„ฐ์— ๋Œ€ํ•œ row(M,i) ํ•จ์ˆ˜์™€ ํ•จ๊ป˜ APL ์ธ๋ฑ์‹ฑ์ด ๊ฐ€์žฅ ํ•ฉ๋ฆฌ์ ์ด๋ฉฐ ์ข‹์€ ์ ˆ์ถฉ์•ˆ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ํ–‰ ๋ฒกํ„ฐ ์ธ๋ฑ์‹ฑ์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ (v')[1,i] ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์•„์ง ๋‹ค๋ฃจ์ง€ ์•Š์€ ๋˜ ๋‹ค๋ฅธ ํฐ ๊ฒฐ์ •์€ ์œ ํ˜•์ž…๋‹ˆ๋‹ค. ์ด์ „์— ์ด๊ฒƒ์„ ์‹œ๋„ํ•œ ๋‚ด ํ•œ ๊ฐ€์ง€ ๋ฐœ๊ฒฌ์€ ๋””์ŠคํŒจ์น˜๋ฅผ โ€‹โ€‹์—‰๋ง์œผ๋กœ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— v' ๋ฅผ AbstractVector ์‹œํ‚ค๋Š” ๊ฒƒ์ด ์ •๋ง ์–ด๋ ต๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‘ ๊ฐ€์ง€ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜ :

  1. ํ–‰๋ ฌ๊ณผ ๋ฒกํ„ฐ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ ์œ ํ˜•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    • Transpose <: AbstractMatrix

    • CoVector <: Any

    • Factorization ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ผ์ข…์˜ ์ „์น˜.

  2. ๋ชจ๋“  ์ „์น˜์— ๋™์ผํ•œ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ X' _not_์€ AbstractMatrix

    • Transpose <: Any

ํ™œ์šฉ์„ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š”

ใ…. ConjugateTranspose ์ •์˜ (์œ„์˜ ์˜ต์…˜ 1์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ConjugateCoVector ์™€ ํ•จ๊ป˜)

๋น„. Conjugate ๋ž˜ํผ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๊ณ  ์ ์ ˆํ•˜๊ฒŒ ์ค‘์ฒฉํ•ฉ๋‹ˆ๋‹ค. Transpose{Conjugate{T}} ๋˜๋Š” Conjugate{Transpose{T}} ์‚ฌ์šฉ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ๊ทœ์น™์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

AbstractMatrix ์˜ ํ•˜์œ„ ์œ ํ˜•์ด ์•„๋‹Œ Transpose{Matrix} ๋ฅผ) ๊ฐ–๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€๋ฒ ์ด์Šค์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์•„๋‚ ๋กœ๊ทธ๋Š” Symmetric ์™€ ๊ฐ™์€ ํŠน๋ณ„ํ•œ ํ–‰๋ ฌ ์œ ํ˜•์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋Œ€์ˆ˜์ ์œผ๋กœ ํ–‰๋ ฌ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜์ง€๋งŒ ์ƒ‰์ธ ์˜๋ฏธ๋ก ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (# 987์€ ๋‹ค์ค‘ ๋‚ด์žฌ ๋˜๋Š” ์‹ ์„ฑ ํŠน์„ฑ์—†์ด ์œ ํ˜• ๊ณ„์ธต ๊ตฌ์กฐ๊ฐ€ ๋Œ€์ˆ˜์  ์˜๋ฏธ๋ก ๋ณด๋‹ค ์ปจํ…Œ์ด๋„ˆ ์˜๋ฏธ๋ก ์„ ์กด์ค‘ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ํ™•๋ฆฝํ–ˆ์Šต๋‹ˆ๋‹ค.)

๊ธฐ๋ณธ์ ์œผ๋กœ "์˜๋ฏธ ์  ํƒœ๊ทธ"์ธ ์œ ํ˜•์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฌธ์ œ๋„ # 8240์—์„œ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” Transpose{Conjugate{T}} ๊ฐ€ ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ํ™œ์šฉ์€ ์š”์†Œ์˜ ๊ธฐ๋ณธ ํ•„๋“œ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋•Œ๋•Œ๋กœ MATLAB๊ณผ ๋™์ผํ•œ ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค ๊ทœ์น™์„ ๋”ฐ๋ฅด๊ณ  ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ๋”ฐ๋ฅด์ง€ ์•Š๋Š” ์˜ˆ์ž…๋‹ˆ๋‹ค.

  • ์ธ๋ฑ์‹ฑ ์ž‘์—…์—์„œ ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค. (MATLAB์ฒ˜๋Ÿผ)
julia> (1:5)[5,1,1,1,1,1,1]
5
  • ์ธ๋ฑ์‹ฑ ์ž‘์—…์—์„œ๋Š” ํ›„ํ–‰ ์กฐ๊ฐ์ด ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์ด๋ฅผ ํ—ˆ์šฉํ•˜๋Š” MATLAB๊ณผ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค.)
julia> (1:5)[5,:]
ERROR: BoundsError()
 in getindex at abstractarray.jl:451
  • ์ˆœ์œ„> = 3 ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ๋ฐฐ์—ด์˜ ์ˆœ์œ„๋ณด๋‹ค ๋” ์ ์€ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๊ณ  ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๊ฐ€ ์Šค์นผ๋ผ (์˜ˆ : MATLAB)์ด๋ฉด ์•”์‹œ ์  ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค์ด ์ธ๋ฑ์Šค ํ• ๋‹น ์—ฐ์‚ฐ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
julia> A=zeros(2,2,2); A[1,2]=5; A #Same as A[1,2,1]=5
2x2x2 Array{Float64,3}:
[:, :, 1] =
 0.0  5.0
 0.0  0.0

[:, :, 2] =
 0.0  0.0
 0.0  0.0
  • ์ˆœ์œ„> = 3 ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ, ๋ฐฐ์—ด ์ˆœ์œ„๋ณด๋‹ค ๋” ์ ์€ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๊ณ  ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๊ฐ€ _not scalar_ (MATLAB์ฒ˜๋Ÿผ) ์ผ ๋•Œ ์•”์‹œ ์  ํ›„ํ–‰ _slices_๊ฐ€ ์ธ๋ฑ์Šค ํ• ๋‹น ์—ฐ์‚ฐ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
julia> A[:,:]=3; A
2x2x2 Array{Float64,3}:
[:, :, 1] =
 3.0  3.0
 3.0  3.0

[:, :, 2] =
 3.0  3.0
 3.0  3.0
  • ์ˆœ์œ„> = 3 ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ๋ฐฐ์—ด์˜ ์ˆœ์œ„๋ณด๋‹ค ์ ์€ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๊ณ  ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๊ฐ€ ์Šค์นผ๋ผ (์˜ˆ : MATLAB)์ด๋ฉด ์•”์‹œ ์  ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค์ด ์ธ๋ฑ์‹ฑ ์ž‘์—…์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.
julia> A=reshape(1:8,2,2,2); A[:,1]
2-element Array{Int64,1}:
 1
 2

julia> A[:,1,1]
2-element Array{Int64,1}:
 1
 2
  • ์ˆœ์œ„ r> = 3 ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ๋ฐฐ์—ด์˜ ์ˆœ์œ„๋ณด๋‹ค k <r ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๊ณ  ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๊ฐ€ ์Šฌ๋ผ์ด์Šค ์ธ ๊ฒฝ์šฐ ์ธ๋ฑ์‹ฑ ์ž‘์—…์€ ๋‚˜๋จธ์ง€ ์ˆœ์œ„ rk ๋ฐฐ์—ด์„ ์•”์‹œ ์ ์œผ๋กœ ์„ ํ˜•ํ™”ํ•ฉ๋‹ˆ๋‹ค. (MATLAB๊ณผ ์œ ์‚ฌ) :
julia> A=reshape(1:8,2,2,2); A[1,:]
1x4 Array{Int64,2}:
 1  3  5  7

julia> A=reshape(1:8,2,2,2); A[1,:,:]
1x2x2 Array{Int64,3}:
[:, :, 1] =
 1  3

[:, :, 2] =
 5  7
  • ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค์€ ํ• ๋‹น ์ž‘์—…์—์„œ ์‚ญ์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (MATLAB๊ณผ ๋‹ฌ๋ฆฌ)
julia> A=zeros(1); A[1] = randn(1,1)
ERROR: `convert` has no method matching convert(::Type{Float64}, ::Array{Float64,2})

You might have used a 2d row vector where a 1d column vector was required.
Note the difference between 1d column vector [1,2,3] and 2d row vector [1 2 3].
You can convert to a column vector with the vec() function.
 in setindex! at array.jl:307

julia> A=zeros(1,1); A[1,1] = randn(1)
ERROR: `convert` has no method matching convert(::Type{Float64}, ::Array{Float64,1})
 in setindex! at array.jl:308
  • Julia๋Š” ์œ ํšจํ•œ ์ž‘์—…์„ ํ—ˆ์šฉ ํ•  ๋•Œ ํ›„ํ–‰ ๋‹จ์ผ ์น˜์ˆ˜๋ฅผ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๋งคํŠธ๋žฉ๊ณผ ๋‹ฌ๋ฆฌ)
julia> 1/[1.0,] #In MATLAB, interpreted as the inverse of a 1x1 matrix
ERROR: `/` has no method matching /(::Int64, ::Array{Float64,1})
  • ์™ธ๋ถ€ ์ œํ’ˆ์€ ์ž‘๋™ํ•˜๋ฉฐ ์ด์ „ ๊ทœ์น™์˜ ์˜ˆ์™ธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ์˜๋ฏธ๋Š” ์•”์‹œ ์ ์œผ๋กœ ์ฒซ ๋ฒˆ์งธ ์ธ์ˆ˜์—์„œ ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (Matlab์ฒ˜๋Ÿผ)
julia> [1:5]*[1:5]' # Shapes are (5,) and (1,5) - promoting to (5,1) x (1,5) works
5x5 Array{Int64,2}:
 1   2   3   4   5
 2   4   6   8  10
 3   6   9  12  15
 4   8  12  16  20
 5  10  15  20  25

์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ๋“ค์ด ์–ด๋–ป๊ฒŒ ํ–‰๋™ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š”์ง€ ๊ฒฐ๋ก ์„ ๋‚ด๋ฆฌ๋ฉด ์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค์€ ์•ฝ๊ฐ„์˜ ์ •๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๊ฐ€ ์Šฌ๋ผ์ด์Šค ์ธ ์ธ๋ฑ์Šค๊ฐ€ ๋„ˆ๋ฌด ์ ์€ ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ํ˜„์žฌ ๋™์ž‘์€ ํŠนํžˆ ๋น„๋ฆฐ๋‚ด์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์™€. Jiahao๊ฐ€ ์ œ์‹œ ํ•œ ์˜ˆ๋Š” ๋งค์šฐ ํ˜ผ๋ž€ ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค ... ์ €๋Š” ์ธ๋ฑ์‹ฑ ์ž‘์—…๊ณผ ์ธ๋ฑ์‹ฑ ํ• ๋‹น ์ž‘์—…์—์„œ ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค์ด ๋ฌต์‹œ์ ์ด๊ณ  ๋ชจํ˜ธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ซ์–ดํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ–‰๋™์„ ๋ฏธ๋ฆฌ ์•Œ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ์‹ค์ œ๋กœ ๋‹ค๋ฅธ ์ผ์„ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ํ•œ ๊ฐ€์ง€ ์ผ์„ํ•˜๊ฒŒ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์–ธ์–ด๋ฅผ ์ •ํ™•ํ•˜๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ  ๋ชจํ˜ธํ•œ ๋‹จ์ถ•ํ‚ค๋ฅผ ํ”ผํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์ผ์ข…์˜ ์‚ผ๊ฐํ˜• ๋””์ŠคํŒจ์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด " Complex64 ๋˜๋Š” Complex128 ํ•ญ๋ชฉ์ด์žˆ๋Š” ํ–‰๋ ฌ, ์ „์น˜ , ๋˜๋Š” ๊ทธ๊ฒƒ์˜ ์ผค๋ ˆ ์ „์น˜ ". ํŠนํžˆ ์œ„์˜ ์˜ต์…˜ 2 + b๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ.

@ esd100 , ์ด๋“ค ์ค‘ ๋ชจํ˜ธํ•˜๊ฑฐ๋‚˜ ์œ„ํ—˜ํ•œ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๊ฒƒ๋“ค์€ ๋ชจ๋‘ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. "๊ฐ€์ƒ ์‹ฑ๊ธ€ ํ†ค"์ด ๋‹น์‹ ์„ ์œ„ํ•ด ์ƒ์ƒ๋˜๊ณ  ๋‹น์‹ ์ด ์›ํ•  ๋•Œ-๋˜๋Š” ๋‹น์‹ ์ด ์›ํ•˜๊ณ  ์›ํ•˜์ง€ ์•Š์•˜์„ ๋•Œ-๋ถˆํŽธํ•  ๋•Œ-์ž…๋‹ˆ๋‹ค. ์ด๋“ค ์ค‘ ์–ด๋–ค ๊ฒƒ๋„ ํ–‰๋™์ด ๋‹ค๋ฅธ ๋‘ ๊ฐ€์ง€ ๊ทธ๋Ÿด๋“ฏํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํ–‰ ๋ฒกํ„ฐ๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์˜๋ฏธ์—์„œ 1 ์ฐจ์› ๋ฐฐ์—ด์ด๋ฉฐ, ์ด์™€ ๊ฐ™์ด ์ธ๋ฑ์‹ฑ๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด์ด ์„ฑ๋ช…์„œ์— ๋„ˆ๋ฌด ๋ƒ‰๋‹ดํ•˜๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค.

์ง„์‹ค! ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค @jiahao , ์‹œ์ฐจ๋ฅผ ๋น„๋‚œํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์“ฐ๋ ค๊ณ ํ–ˆ๋˜ ๋‹จ์–ด๋Š” "tensor"์ด๊ณ , ์ €๋Š” [] ์ธ๋ฑ์‹ฑ ๋™์ž‘์„ ์—„๊ฒฉํ•˜๊ฒŒ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์ด ์ค‘์š”ํ•œ ๊ณ ๋ ค ์‚ฌํ•ญ์ด๋ผ๋Š” ๊ฒƒ์ด ๋งž์œผ๋ฉฐ, (ํ–‰๋ ฌ์„ ๊ตฌ์„ฑํ•˜๋Š”) ์ž์—ฐ์Šค๋Ÿฌ์šด ๋ฐฉ๋ฒ•์€ (์ด ๊ฒฝ์šฐ 1 xn ํฌ๊ธฐ๋กœ ์ƒ๊ฐํ•˜๋ฉด) ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ช…ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ถ„๋ช…ํžˆ covector๋Š” "๋ชจ๋“  ์˜๋ฏธ์—์„œ"1D Julia Array๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๊ฒŒ ์ „์ฒด ์š”์ ์ž…๋‹ˆ๋‹ค ...

jiahao์˜ ์˜ˆ๋„ ์ €๋ฅผ ๋ฐฉํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค ๋™์ž‘์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‚˜์ค‘์˜ ์ฐจ์›์„ ์„ ํ˜•ํ™”ํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฐฐ์—ด์ด ์–ผ๋งˆ๋‚˜ ๋งŽ์€ ์ฐจ์›์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ์žŠ์–ด ๋ฒ„๋ฆฌ๋Š” ์ผ์ข…์˜ ๊ฒŒ์œผ๋ฆ„์„ ์กฐ์žฅ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋‚˜๋Š” ์ด๊ฒƒ์ด "๋ชจํ˜ธํ•จ"๊ณผ "์œ„ํ—˜ํ•œ"์ด ์•”์‹œํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค ... ์ •๋ง ์›ํ•ฉ๋‹ˆ๋‹ค ์˜ˆ๋ฅผ ๋“ค์–ด 16 ์ฐจ์› ๋ฐฐ์—ด์„ 15 ์ฐจ์› ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ทจ๊ธ‰ ํ•  ๋•Œ Julia๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ๋˜์ง‘๋‹ˆ๋‹ค.

์ด๋“ค ์ค‘ ๋ชจํ˜ธํ•˜๊ฑฐ๋‚˜ ์œ„ํ—˜ํ•œ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๋„ค ๋ฒˆ์งธ๋Š” ๋ชจํ˜ธํ•˜๊ณ  ์œ„ํ—˜ ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

julia> A=zeros(2,2,2); A[:,:]=3; A
2x2x2 Array{Float64,3}:
[:, :, 1] =
 3.0  3.0
 3.0  3.0

[:, :, 2] =
 3.0  3.0
 3.0  3.0

๋ถ„๋ช…ํžˆ (๋‚˜์—๊ฒŒ) ์ด๊ฒƒ์€ ๊ตฌ๋ฌธ ์˜ค๋ฅ˜ ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค. A๋Š” ๋žญํฌ -3์ด๊ณ  3 ์ฐจ์›์€ ์ „ํ˜€ ์ฐธ์กฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์„ธ ๋ฒˆ์งธ ์ฐจ์›์€ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ์ค‘๋‹จ๋˜์—ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์œผ๋ฉฐ ์ด์ œ ์ฐพ๊ธฐ ์–ด๋ ค์šด ๋ฒ„๊ทธ๊ฐ€ ์ฝ”๋“œ์— ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (IDL๊ณผ ํฌํŠธ๋ž€ ๋ชจ๋‘์—์„œ์™€ ๊ฐ™์ด) ๊ทธ์˜ ์‹œ์ ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ์—ด์ด ์˜ฌ๋ฐ”๋ฅธ ์ˆ˜์˜ ์ธ๋ฑ์Šค๋กœ๋งŒ ์ธ๋ฑ์‹ฑ์„ ํ—ˆ์šฉํ•˜๊ฑฐ๋‚˜ 1D ์„ ํ˜• ์ธ๋ฑ์‹ฑ์˜ ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ (๋งค์šฐ ํŽธ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—)๊ฐ€ ๊ฐ€์žฅ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๋˜๋Š” 1D ์„ ํ˜• ์ธ๋ฑ์‹ฑ์˜ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ (๋งค์šฐ ํŽธ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—)

์šฐ๋ฆฌ ์›์น™์ด ์–ผ๋งˆ๋‚˜ ์‰ฝ๊ฒŒ ํŒ”๋ฆฌ๋Š”๊ฐ€! :)

์„ ํ˜• ์ธ๋ฑ์‹ฑ์„ ๊ทธ๋‹ค์ง€ ์ข‹์•„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์•ฝ๊ฐ„์˜ ํ•ดํ‚น์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ข…์ข… ์šฐ๋ฆฌ๋Š” ๋ฐฐ์—ด์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ•์„ ์›ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‹จ์ˆœํ•œ ์กฐ๋ฐ€ ํ•œ ๋ฐฐ์—ด์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์„ ํ˜• ์ธ๋ฑ์‹ฑ์€ ์ •๋ง ๋Š๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์„ ํ˜• ์ธ๋ฑ์‹ฑ์„ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค (์„ฑ๋Šฅ์ƒ์˜ ์ด์œ ์™€ ๋„ˆ๋ฌด ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ์†์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด).

๋„ค, ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ ์–ด๋„ 1D ์ธ๋ฑ์‹ฑ์€ ์‹œ๊ฐ์ ์œผ๋กœ ๊ตฌ๋ณ„๋ฉ๋‹ˆ๋‹ค. 5D๋กœ 6D ๋ฐฐ์—ด์„ ์ธ๋ฑ์‹ฑํ•˜๋Š” ๊ฒƒ์€ ํ›จ์”ฌ ์ ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋‚˜๋Š” ๋” ์—„๊ฒฉํ•œ ์ธ๋ฑ์‹ฑ ๊ทœ์น™์„ ๊ฐ–๊ณ  ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ๊ฐ€๋Š” ๊ฒƒ๋ณด๋‹ค 1D ์„ ํ˜• ์ธ๋ฑ์‹ฑ์„ ํฌ๊ธฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ฐฐ์—ด์— ๋Œ€ํ•œ ์žฌ๊ตฌ์„ฑ ๋œ ์ฐธ์กฐ๋ฅผ ์‰ฝ๊ฒŒ ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์„ ํ˜• ์ธ๋ฑ์‹ฑ์— {} ๋Œ€๊ด„ํ˜ธ (๋˜๋Š” ๊ธฐํƒ€)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋‹ค์ฐจ์› ์ธ๋ฑ์‹ฑ์— [] ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ƒฅ ์•„์ด๋””์–ด ...

2015 ๋…„ 3 ์›” 23 ์ผ 2:36 pm์— Bob Portmann [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

๋„ค, ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ ์–ด๋„ 1D ์ธ๋ฑ์‹ฑ์€ ์‹œ๊ฐ์ ์œผ๋กœ ๊ตฌ๋ณ„๋ฉ๋‹ˆ๋‹ค. 5D๋กœ 6D ๋ฐฐ์—ด์„ ์ธ๋ฑ์‹ฑํ•˜๋Š” ๊ฒƒ์€ ํ›จ์”ฌ ์ ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๋‚˜๋Š” ๋” ์—„๊ฒฉํ•œ ์ธ๋ฑ์‹ฑ ๊ทœ์น™์„ ๊ฐ–๊ณ  ๋‹ค๋ฅธ ๋ฐฉํ–ฅ์œผ๋กœ๊ฐ€๋Š” ๊ฒƒ๋ณด๋‹ค 1D ์„ ํ˜• ์ธ๋ฑ์‹ฑ์„ ํฌ๊ธฐํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋ฐฐ์—ด์— ๋Œ€ํ•œ ์žฌ๊ตฌ์„ฑ ๋œ ์ฐธ์กฐ๋ฅผ ์‰ฝ๊ฒŒ ์–ป์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub https://github.com/JuliaLang/julia/issues/4774#issuecomment -84805310์—์„œ

๊ตฌ๋ฌธ์„ ๋ถ„๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์—ˆ์œผ๋ฉด ์ข‹๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์ผ๋ฐ˜ ์ธ๋ฑ์‹ฑ ๊ตฌ๋ฌธ์—์„œ ์„ ํ˜• ์ธ๋ฑ์‹ฑ์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.
์—„์ฒญ๋‚œ ๋ณ€ํ™” ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๋งŽ์€ ๋…ผ์Ÿ์„ ๋ถˆ๋Ÿฌ ์ผ์œผํ‚ค๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ธ๋ฑ์‹ฑ ๊ฐœ์„ ์„์œ„ํ•œ ์‹ค์ œ ์ž‘์—…์˜ ๋Œ€๋ถ€๋ถ„์€ 0.4์ฃผ๊ธฐ ๋™์•ˆ ์ƒ๋‹นํžˆ ๋งŽ์€ ์ˆ˜์˜ pull ์š”์ฒญ์—์„œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด์ œ CartesianIndex ์™€ ์นœ๊ตฌ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์„ ํ˜• ๋ฐ ๋ฐ์นด๋ฅดํŠธ ์ธ๋ฑ์‹ฑ์„ ์œ„ํ•ด ๊ตฌ๋ฌธ์„ ๋ถ„๋ฆฌํ•ด์•ผํ•˜๋Š” ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์ด๋“ค์„ ๊ฒฐํ•ฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (# 10524). ์„ ํ˜• ์ธ๋ฑ์‹ฑ๋„ ์ œ๊ฑฐํ•˜๊ณ  ์‹ถ์ง€๋งŒ ๋•Œ๋กœ๋Š” ๋” ์„ฑ๋Šฅ์ด ์ข‹์Šต๋‹ˆ๋‹ค (์•„๋งˆ๋„ # 9080; enumerate ๋ฐ zip ๋•Œ๋ฌธ์— ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค). # 10507์—์„œ์™€ ๊ฐ™์ด fastindex ๋ฅผ eachindex ์ฃผ์œ„์˜ ๋ž˜ํผ๋กœ ๊ตฌํ˜„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ƒ‰์ธ ๊ทœ์น™์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด์ด ๋ฌธ์ œ๋ฅผ ์ฃฝ์ด๋Š” ๋Œ€์‹  ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ์˜์—ญ์— ์ดˆ์ ์„ ๋งž์ถ”๊ฒ ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋กœ์„œ๋Š” ์˜์‹ฌ ํ•  ์—ฌ์ง€์—†์ด # 10525์ž…๋‹ˆ๋‹ค. ํŠนํžˆ https://github.com/JuliaLang/julia/pull/10525#issuecomment -84597488์—๋Š” ์ผ์ข…์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

@timholy ์ €๋Š” ๋น ๋ฅธ ๋ฐ์นด๋ฅดํŠธ ์ธ๋ฑ์‹ฑ์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ฐœ๋ฐœ์„ ์‹ค์ œ๋กœ ๋”ฐ๋ฅด์ง€ ์•Š์•˜์œผ๋ฉฐ base / multidimensional.jl์„ ๋ฐฉ๊ธˆ ์‚ดํŽด

์–ด๋–ค๋ฉด์—์„œ ์•Œ์•„์•ผ ํ•  ๊ฒƒ์ด ๋งŽ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ ์ƒ๋‹นํ•œ ์–‘์ด ์ง„ํ–‰๋˜๊ณ  ์žˆ์ง€๋งŒ, ์•„์ด๋””์–ด๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ๋”๋Ÿฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ง ๊ทธ๋Œ€๋กœ

k = 0
for I in eachindex(A)
     B[k+=1] = A[I]   # B is being linearly-indexed, A is being cartesian-indexed
end

๋‹น์‹ ์ด ์•Œ์•„์•ผ ํ•  ์ „๋ถ€์ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. (์ฆ‰, eachindex ๋Œ€ํ•œ ๋„์›€๋ง์ด ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฌธ์„œ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.) ๊ทธ๋Ÿฌ๋‚˜์ด ๊ธฐ๋ณธ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ช‡ ๊ฐ€์ง€ ํ™•์žฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ๋‹นํžˆ ๋งŽ์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Œ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ™•์žฅ์ด ๋ฌด์—‡์ด๋ฉฐ ์™œ ๊ฐ•๋ ฅํ•œ ์ง€ ๋ช…ํ™•ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์•ž์œผ๋กœ ๋ช‡ ๋‹ฌ ์•ˆ์— ์ด๊ฒƒ์„ ์ ์„ ๊ณ„ํš์ด์ง€๋งŒ ์‚ฌ๋žŒ๋“ค์ด ์ •๋ง๋กœ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด JuliaCon ํ† ํฌ๊ฐ€ ํ•ฉ๋ฆฌ์  ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. @Jutho ๋˜๋Š” @mbauman ์€ ๋‚˜

๋‚˜๋Š” ๋ชจํ˜ธ์„ฑ์— ๋Œ€ํ•ด ๋” ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์ง€๋งŒ ํ›„ํ–‰ ํ† ๋ก  ์ค‘ ์ผ๋ถ€๋Š” ํŠน์ • ํ•ต์‹ฌ ์‚ฌํ•ญ์„ ์š”์•ฝํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๋‚˜๋Š” ๋„ˆ๋ฌด ๊ทน์ ์œผ๋กœ ๋“ค๋ฆด ์œ„ํ—˜์ด์žˆ๋Š” ์™ธ๋ถ€์ธ ๋˜๋Š” ๋‘๋ ค์›€ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ๋ชจํ˜ธํ•จ์— ๋” ๋ฏผ๊ฐ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด ๊ฒธ์†ํ•œ ์˜๊ฒฌ์œผ๋กœ๋Š”, ๋‹จ์ˆœํ•˜๊ณ  ๋ฏธ์…˜ ํฌ๋ฆฌํ‹ฐ์ปฌ ํ•œ ์‚ฌ๊ณ  ์—ฐ์Šต์€ ๋‹จ์ˆœ ์˜ค๋ฅ˜์˜ ๋น„์šฉ / ํŽธ์ต ๋ถ„์„์ด ๊ทธ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€์—†๋Š” ๊ฒฝ๋กœ๋กœ ์•ˆ๋‚ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# 10507 ์—์„œ์ฒ˜๋Ÿผ fastindex๋ฅผ eachindex ์ฃผ์œ„์˜ ๋ž˜ํผ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@timholy ๋น ๋ฅธ ์„ ํ˜• ๋ฐฐ์—ด์„ ์œ„ํ•ด eachindex ๊ฐ€ UnitRange๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์—ฌ์ „ํžˆ ์œ ํ˜•์ด ์•ˆ์ •์ ์ด๋ฉฐ ํ˜ธ์ถœ์ž๊ฐ€ CartesianIndex๋ฅผ ์–ป๋„๋กํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด CartesianRange๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ( CartesianRange๊ฐ€ ๋‚ด๋ณด๋‚ด์ง€์ง€ ์•Š์œผ๋ฏ€๋กœ eachindex(size(A)) ์— ๋Œ€ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค).

์ฒ˜์Œ์—๋Š” ๊ทธ๋ ‡๊ฒŒํ–ˆ์ง€๋งŒ @Jutho๊ฐ€ ๋ณ€๊ฒฝํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (๊ทธ๊ฑด ์‚ฌ์‹ค์ด ์•„๋‹ˆ์—์š” ๊ฒฝ์šฐ์—, ๋‚˜๋Š” ์•„๋งˆ ์‹คํ˜„ํ•˜์ง€ ์•Š๊ณ  ๊ทธ๊ฒƒ์„ ๋ณ€๊ฒฝ.) ๋‚˜๋Š” ๋ณ€ํ™”๊ฐ€ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ๋™๊ธฐ๋ฅผ ๋ถ€์—ฌํ–ˆ๋‹ค ๋งก๊ธฐ (๋‹น์‹ ์€ ์ ์  ๋ฏฟ์„ ์ˆ˜ ์žˆ๋„๋ก CartesianIndex ) ๊ทธ๊ฒƒ์— ๊ฐ๊ฐ์˜ ์ผ์ • ๊ธˆ์•ก์„ ๊ฐ€์ง€๊ณ ์žˆ๋Š”, . ๊ทธ๋Ÿฌ๋‚˜ ์ง€์ ํ–ˆ๋“ฏ์ด์ด๋ฅผ ๋ณด์žฅํ•˜๋Š” ๋Œ€์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

@Jutho , ์–ด๋–ค ์ƒ๊ฐ?

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

@timholy , ๊ท€ํ•˜์˜ ์ด์ „ ๊ฒŒ์‹œ๋ฌผ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ JuliaCon์— ์ฐธ์„ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ CartesianIndex ์— ๋Œ€ํ•ด ์ž์œ ๋กญ๊ฒŒ ์ด์•ผ๊ธฐํ•˜์‹ญ์‹œ์˜ค (์–ด์จŒ๋“  ๋งˆ์ง€๋ง‰ ์†์งˆ ๋งŒ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค). ๋‚˜๋Š” ์ด๋ฏธ ํšŒ์˜์˜ ๋ณด๊ณ ์„œ์™€ ๋น„๋””์˜ค๋ฅผ ๊ธฐ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ฐœํ•œ ์ƒ๊ฐ : ๋ชจ๋“  ์ฐจ์› (์ฐจ์›> 2 ํฌํ•จ)์˜ A ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ A' ๋Š” A ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ˆœํ™˜ ์ ์œผ๋กœ ์ˆœํšŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ A'[i, j, k] == A[j, k, i] . ์ด๊ฒƒ์€ MATLAB์—์„œ์™€ ๊ฐ™์ด ํ•ด์„ ๋  ๋•Œ ํ–‰ ๋ฐ ์—ด "๋ฒกํ„ฐ"(์ฆ‰, ๊ฐ๊ฐ [n, 1] ๋ฐ [1, n] 2d ๋ฐฐ์—ด)์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์ „์น˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ 2d ๋ฐฐ์—ด์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ํ–‰๋ ฌ ์ „์น˜๋กœ ์ถ•์†Œ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 2D ์—ด "๋ฒกํ„ฐ"๋ฅผ ์‹ค์ œ ์ฝ” ๋ฒกํ„ฐ์— ๋งคํ•‘ํ•˜๊ฑฐ๋‚˜ 2D ํ–‰ "๋ฒกํ„ฐ"๋ฅผ ์‹ค์ œ ๋ฒกํ„ฐ์— ๋งคํ•‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๋‚˜๋Š”์ด ์†์„ฑ์ด ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ๋™์˜ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.) ๋ฐฐ์—ด ๊ฐ์ฒด๋กœ ํ•ด์„๋˜๋Š” ํ–‰๋ ฌ ๋ฐ ๋ฒกํ„ฐ์— ๋Œ€ํ•ด A'' == A' ๋ฐ v'' == v _ ์•„์ด๋ดํ‹ฐํ‹ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค _. ์œ„์—์„œ ๋…ผ์˜ํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ์ข…๋ฅ˜์˜ ์œ ํ˜• ๊ณ„์ธต (์ง„์งœ ๋ฒกํ„ฐ์™€ ์ฝ” ๋ฒกํ„ฐ๊ฐ€ ์ถ”์ƒ ๋ฐฐ์—ด๊ณผ ์ถฉ๋ถ„ํžˆ ๊ตฌ๋ณ„๋˜๋Š” ๊ฒฝ์šฐ)์ด ์ฃผ์–ด์ง€๋ฉด ' ์—๋Š” ์„ ํ˜• ๋Œ€์ˆ˜ ๊ฐœ๋…์— ํ•ด๋‹นํ•˜๋Š” ์‹ค์ œ ๋ฒกํ„ฐ์™€ ์ฝ” ๋ฒกํ„ฐ์— ๋Œ€ํ•ด ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์ œ๊ณต ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. v'' == v ๋งŒ์กฑ์‹œํ‚ฌ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค (ํ•˜์ง€๋งŒ ์‚ฌ๋žŒ๋“ค์ด ์›ํ•˜๋Š”๋Œ€๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค๋ฉด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค).

๋ช…ํ™•ํ•˜๊ฒŒ ๋งํ•˜๋ฉด, ๋‚˜๋Š” ' _needs_ ์ฐจ์›์ด 2๋ณด๋‹ค ํฐ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์–ด๋–ค ๋ฐฉ๋ฒ•์„ ๊ฐ€์งˆ ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์ง€๋งŒ, ์œ„์˜ ์ œ์•ˆ์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค ( "์ธ๋ฑ์Šค ๋ฐ˜์ „์ด ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ๋ฉด ") ๊ทธ๋ƒฅ ์–ธ๊ธ‰ํ•˜๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜๋Š” ๊ฐ€์žฅ ํฐ ํ•ด์•…์€ ๊ฐœ๋…์ ์ด๋‹ค : (์•ฝ๊ฐ„ ์ž„์˜์˜) ์กฐํ•ฉ ์—ฐ์‚ฐ์„ ์ผ๋ฐ˜์ ์œผ๋กœ ์„ ํ˜• ๋Œ€์ˆ˜์˜ ์˜์—ญ์—์„œ ์ทจํ•œ ์—ฐ์‚ฐ์ž์™€ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ์— ๋Œ€ํ•ด ์šฐ๋ฆฌ๊ฐ€ ์„ ํ˜• ๋Œ€์ˆ˜ ๊ฐœ๋…์„ ์ˆœ์ˆ˜ํ•œ ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ๊ฐœ๋…์œผ๋กœ ํ™•์žฅํ•˜๋ ค๊ณ  ํ•  ๋•Œ (์ด ์ „์ฒด ๋…ผ์˜์—์„œ ์ž…์ฆ ๋œ ๋ฐ”์™€ ๊ฐ™์ด) ์ ์–ด๋„ ์–ด๋Š ์ •๋„์˜ ๊ทธ๋Ÿฌํ•œ ์ถฉ๋Œ์ด ๋ถˆ๊ฐ€ํ”ผํ•˜๋‹ค๊ณ  ๋Œ€๋‹ต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ๋‹ค์ฐจ์› ๋ฐฐ์—ด ์ฐจ์›์— ๋Œ€ํ•ด ์ผ๋ฐ˜์ ์œผ๋กœ ' ๊ฐ€ ์˜ˆ์ƒ๋˜๋Š” ๊ฒฝ์šฐ๋กœ ์ถ•์†Œ๋˜๋Š” ํ•œ ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋Š” ์ž‘์—…์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ถ€์‚ฐ๋ฌผ๋กœ ๋‹ค์ฐจ์› ๋ฐฐ์—ด์˜ ์ˆœํ™˜ ์ˆœ์—ด์— ๋Œ€ํ•œ ํŽธ๋ฆฌํ•œ ์†๊ธฐ๋ฅผ ๊ฑฐ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค A'(k)[I] ๊ฐ€ A[I] ์˜ ์ธ๋ฑ์Šค๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ˆœ์—ดํ•˜๋„๋ก ์ •์ˆ˜ ์ธ์ˆ˜๋ฅผ ์ทจํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ A'(ndims(A))[I] == A[I] ๋ฐ A'(-k)[I] ๊ฐ€ ์ธ๋ฑ์Šค๋ฅผ ์ˆœ์—ดํ•˜๋„๋ก ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ.

๊ทธ๋ƒฅ ์ƒ๊ฐ.

transpose ๊ฐ€ ๋‹ค์ฐจ์› ๋ฐฐ์—ด์— ๋Œ€ํ•ด ์ •์˜ ๋œ ๊ฒฝ์šฐ ์—ฌ์ „ํžˆ A''=A ๋งŒ์กฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ž์ฒด ์—ญ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด์ „ ์ œ์•ˆ๊ณผ ์ง์ ‘ โ€‹โ€‹์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

๊ณต์ • ํ•ด. ๋‚ด๊ฐ€ ๋งํ–ˆ๋“ฏ์ด, ๋‚ด ์ œ์•ˆ์€ ์ „์น˜์˜ ์„ ํ˜• ๋Œ€์ˆ˜์  ์ค‘์š”์„ฑ๊ณผ d> 2 ๊ฒฝ์šฐ์— ๋ถ€๊ณผํ•˜๋Š” ๋ฐฐ์—ด ์ค‘์‹ฌ ์ค‘์š”์„ฑ ์‚ฌ์ด์—์„œ ๊ท ์—ด์ด ์ปค์ง€๋Š” ๊ฒƒ์„ ํŽธ์•ˆํ•˜๊ฒŒ ํ•  ๋•Œ๋งŒ (์ž ์žฌ์ ์œผ๋กœ) ๋งค๋ ฅ์ ์ž…๋‹ˆ๋‹ค. ๋‚ด ์ถ”๋ก ์€ ๊ทธ ๊ท ์—ด์ด ์ด๋ฏธ (์ข…๋ฅ˜) ๋ฐœ์ƒํ•˜๋Š” ํ•œ, ๋ฐฉ๋ฒ•์ด ์™„์ „ํžˆ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ํ•œ, ์ธ๋ฑ์Šค๋ฅผ ํ•„์š”๋กœํ•˜์ง€ ์•Š๋Š” ํ•œ ์ˆœ์—ด ์ธ๋ฑ์Šค์— ๋Œ€ํ•œ ์†๊ธฐ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ๊น”๋” ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. d = 2 ์ผ€์ด์Šค๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํŠน๋ณ„ ๋Œ€์šฐ. ๋‹น์‹  (@Jutho)์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, 2d ์ผ€์ด์Šค์˜ ์ „์น˜ ์ฐจ์›์ด ์„ ํ˜• ๋Œ€์ˆ˜์  ์ค‘์š”์„ฑ์„ ๊ฐ–๋Š” ๊ฒƒ์€ ํŽธ๋ฆฌํ•œ ์šฐ์—ฐ์˜ ์ผ์ž…๋‹ˆ๋‹ค (๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฌธ์ œ์— ๋Œ€ํ•ด (๊ณต) ๋ฒกํ„ฐ๋ฅผ 2d ๋ฐฐ์—ด๋กœ ์‹๋ณ„ ํ•œ ํ›„์— ๋งŒ), ๊ทธ๋ž˜์„œ ์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” d> 2์— ๋Œ€ํ•ด transpose ์˜ ์ˆ˜ํ•™์  ์†์„ฑ (์˜ˆ : A'' == A ํ•„์š”)์— ๋Œ€ํ•ด ๊นŒ๋‹ค๋กœ์šธ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.์ด ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ž ์žฌ์ ์œผ๋กœ ์œ ์šฉํ•œ ๋ฐฉ๋ฒ•์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ• ๋‹น ๋จ, ์˜ˆ : A' ์ฃผ๊ธฐ์ ์œผ๋กœ ํ•œ ๋ฒˆ ์ˆœ์—ด, A'(k) ์ฃผ๊ธฐ์ ์œผ๋กœ k ๋ฒˆ ์ˆœ์—ด, A'(I) ๋Œ€ํ•ด I::Array{Int, 1} ๊ธธ์ด <= ndims(A) ์ฃผ๊ธฐ์ ์œผ๋กœ ๋‚˜์—ด๋œ ์ธ๋ฑ์Šค ์ˆœ์—ด๋กœ I , ๊ทธ๋ฆฌ๊ณ  A'(p) ์— ๋Œ€ํ•ด p::Permutation ๊ธธ์ด <= ndims(A) ์ˆœ์—ด๋กœ ์ง€์ˆ˜์— ๋”ฐ๋ผ p . ํ•˜์ง€๋งŒ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค์–ด์„œ ์žก์„ ์ˆ˜์žˆ์„๋งŒํผ ์œ ์šฉํ•œ ์ง€ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด 2014 ๋…„ 10 ์›” 16 ์ผ StefanKarpinski์™€ 2015 ๋…„ 3 ์›” 22 ์ผ simonbyrne์ด ์–ธ๊ธ‰ ํ•œ ๋‘ ๊ฐ€์ง€ ๋ณ€๊ฒฝ / ์„ค๋ช…์„์ง€์ง€ํ•˜์ง€๋งŒ ํ•œ ๊ฐ€์ง€ ๊ทœ์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. transpose ๋Š” ์ผ๋ฐ˜ ํ…์„œ๊ฐ€ ์•„๋‹Œ ๋ฒกํ„ฐ ๋ฐ 2 ์ฐจ์› ํ–‰๋ ฌ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  2. ์—ฐ์‚ฐ์ž * ๋ฐ transpose ๋Š” ๊ณ„์‚ฐ์ด ๋๋‚  ๋•Œ ํ›„ํ–‰ ๋‹จ์ผ ์ฐจ์›์„ ์‚ญ์ œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ›„ํ–‰ ๋‹จ์ผ ์น˜์ˆ˜๊ฐ€ ๋ณด์กด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋‘ ๊ฐ€์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋งŽ์€ ํŽธ์˜๋ฅผ ์ œ๊ณตํ•˜๊ณ  ์ „ํ†ต์ ์ธ ์„ ํ˜• ๋Œ€์ˆ˜ ์ž‘์—… ๋‚ด์—์„œ ๋งŽ์€ ๋ชจํ˜ธ์„ฑ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ณ ๋ คํ•  ์ˆ˜์žˆ๋Š” ์ผ๋ฐ˜ ๋ฐฐ์—ด ์ธ๋ฑ์‹ฑ์ด๋‚˜ ํ…์„œ ๋Œ€์ˆ˜์— ๋Œ€ํ•ด ์˜๋„์ ์œผ๋กœ ์•„๋ฌด ๋ง๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (ํŠนํžˆ ํ…์„œ ์ „์น˜๋Š” ํ–‰๋ ฌ / ๋ฒกํ„ฐ ์ „์น˜์™€๋Š” ์™„์ „ํžˆ ๋ณ„๊ฐœ์˜ ์—ฐ์‚ฐ์œผ๋กœ ๊ฐ„์ฃผ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.)

์ด ์ œ์•ˆ์— ๋”ฐ๋ฅด๋ฉด ํ–‰๋ ฌ ๊ณฑ์…ˆ ๋ฐ ์ „์น˜๋กœ ์ž‘์—… ํ•  ๋•Œ ๋ฒกํ„ฐ์™€ 1 ์—ด ํ–‰๋ ฌ ์‚ฌ์ด์— ๋ณธ์งˆ์ ์œผ๋กœ ๊ตฌ๋ถ„์ด ์—†์œผ๋ฉฐ ์Šค์นผ๋ผ, ๊ธธ์ด๊ฐ€ 1 ์ธ ๋ฒกํ„ฐ ๋ฐ 1x2 ์‚ฌ์ด์— ์˜๋ฏธ์žˆ๋Š” ๊ตฌ๋ถ„์ด ์—†์Šต๋‹ˆ๋‹ค. -1 ํ–‰๋ ฌ. ๊ทธ๋Ÿฌ๋‚˜ x' ๋Š” ๋ฒกํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ 1xn ํ–‰๋ ฌ์ž…๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ํฌ๊ธฐ์˜ ๋ฐฐ์—ด์„ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณฑ์…ˆ๊ณผ ์ „์น˜์˜ ์„ ํ˜• ๋Œ€์ˆ˜ ๊ฐœ๋…์ด ๊ด€๋ จ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‹จ์ผ ์ฐจ์›์€ ์‚ญ์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ์ œ์•ˆ ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ ์šฉ๋œ Julia ์„ธ์…˜์˜ ๊ฐ€์ƒ ์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค.

๋จผ์ € ์Šค์นผ๋ผ, ๋‘ ๊ฐœ์˜ ๋ฒกํ„ฐ, ํ–‰๋ ฌ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

julia> alpha = 2.0
2.0

julia> x = [1.0; 2.0; 3.0]
3-element Array{Float64,1}:
 1.0
 2.0
 3.0

julia> y = [4.0; 5.0; 6.0]
3-element Array{Float64,1}:
 4.0
 5.0
 6.0

julia> A = [1.0 2.0 3.0; 4.0 5.0 6.0; 7.0 8.0 9.0]
3x3 Array{Float64,2}:
 1.0  2.0  3.0
 4.0  5.0  6.0
 7.0  8.0  9.0

์Šค์นผ๋ผ-๋ฒกํ„ฐ ๊ณฑ์…ˆ์€ ์™ธ๋ถ€ ์ฐจ์›์ด ์žˆ์–ด๋„ ์ž‘๋™ํ•˜๋ฉฐ ๊ฒฐ๊ณผ๋Š” ํ•ญ์ƒ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค.

julia> alpha*x
3-element Array{Float64,1}:
 2.0
 4.0
 6.0

julia> alpha*x[:,[1]]
3-element Array{Float64,1}:
 2.0
 4.0
 6.0

Transpose๋Š” ์ง„ํ™”์ž…๋‹ˆ๋‹ค.

julia> x'
1x3 Array{Float64,2}:
 1.0  2.0  3.0

julia> x''
3-element Array{Float64,1}:
 1.0
 2.0
 3.0

julia> x==x''
true

julia> x'''
1x3 Array{Float64,2}:
 1.0  2.0  3.0

ํ–‰๋ ฌ์— 1 ์—ด ํ–‰๋ ฌ์„ ๊ณฑํ•˜๋ฉด ํ–‰๋ ฌ-๋ฒกํ„ฐ ๊ณฑ๊ณผ ๋™์ผํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

julia> A*x
3-element Array{Float64,1}:
 14.0
 32.0
 50.0

julia> A*x[:,[1]]
3-element Array{Float64,1}:
 14.0
 32.0
 50.0

1 ํ–‰ ํ–‰๋ ฌ ๊ณฑํ•˜๊ธฐ ํ–‰๋ ฌ์€ 1 ํ–‰ ํ–‰๋ ฌ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

julia> x'*A
1x3 Array{Float64,2}:
 30.0  36.0  42.0

๋‚ด์ ์€ ์Šค์นผ๋ผ์ด๋ฉฐ ํ–‰๋ ฌ-๋ฒกํ„ฐ ๋ฐ ํ–‰๋ ฌ-ํ–‰๋ ฌ ๊ณฑ์— ๋Œ€ํ•œ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ๊ทœ์น™์— ์˜ํ•ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

julia> x'*y
32.0

julia> x'*y[:,[1]]
32.0

์™ธ๋ถ€ ์ œํ’ˆ์€ ํŠน๋ณ„ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

julia> x*y'
3x3 Array{Float64,2}:
  4.0   5.0   6.0
  8.0  10.0  12.0
 12.0  15.0  18.0

julia> x[:,[1]]*y'
3x3 Array{Float64,2}:
  4.0   5.0   6.0
  8.0  10.0  12.0
 12.0  15.0  18.0

๋ฒกํ„ฐ ๊ณฑํ•˜๊ธฐ ๋ฒกํ„ฐ๋Š” ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

julia> x*y
ERROR: `*` has no method matching *(::Array{Float64,1}, ::Array{Float64,1})

๋ฒกํ„ฐ ๊ณฑํ•˜๊ธฐ ํ–‰๋ ฌ์€ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.

julia> x*A
ERROR: DimensionMismatch("*")
 in gemm_wrapper! at linalg/matmul.jl:270
 in * at linalg/matmul.jl:74

ํ–‰๋ ฌ ๊ณฑ์…ˆ์€ ์—ฐ๊ด€์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

julia> (x*x')*y
3-element Array{Float64,1}:
 32.0
 64.0
 96.0

julia> x'*y
32.0

julia> x*(x'*y)
3-element Array{Float64,1}:
 32.0
 64.0
 96.0

julia> norm((x*x')*y-x*(x'*y))
0.0

ํŽธ์ง‘ : ์ œํ’ˆ์˜ ๋‚ด๋ถ€ ์ฐจ์› ๊ฐ•๋“ฑ๊ณผ ๊ด€๋ จ๋œ ๋‘ ๊ฐ€์ง€ ์˜ˆ๋ฅผ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ํ˜„์žฌ ํ† ๋ก ์— ๋งŽ์€ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค ์ฐจ์›์„ ๋ฒ„๋ฆฌ๋Š” ๊ฒƒ์€ ์œ ํ˜•์ด ์•ˆ์ •์ ์ธ ์ž‘์—…์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ จ ์ž‘์—…์˜ ์œ ํ˜• ์•ˆ์ •์„ฑ์„ ์žƒ์„ ๊นŒ ๋ด ๊ฑฑ์ •๋ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€๋ณด๊ธฐ์—, ์ „์ฒด ์ฝ” ๋ฒกํ„ฐ ์‚ฌ์—…์€ ์ œ๊ฑฐ ๋  ์œ ํ˜•์— ๋”ฐ๋ผ ์•Œ๋ ค์ง„ ๋‹จ์ผ ์ฐจ์›์„ ๊ฐ–๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์šฐ๋ฆฌ๋Š” ๋ฒกํ„ฐ์™€ ํ•˜๋‚˜์˜ ์—ด๋งŒ์žˆ๋Š” ํ–‰๋ ฌ ์‚ฌ์ด์˜ ๊ตฌ๋ถ„์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋งค์šฐ ์—ด์‹ฌํžˆ ๋…ธ๋ ฅํ•ด ์™”์ง€๋งŒ์ด ์ œ์•ˆ์€ x'' ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์ด๋Ÿฌํ•œ ๊ตฌ๋ถ„์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋‹จ ์  ์ œ์•ˆ : ์œ ํ˜• ๋งค๊ฐœ ๋ณ€์ˆ˜์—์„œ ์ฐจ์›์„ ์‚ญ์ œํ•˜๊ณ  ๋Ÿฐํƒ€์ž„์— ๋ชจ๋“  ์ฐจ์› / ํฌ๊ธฐ๋ฅผ ํ™•์ธํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”? (์–ด์จŒ๋“  ์ƒ๋‹นํ•œ ์–‘์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ๋ฉ๋‹ˆ๋‹ค.) ๋˜ํ•œ ํฌ๊ธฐ๋ฅผ ์œ ํ˜• ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์ธ์ฝ”๋”ฉํ•˜๋Š” ์œ ํ˜•์— ๋Œ€ํ•ด์„œ๋Š” ์ฐจ์› ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ๋‘ก๋‹ˆ๋‹ค. (Ducks, 2 ์ฃผ ๋™์•ˆ ์ˆจ์–ด์„œ ๊ทธ์˜ github ๊ณ„์ •์„ @SomeoneWhoCertainlyIsntTimHolyUhUhNoWay๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.)

(๋ฌผ๋ก  # 10525๋งŒ์œผ๋กœ๋„ ๋‚˜ ์ž์‹ ์—๊ฒŒ ๋ถˆํ‰ ํ•  ๊ฒƒ์ด๋‹ค.)

FWIW, ๊ทธ๊ฒƒ์€ ๊ทธ๋ ‡๊ฒŒ ๋ฏธ์นœ ์ƒ๊ฐ์ด ์•„๋‹ˆ๋ผ๊ณ  ๋งํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Torch๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ด๊ณ  Torch ๊ฐœ๋ฐœ์ž๋Š” Julia์˜ ์œ ํ˜• ์‹œ์Šคํ…œ ๋‚ด ์ฐจ์› ์ธ์ฝ”๋”ฉ์— ๋ถˆ๋งŒ์„ ํ‘œ๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค.

@timholy ์งˆ๋ฌธ : ์„ ํ˜• ๋Œ€์ˆ˜์™€ ๋ฒกํ„ฐ์˜ ์ „์น˜์— ๊ด€ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐœ์„  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

CoVector / DualVector / TransposeVector ์‚ฌ์šฉ์— ์—ฌ์ „ํžˆ ๊ด€์‹ฌ์ด์žˆ๋Š” ๊ฒฝ์šฐ ์ƒˆ TimHolyArray{DataType} _and_์„ (๋ฅผ) ์ดํ•ดํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. 2 (๋˜๋Š” 1)๋ณด๋‹ค ํฐ ์ฐจ์› ๋ฐฐ์—ด์˜ ์ „์น˜, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด tharray ์ฐจ์›์ด 2 (๋˜๋Š” 1)๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ TransposeVector(tharray) ๊ตฌ์„ฑ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ํ˜„์žฌ ์ปดํŒŒ์ผ ํƒ€์ž„ ์˜ค๋ฅ˜ ์ธ ๋Ÿฐํƒ€์ž„ ์ˆ˜์ค€์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (์˜ˆ : ํ˜„์žฌ ์ •์˜๋˜์ง€ ์•Š์•„ ํ˜•์‹ ์‹œ์Šคํ…œ์—์„œ ๊ธˆ์ง€ํ•˜๋Š” ๊ณฑ์…ˆ).

๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ,์ด ์ƒˆ๋กœ์šด ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์ „์น˜ ํ”Œ๋ž˜๊ทธ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ํšจ์œจ์ ์ด๊ณ  ๊ฐ€๋ฒผ์šด ์ปจํ…Œ์ด๋„ˆ๊ฐ€๋˜์–ด์•ผํ•˜๋Š” ๊ฒƒ์— ๋” ๋งŽ์€ ๋ณต์žก์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ ์˜ต์…˜์„ ๋ฐฐ์ œํ•˜๊ณ  ์ปดํŒŒ์ผ๋Ÿฌ / ํƒ€์ž… ์‹œ์Šคํ…œ์— ํž˜๋“  ์ž‘์—…์„ ๋งก๊ธฐ๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์˜ ์•„์ด๋””์–ด์— ๋ฐ˜๋“œ์‹œ ๋ฐ˜๋Œ€ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๋ฒกํ„ฐ ์ „์น˜์™€ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰ ๋  ์ˆ˜์žˆ๋Š” ์ถ”๊ฐ€ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@timholy : ์ด๊ฒƒ์ด ๊ฐˆ ๊ธธ์ธ์ง€ ์•„๋‹Œ์ง€ ์ •๋ง ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค. ์ฐจ์›์—์„œ ํŒŒ๊ฒฌํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ์•ˆ์€ ์ด๊ฒƒ์„ ๋ชจ๋“  ์–ด๋ ˆ์ด์— ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ ๋‚ด ์ œ์•ˆ์— ๋ฐ˜๋Œ€ํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ๋‹ค์ฐจ์› ์‚ฌ๋ก€์—์„œ N ์ฐจ์› ๋ฐฐ์—ด์— ๋Œ€ํ•ด N ๋ฃจํ”„๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. N ๊ฐ€ ์œ ํ˜• ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ ๋” ์ด์ƒ์ด๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ, ์ด๊ฒƒ์ด ๋ฐ์นด๋ฅดํŠธ ๋งคํฌ๋กœ์˜ ์ „์ฒด ์š”์ ์ด ์•„๋‹™๋‹ˆ๊นŒ (๋˜๋Š” ์•„์ง ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๋‹จ๊ณ„์  ํ•จ์ˆ˜ :-))?
์น˜์ˆ˜๋ฅผ ํ…œํ”Œ๋ฆฟ ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ •๋ง ๊ณ ํ†ต์Šค๋Ÿฌ์šด C ++์—์„œ๋„ ๋น„์Šทํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค๋ฅธ ๋ฐฐ์—ด ์ฐจ์›์„ ์ „๋ฌธํ™”ํ•˜๊ธฐ ์œ„ํ•ด ํฐ if ๋ฌธ์ด ํ•„์š”ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋™์  ๋ณ€ํ˜•์ด ์ œํ•œ๋˜๋Š” ์ƒํ™ฉ์ด์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์‹ ์ฒญ:

  1. ํ˜„์žฌ ํ–‰๋ ฌ ๊ณฑ์…ˆ ๋™์ž‘์˜ ์ด๋ฆ„์„ timesfast ๋ฐ”๊พธ๊ณ  ํ˜„์žฌ ์ „์น˜ ๋™์ž‘์˜ ์ด๋ฆ„์„ transposefast ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
  2. (*) ๋ฐ transpose ๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์ด์ „ ์ฃผ์„ ์—์„œ์™€ ๊ฐ™์ด ํ›„ํ–‰ ๋‹จ์ผ ์น˜์ˆ˜๋ฅผ ์ž๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด u'*v ๋Š” ์Šค์นผ๋ผ๊ฐ€๋˜๊ณ  v'' ๋Š” ๋ฒกํ„ฐ๊ฐ€๋˜๊ณ  (v*v')/(v'*v) ๊ฐ€ ์ •์˜๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์กด ๋™์ž‘์€ ์œ ํ˜•์ด ์•ˆ์ •์ ์ž…๋‹ˆ๋‹ค. ์ œ์•ˆ ๋œ ๋™์ž‘์€ ๋งŽ์€ ์„ ํ˜• ๋Œ€์ˆ˜ ํ…์ŠคํŠธ์˜ ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ Julia๋Š” ๋‘˜ ๋‹ค ๊ฐ€์ ธ์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ต์‹ค์—์„œ Julia๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์„ฑ๋ณด๋‹ค ํŽธ๋ฆฌํ•จ์„ ์ค‘์‹œํ•˜๋Š” ๊ธฐ๋ณธ ๋™์ž‘์— ํˆฌํ‘œํ•ฉ๋‹ˆ๋‹ค.

์ด ๋งค์šฐ ๊ธด ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ ์†๋„๋ฅผ ๋†’์—ฌ์ค€ ์—ฌ๋Ÿฌ ๊ธฐ์—ฌ์ž์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

@briansutton : ๋‚˜๋Š” ๋‹น์‹ ์ด ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์„ ์ •๋ง๋กœ ์žฌ๊ณ ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ณฑ์…ˆ์˜ ์˜๋ฏธ๋ฅผ ์žฌ์ •์˜ ํ•  ๊ฒƒ์„ ์ œ์•ˆํ•˜๊ธฐ ์ „์— Julia๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๋” ๊นŠ์ด ์ดํ•ดํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์€ ํŠน์ˆ˜ ์‚ฌ๋ก€๋ฅผ ํ”ผํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๊ด€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹จ์ผ ์น˜์ˆ˜์˜ ํผ์ง•์„ ํ—ˆ์šฉํ•˜๋Š” ๊ทœ์น™์€ ๋‹จ์ผ ์น˜์ˆ˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์‹ค์ œ๋กœ ๊ด€์‹ฌ์„ ๊ฐ–๋Š” ์ˆœ๊ฐ„์— ๋ถ„ํ•ด๋ฉ๋‹ˆ๋‹ค. "[๋ชจ๋“ ] ํ›„ํ–‰ ๋‹จ์ผ ์ฐจ์› ์ž๋ฅด๊ธฐ"๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋ฉด v ๊ฐ€ ์š”์†Œ๊ฐ€ 1 ๊ฐœ์ธ ๋ฒกํ„ฐ์ด๋ฉด v' ๊ฐ€ ์Šค์นผ๋ผ์ด๋ฏ€๋กœ v'' ๋„ ์Šค์นผ๋ผ. ๋”ฐ๋ผ์„œ์ด ์ œ์•ˆ์—์„œ๋„ v == v'' ๊ฐ€ ํ•ญ์ƒ ๋ณด์œ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

"๋ฐฐ์—ด์— ์ฐจ์›์ด 2 ์ธ ๊ฒฝ์šฐ ๋งˆ์ง€๋ง‰ ํ›„ํ–‰ ๋‹จ์ผ ์ฐจ์› ๋งŒ ์ž๋ฅด๋„๋ก"๊ทœ์น™์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜์ด ์ˆ˜์ • ๋œ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์™ธ๋ถ€ ๊ณฑ v * w' ๋Š” ํ–‰๋ ฌ ๊ณฑ์…ˆ์˜ ์ •์˜์—์„œ ์ž๋™์œผ๋กœ ๋”ฐ๋ฅด์ง€ ์•Š๊ณ  ๋Œ€์‹  Vector * Matrix ์˜ ๊ณ ์œ  ํ•œ ํŠน์ˆ˜ํ•œ ์ •์˜ ์—ฌ์•ผํ•˜๋ฉฐ ์ •์˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผํ•ฉ๋‹ˆ๋‹ค. "๋ชจ์–‘์ด (N) x (1, M))์ด ์•„๋‹ˆ๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋˜์ง€์‹ญ์‹œ์˜ค.

@jiahao :

๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ์ˆ˜ํ–‰ ํ•  ๋•Œ ์Šค์นผ๋ผ, ์š”์†Œ๋ฅผ 1 ๊ฐœ ๊ฐ€์ง„ ๋ฒกํ„ฐ ๋ฐ 1x1 ํ–‰๋ ฌ ์‚ฌ์ด์— ์–ด๋–ค ์ฐจ์ด๋„ ๊ทธ๋ฆฌ์ง€ ์•Š์œผ๋ ค ๊ณ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ ๋‹ค์–‘ํ•œ ์ž‘์—…์œผ๋กœ ์„ธ ๊ฐ€์ง€ ๊ฐœ์ฒด ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋‚ด ์ œ์•ˆ์€ ํ–‰๋ ฌ ๊ณฑ์…ˆ๊ณผ ์ „์น˜ ์—ฐ์‚ฐ์— ๋Œ€ํ•ด ์„ธ ๊ฐ€์ง€ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํ˜ธํ•˜๋Š” ํ‘œํ˜„์œผ๋กœ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์˜ˆ์ œ ( v==v'' )์™€ ๊ด€๋ จํ•˜์—ฌ ์ฒ˜์Œ์— ์š”์†Œ 1 ๊ฐœ ๋ฒกํ„ฐ v ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ํ”ผํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์˜ˆ์™€ ๊ด€๋ จํ•˜์—ฌ ์˜ˆ, v*w' ๋Š” ์„ค๋ช…๋Œ€๋กœ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ–‰๋ ฌ ๊ณฑ์…ˆ ๋ฐ ์ „์น˜ ์ž‘์—…์„ ํ•  ๋•Œ ๋ฒกํ„ฐ v ๋ฐ Nx1 ํ–‰๋ ฌ v[:,[1]] ๊ฐ€ ๋‚ด๋ถ€ ํ‘œํ˜„์ด ๋‹ค๋ฅด๋”๋ผ๋„ ๋™์ผํ•œ ์ˆ˜ํ•™์  ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” N ๋ฒกํ„ฐ x 1xM ํ–‰๋ ฌ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ์œ„ํ•œ ํŠน์ˆ˜ ์ฝ”๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์œ ํ˜• ์•ˆ์ •์„ฑ์ด ์ค‘์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์—ฌ์ „ํžˆ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@briansutton : ํ˜„์žฌ ์œ ํ˜• ์‹œ์Šคํ…œ์ด Julia ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜์žˆ๋Š”๋งŒํผ ๋น ๋ฅด๊ฒŒ ์ œ์•ˆ์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ธฐ๊ณ„๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ์œ ์ตํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์„ฑ๋Šฅ๊ณผ C ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์•„์›ƒ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•˜๋Š” Julian ๋ชฉํ‘œ๋ฅผ ๊ณ ๋ คํ•  ๋•Œ ์–ธ๊ธ‰ ํ•œ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑ ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•ž๋’ค๋กœ ์ง„ํ–‰๋˜๋Š” ๋…ผ์Ÿ์„ ์ดํ•ดํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ํ•œ ๊ฐ€์ง€ ๋ˆˆ์— ๋„์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์€ ํฌ๋ง์ ์ธ ์ƒ๊ฐ์ผ์ง€๋„ ๋ชจ๋ฅด์ง€๋งŒ, ์ปดํ“จํ„ฐ๊ฐ€ ์ธ๊ฐ„์˜ ๋‘๋‡Œ๋งŒํผ ๋นจ๋ฆฌ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด ๋ง์€ Brian Sutton์ด "์„ ํ˜ธํ•˜๋Š” ํ‘œํ˜„์„ ๊ณ ๋ฅด๋Š”"ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•  ๋•Œ, ์šฐ๋ฆฌ๊ฐ€ ์ˆ˜ํ•™์„ ํ•  ๋•Œ ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•  ์ˆ˜์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์˜ค๋Š˜๋‚ ์˜ ๊ธฐ์ˆ ๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์ผ์ด ๋„ˆ๋ฌด ๋Š๋ ค์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ข‹์ง€ ์•Š์„๊นŒ์š” ...

์ €๋Š” ๋ฌผ๋ฆฌํ•™ ์ž์ด์ž Julia์˜ ์ ๊ทน์ ์ธ ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋” ์ด์ƒ ๋‚ ์”จ๋ฅผ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜ ๋ชจ๋“  ํ›„ํ–‰ ๋‹จ์ผ ์น˜์ˆ˜๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ๋Š” ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ Julia ๊ตฌํ˜„ :

V๋ฅผ 3 ์ฐจ์› ๋žญํฌ -1 ํ…์„œ (๋ฒกํ„ฐ)๋ผ๊ณ ํ•ฉ์‹œ๋‹ค.
V [1]์€ 1 ์ฐจ์› ๋žญํฌ -1 ํ…์„œ๊ฐ€ ์•„๋‹Œ ์Šค์ผ€์ผ๋Ÿฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

A๋ฅผ 3x4x5 ๋žญํฌ -3 ํ…์„œ๋ผ๊ณ ํ•ฉ๋‹ˆ๋‹ค.
B = A [1, :, :]๋Š” 1x4x5 rank-3 ํ…์„œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ๋‘ ๊ฐ€์ง€ ๋™์ž‘์€ ์ผ๊ด€์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์ธ๋ฑ์‹ฑ / ์Šฌ๋ผ์ด๋”ฉ ๊ธฐ๋Šฅ์„ ๊ฐ•๋ ฅํ•˜๊ฒŒ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

A๋ฅผ 3x4x5 ๋žญํฌ -3 ํ…์„œ๋ผ๊ณ ํ•ฉ๋‹ˆ๋‹ค.
B = A [1, :, :]๋Š” 4x5 rank-2 ํ…์„œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
C = A [1 : 1, :, :]์€ 1x4x5 rank-2 ํ…์„œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
(ํ˜„์žฌ ์œ„์˜ ๋‘ ๊ฐ€์ง€๋Š” ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค)

V๋ฅผ ๋žญํฌ 1 ํ…์„œ๋กœ ์ง€์ •
B = V [1]์€ ์Šค์ผ€์ผ๋Ÿฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
C = V [1 : 1]์€ 1-dim rank-1 tensor๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ํ…์„œ์˜ ๋ชจ์–‘์„๋ณด๋‹ค ์‰ฝ๊ฒŒ โ€‹โ€‹๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜๋ฉฐ ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค ์ธ๋ฑ์Šค๋ฅผ ํ—ˆ์šฉ ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฒ ์ŠคํŠธ

์ƒค์˜ค๊ฐ•


๋ณด๋‚ธ ์‚ฌ๋žŒ : esd100 [[email protected]]
์ „์†ก : 2015 ๋…„ 6 ์›” 9 ์ผ ํ™”์š”์ผ ์˜คํ›„ 9:46
๋ฐ›๋Š” ์‚ฌ๋žŒ : JuliaLang / julia
์ฐธ์กฐ : Xiao-Gang Wen
์ œ๋ชฉ : Re : [julia] ๋ฒกํ„ฐ ์ „์น˜ ์ง„์ง€ํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด ๊ธฐ (# 4774)

์•ž๋’ค๋กœ ์ง„ํ–‰๋˜๋Š” ๋…ผ์Ÿ์„ ์ดํ•ดํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ํ•œ ๊ฐ€์ง€ ๋ˆˆ์— ๋„์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์€ ํฌ๋ง์ ์ธ ์ƒ๊ฐ์ผ์ง€๋„ ๋ชจ๋ฅด์ง€๋งŒ, ์ปดํ“จํ„ฐ๊ฐ€ ์ธ๊ฐ„์˜ ๋‘๋‡Œ๋งŒํผ ๋นจ๋ฆฌ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด ๋ง์€ Brian Sutton์ด "์„ ํ˜ธํ•˜๋Š” ํ‘œํ˜„์„ ๊ณ ๋ฅด๋Š”"ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•  ๋•Œ, ์šฐ๋ฆฌ๊ฐ€ ์ˆ˜ํ•™์„ ํ•  ๋•Œ ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•  ์ˆ˜์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์˜ค๋Š˜๋‚ ์˜ ๊ธฐ์ˆ ๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์ผ์ด ๋„ˆ๋ฌด ๋Š๋ ค์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ข‹์ง€ ์•Š์„๊นŒ์š” ...

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ Gi tHubhttps : //github.com/JuliaLang/julia/issues/4774#issuecomment -110554622์—์„œ ํ™•์ธํ•˜์„ธ์š”.

๋‚ด ๋ง์€ : C = A [1 : 1, :, :]์€ ์šฐ๋ฆฌ์—๊ฒŒ 1x4x5 ๋žญํฌ -3 ํ…์„œ๋ฅผ ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ƒค์˜ค๊ฐ•


๋ณด๋‚ธ ์‚ฌ๋žŒ : Xiao-Gang Wen [[email protected]]
์ „์†ก : 2015 ๋…„ 6 ์›” 22 ์ผ ์›”์š”์ผ ์˜คํ›„ 12:01
๋ฐ›๋Š” ์‚ฌ๋žŒ : JuliaLang / julia; JuliaLang / julia
์ฐธ์กฐ : Xiao-Gang Wen
์ œ๋ชฉ : RE : [julia] ๋ฒกํ„ฐ ์ „์น˜ ์ง„์ง€ํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด ๊ธฐ (# 4774)

์ €๋Š” ๋ฌผ๋ฆฌํ•™ ์ž์ด์ž Julia์˜ ์ ๊ทน์ ์ธ ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋” ์ด์ƒ ๋‚ ์”จ๋ฅผ ์œ ์ง€ํ•˜๊ฑฐ๋‚˜ ๋ชจ๋“  ํ›„ํ–‰ ๋‹จ์ผ ์น˜์ˆ˜๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์„œ๋Š” ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ์ œ๊ธฐํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ Julia ๊ตฌํ˜„ :

V๋ฅผ 3 ์ฐจ์› ๋žญํฌ -1 ํ…์„œ (๋ฒกํ„ฐ)๋ผ๊ณ ํ•ฉ์‹œ๋‹ค.
V [1]์€ 1 ์ฐจ์› ๋žญํฌ -1 ํ…์„œ๊ฐ€ ์•„๋‹Œ ์Šค์ผ€์ผ๋Ÿฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

A๋ฅผ 3x4x5 ๋žญํฌ -3 ํ…์„œ๋ผ๊ณ ํ•ฉ๋‹ˆ๋‹ค.
B = A [1, :, :]๋Š” 1x4x5 rank-3 ํ…์„œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์œ„์˜ ๋‘ ๊ฐ€์ง€ ๋™์ž‘์€ ์ผ๊ด€์„ฑ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ์ธ๋ฑ์‹ฑ / ์Šฌ๋ผ์ด๋”ฉ ๊ธฐ๋Šฅ์„ ๊ฐ•๋ ฅํ•˜๊ฒŒ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

A๋ฅผ 3x4x5 ๋žญํฌ -3 ํ…์„œ๋ผ๊ณ ํ•ฉ๋‹ˆ๋‹ค.
B = A [1, :, :]๋Š” 4x5 rank-2 ํ…์„œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
C = A [1 : 1, :, :]์€ 1x4x5 rank-2 ํ…์„œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
(ํ˜„์žฌ ์œ„์˜ ๋‘ ๊ฐ€์ง€๋Š” ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค)

V๋ฅผ ๋žญํฌ 1 ํ…์„œ๋กœ ์ง€์ •
B = V [1]์€ ์Šค์ผ€์ผ๋Ÿฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
C = V [1 : 1]์€ 1-dim rank-1 tensor๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ์€ ํ…์„œ์˜ ๋ชจ์–‘์„๋ณด๋‹ค ์‰ฝ๊ฒŒ โ€‹โ€‹๋ณ€๊ฒฝํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜๋ฉฐ ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค ์ธ๋ฑ์Šค๋ฅผ ํ—ˆ์šฉ ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋ฒ ์ŠคํŠธ

์ƒค์˜ค๊ฐ•


๋ณด๋‚ธ ์‚ฌ๋žŒ : esd100 [[email protected]]
์ „์†ก : 2015 ๋…„ 6 ์›” 9 ์ผ ํ™”์š”์ผ ์˜คํ›„ 9:46
๋ฐ›๋Š” ์‚ฌ๋žŒ : JuliaLang / julia
์ฐธ์กฐ : Xiao-Gang Wen
์ œ๋ชฉ : Re : [julia] ๋ฒกํ„ฐ ์ „์น˜ ์ง„์ง€ํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด ๊ธฐ (# 4774)

์•ž๋’ค๋กœ ์ง„ํ–‰๋˜๋Š” ๋…ผ์Ÿ์„ ์ดํ•ดํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ํ•œ ๊ฐ€์ง€ ๋ˆˆ์— ๋„์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์€ ํฌ๋ง์ ์ธ ์ƒ๊ฐ์ผ์ง€๋„ ๋ชจ๋ฅด์ง€๋งŒ, ์ปดํ“จํ„ฐ๊ฐ€ ์ธ๊ฐ„์˜ ๋‘๋‡Œ๋งŒํผ ๋นจ๋ฆฌ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด ๋ง์€ Brian Sutton์ด "์„ ํ˜ธํ•˜๋Š” ํ‘œํ˜„์„ ๊ณ ๋ฅด๋Š”"ํ”„๋กœ๊ทธ๋žจ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•  ๋•Œ, ์šฐ๋ฆฌ๊ฐ€ ์ˆ˜ํ•™์„ ํ•  ๋•Œ ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ƒ๊ฐํ•  ์ˆ˜์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์ƒํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์˜ค๋Š˜๋‚ ์˜ ๊ธฐ์ˆ ๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์ผ์ด ๋„ˆ๋ฌด ๋Š๋ ค์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ข‹์ง€ ์•Š์„๊นŒ์š” ...

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ Gi tHubhttps : //github.com/JuliaLang/julia/issues/4774#issuecomment -110554622์—์„œ ํ™•์ธํ•˜์„ธ์š”.

๋‹น์‹ ์ด ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์€ ํ˜„์žฌ slice ์ž‘๋™ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ๋‚ด ๊ฐ๊ฐ์€ A[stuff] ์ด slice(A, stuff) ์˜ ๋™์˜์–ด๊ฐ€ ๋  ๊ฒƒ์ด๋ฏ€๋กœ ์•„๋งˆ๋„ ๋‹น์‹ ์˜ ์†Œ์›์„ ์–ป์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์นœ์• ํ•˜๋Š” Tim :

ํŒ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์Šฌ๋ผ์ด์Šค๋ฅผ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ํ•„์š”์— ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Slice๋Š” :: Array ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์—†๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ ์œ ํ˜• "subarray"๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

"subarray"๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ํ—ˆ์šฉํ•˜๋„๋ก ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒค์˜ค๊ฐ•


๋ณด๋‚ธ ์‚ฌ๋žŒ : Tim Holy [[email protected]]
์ „์†ก : 2015 ๋…„ 6 ์›” 22 ์ผ ์›”์š”์ผ ์˜คํ›„ 5:32
๋ฐ›๋Š” ์‚ฌ๋žŒ : JuliaLang / julia
์ฐธ์กฐ : Xiao-Gang Wen
์ œ๋ชฉ : Re : [julia] ๋ฒกํ„ฐ ์ „์น˜ ์ง„์ง€ํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด ๊ธฐ (# 4774)

๋‹น์‹ ์ด ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์€ ์Šฌ๋ผ์ด์Šค๊ฐ€ ํ˜„์žฌ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€์ž…๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—๋Š” A [stuff]๊ฐ€ slice (A, stuff)์˜ ๋™์˜์–ด๊ฐ€ ๋  ๊ฒƒ์ด๋ฏ€๋กœ ์•„๋งˆ๋„ ๋‹น์‹ ์˜ ์†Œ์›์„ ์–ป์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ Gi tHubhttps : //github.com/JuliaLang/julia/issues/4774#issuecomment -114268796์—์„œ ํ™•์ธํ•˜์„ธ์š”.

์ฝ”๋“œ์—์„œ AbstractArray ๋Œ€์‹  ๊ตฌ์ฒด์ ์ธ Array ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์‹ค์ œ๋กœ ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด Array ๋ฅผ AbstractArray ๋กœ ๊ฒ€์ƒ‰ / ๋ฐ”๊พธ๊ธฐ ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.

์นœ์• ํ•˜๋Š” Scott

ํŒ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ƒค์˜ค๊ฐ•


๋ณด๋‚ธ ์‚ฌ๋žŒ : Scott P. Jones [[email protected]]
์ „์†ก : 2015 ๋…„ 6 ์›” 25 ์ผ ๋ชฉ์š”์ผ ์˜ค์ „ 9:55
๋ฐ›๋Š” ์‚ฌ๋žŒ : JuliaLang / julia
์ฐธ์กฐ : Xiao-Gang Wen
์ œ๋ชฉ : Re : [julia] ๋ฒกํ„ฐ ์ „์น˜ ์ง„์ง€ํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด ๊ธฐ (# 4774)

์ฝ”๋“œ์—์„œ AbstractArray ๋Œ€์‹  ๊ตฌ์ฒด์ ์ธ Array ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ์‹ค์ œ๋กœ ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Array๋ฅผ AbstractArray๋กœ ๊ฒ€์ƒ‰ / ๊ต์ฒดํ•˜๋Š” ๊ฒƒ ์ด์ƒ์ด ํ•„์š”ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ Gi tHubhttps : //github.com/JuliaLang/julia/issues/4774#issuecomment -115265047์—์„œ ํ™•์ธํ•˜์„ธ์š”.

๊ทธ๊ฒŒ ๋‹น์‹ ์„ ์œ„ํ•ด ์†์ž„์ˆ˜๋ฅผ ์“ฐ ์…จ๋‚˜์š”? ๊ธฐ๊บผ์ด ๋„์™€ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค!

@wenxgwen , ๋˜๋Š” copy(slice(A,...)) ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํ•จ์ˆ˜์™€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž‘๋™ํ•ด์•ผํ•˜๋Š” ์ƒˆ๋กœ์šด Array ์—์„œ ์Šฌ๋ผ์ด์Šค ์‚ฌ๋ณธ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์€ ์ด์ œ ์œ ๋ฆฌํ•œ ๋…ธ๋ ฅ ์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๊ฒƒ์ด ์ด์ œ 3 ๊ฐœ์˜ ์‰ผํ‘œ๋กœ๊ฐ€๋Š” ๊ฒฝ๋กœ์—์„œ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ...
image

๊ทธ๋Ÿฌ๋‚˜ ์ง„์ง€ํ•˜๊ฒŒ. ๋‚˜๋Š” ํ† ๋ก ์„ ์™„์ „ํžˆ ์ฝ์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์ง€๋งŒ ์ด๊ฒƒ์ด ์ด์ „์— ์ œ์•ˆ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

AbstractArray ์ •์˜๋ฅผ ํ™•์žฅํ•˜์—ฌ ๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ๊ฐ€ ํ–‰ ๊ธฐ๋ฐ˜ ์ €์žฅ์†Œ์ธ์ง€ ์—ด ๊ธฐ๋ฐ˜ ์ €์žฅ์†Œ์ธ์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ์ถ”๊ฐ€ ํŠน์„ฑ (LinearIndexing๊ณผ ์œ ์‚ฌํ•œ?)์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๋ ‡๊ฒŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†์„ฑ์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค (์ด๋ฆ„์— ์ดˆ์ ์„ ๋งž์ถ”์ง€ ๋ง๊ณ  ๊ฐœ๋…์—๋งŒ ์ง‘์ค‘ํ•˜์‹ญ์‹œ์˜ค).

v --> length-2 Vector{Col}
  [ 1
    2 ]

v'  --> length-2 Vector{Row}
  [ 1 2 ]

m --> 2x2 Matrix{Col}
  [ 1 3 
    2 4 ]

m' --> 2x2 Matrix{Row}
  [ 1 2 
    3 4 ]

Some operations:
v'  --> length-2 Vector{Col}
v'' == v
v*v or v'*v'  --> either error, or do element-wise multiplication
v' * v --> scalar
v * v' --> 2x2 Matrix  (could be Row or Col??)
v' * m --> 2-length Vector{Row}
v * m --> either error or broadcasting operation
m * v --> either error or broadcasting operation
m * v' --> 2-length Vector{Col}

Indexing:
v[2] --> 2
v[1,2] --> error
v'[1,2] --> 2
m[1,2]  --> 3
m'[1,2]  --> 2

Size:
length(v)  --> 2
length(v')  --> 2
size(v)  --> (2,)
size(v')  --> (2,)
length(m)  --> 4
size(m)  --> (2,2)

๋ถ„๋ช…ํžˆ์ด ์ œ์•ˆ์—๋Š” ๋งŽ์€ ์ •์˜๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ์žˆ์ง€๋งŒ ํ† ๋ก ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ด-์ธ๋ฑ์Šค์™€ ํ–‰-์ธ๋ฑ์Šค ์ €์žฅ์†Œ๋ฅผ ๋™์‹œ์— ์ง€์›ํ•˜๊ณ  ๊ทธ ๊ณผ์ •์—์„œ ์ผ๋ถ€ ๋ฌธ์ œ๋ฅผ "์ˆ˜์ •"ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

Julia๊ฐ€ ํ–‰ ๊ธฐ๋ฐ˜ ์Šคํ† ๋ฆฌ์ง€ ์˜€์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฃจํ”„ ๋ฐ ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ์ž‘์—…์— ๋Œ€ํ•ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ƒ๊ฐํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. (๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” ์ด๋Ÿฐ ์‹์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ์œ ์ผํ•œ ์‚ฌ๋žŒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค) ๋Œ“๊ธ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์ƒ์„ฑ์ž๊ฐ€ ํ–‰์ด๋‚˜ ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํฅ๋ฏธ๋กœ์šด ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” GitHub ์ด์Šˆ ์‹œ์Šคํ…œ์˜ ๊นŠ์ˆ™ํ•œ ๊ณณ์—์„œ ์ „์— ๋…ผ์˜๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํ‹€๋ ธ์„ ์ˆ˜๋„์žˆ๋‹ค!

๋Œ€๋ถ€๋ถ„์˜ ๊ต๊ณผ์„œ๋Š” ์ˆ˜ํ•™์— ์—ด์„ ์‚ฌ์šฉํ•˜๊ณ  Julia์—์„œ๋Š” ๋Œ€์‹  ํ–‰์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๊ฒƒ์„ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ์ธ์ ์œผ๋กœ ์—ด ๊ธฐ๋ฐ˜ ์ €์žฅ์†Œ๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์ด์ƒํ•˜๊ฒŒ ๋Š๊ปด์กŒ์ง€๋งŒ ๊ธˆ๋ฐฉ ๋‚ด ์ž‘์—…์— ๋ฌธ์ œ๊ฐ€๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ–‰์œผ๋กœ ๋” ์‰ฝ๊ฒŒ ํ‘œํ˜„๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ์ง€๋งŒ ์ด๊ฒƒ์ด ํ•„์š”ํ•  ๋•Œ ๋น„ํ‘œ์ค€ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•˜๋Š” ์ข‹์€ ์ด์œ ์ž…๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ ์–ด๋–ค ์œ ํ˜•์ด ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ด ์—†๋„๋ก ๋‚ด๋ณด๋‚ด๋Š” ํ•จ์ˆ˜๊ฐ€์žˆ์„ ๋•Œ ํ•ญ์ƒ ์—ด ์ฃผ ํ–‰๋ ฌ ๋˜๋Š” ์—ด ๋ฒกํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ทœ์น™์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์–ด๋–ค ์œ ํ˜•์ด ๋ฐ˜ํ™˜๋˜๋Š”์ง€ ํ•ญ์ƒ ์ฐพ์•„๋ด์•ผ ํ•  ๋•Œ ๋งค์šฐ ์ง€์ €๋ถ„ ํ•ด์ง€๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ๋ถˆํŽธํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ด ๊ธฐ๋ฐ˜๊ณผ ํ–‰ ๊ธฐ๋ฐ˜์€์ด ๋ฌธ์ œ์˜ ๋ฒ”์œ„์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@tbreloff ๋‚˜๋Š” ์•„์ด๋””์–ด๋ฅผ ๋งค์šฐ ์ข‹์•„ํ•ฉ๋‹ˆ๋‹ค. ํ–‰ ์ค‘์‹ฌ์˜ ์–ธ์–ด / ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋” ์‰ฝ๊ฒŒ ์ธํ„ฐํŽ˜์ด์Šค ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Jiahao๋Š” row-major์™€ column-major๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ์ด ์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚œ ๊ฒƒ์ด ๋งž์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์˜
"์ค„๋ฆฌ์•„"๋ฐฉ์‹์œผ๋กœ ์ „์น˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฉ‹์ง„ ๋ถ€์ž‘์šฉ
(ํŒŒ๋ผ ๋ฉ”ํŠธ๋ฆญ ์œ ํ˜• ๋ฐ ๋‹จ๊ณ„์  ํ•จ์ˆ˜)๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋” ๋งŽ์€ ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
์ €์žฅ ํ˜•์‹.

ํ–‰ / ์—ด ํŠน์„ฑ์„ ๋ฐฐ์—ด์— ์ถ”๊ฐ€ํ•˜๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์œผ๋ฉด
TransposeView {T, N}์„ ์‚ฌ์šฉํ•˜์—ฌ ๋˜‘๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ
์ž˜ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋ณต์žก ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์˜์‹ฌํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ํŠน์„ฑ์˜ ๊ฐ€์žฅ ํฐ ๋‹จ์ ์€ ์‹ ๊ทœ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•œ ํ˜ผ๋ž€์ž…๋‹ˆ๋‹ค.
๊ทธ๊ฒŒ ์ œ๊ฐ€ ํ™”ํ•ดํ•˜๊ธฐ ํž˜๋“  ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

2015 ๋…„ 9 ์›” 26 ์ผ ํ† ์š”์ผ, Scott P. Jones [email protected]
์ผ๋‹ค :

@tbreloff https://github.com/tbreloff ์ €๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋งค์šฐ ๋งˆ์Œ์— ๋“ญ๋‹ˆ๋‹ค . ๊ทธ๊ฒƒ
์–ธ์–ด / ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋” ์‰ฝ๊ฒŒ ์ธํ„ฐํŽ˜์ด์Šค ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
ํ–‰ ์ฃผ์š”์ž…๋‹ˆ๋‹ค.

โ€”
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/JuliaLang/julia/issues/4774#issuecomment -143436947.

ํ˜ธ์ถœ ๊ณผ๋ถ€ํ•˜๊ฐ€ ๋””์ž์ธ ๊ณต๊ฐ„์„ ์ „ํ˜€ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๊นŒ? ์œ„์˜ ๊ฒฝ์šฐ ๋•Œ๋•Œ๋กœ * ์˜ ์˜๋ฏธ์— ์ผ์ข…์˜ ๋ชจํ˜ธํ•จ์ด์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. ํŠนํžˆ, v::Covector * w::Vector ๊ฐ€ ์Šค์นผ๋ผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ๋ฅผ ์›ํ•  ๋•Œ ํ–‰๋ ฌ ๊ณฑ์…ˆ ๋Œ€์‹  * ์‹ค์ œ๋กœ " w ์•„๋ž˜์—์žˆ๋Š” v w ๋งคํ•‘"์œผ๋กœ ์ทจํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฒกํ„ฐ ์ž์ฒด๊ฐ€ ์ฝ” ๋ฒกํ„ฐ์— ๋Œ€ํ•œ ์„ ํ˜• ๋งต์ด๊ธฐ ๋•Œ๋ฌธ์— w::Vector * v::Covector ๊ฐ€ ์Šค์นผ๋ผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์œ ์‚ฌํ•˜๊ฒŒ ์š”๊ตฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

์•„๋งˆ๋„ ๋Œ€์‹  ๊ณผ๋ถ€ํ•˜์— ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค call ์“ฐ๋Š” v(w) ์€ "์•„๋ž˜์˜์ง€๋„๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด v ์— ์ž‘์—…์„" w , ์œ ์‚ฌ์— ๋Œ€ํ•œ w(v) -๋‘˜ ๋‹ค ์Šค์นผ๋ผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด 2d ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ๋ฐฐ์—ด ์—ฐ์‚ฐ๊ณผ ์„ ํ˜• ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์ด ๊ณต์œ ํ•˜๋Š” ์˜๋ฏธ๋ฅผ ์ˆ˜์šฉํ•˜๋Š” ๋ฐ ๋” ๋งŽ์€ ์—ฌ์œ ๋ฅผ ํ—ˆ์šฉํ• ๊นŒ์š”?

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฒกํ„ฐ ์ž์ฒด๊ฐ€ covector์— ๋Œ€ํ•œ ์„ ํ˜• ๋งต์ด๊ธฐ ๋•Œ๋ฌธ์— w :: Vector * v :: Covector๊ฐ€ ์Šค์นผ๋ผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ์œ ์‚ฌํ•˜๊ฒŒ ์š”๊ตฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ 1 ํ•™๋…„ ๋Œ€ํ•™์—์„œ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ๋ณด๋Š” ํ–‰๋ ฌ๊ณผ ๋ฒกํ„ฐ ๊ด€์Šต์„ ๋”ฐ๋ฅด๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋น„ ๊ตํ™˜์ ์ด๊ณ  ๋ฒกํ„ฐ * ์ „์น˜ ๋ฒกํ„ฐ-> ํ–‰๋ ฌ (๋žญํฌ -1์˜, ์ฆ‰ ํ•˜๋‚˜ (0์ด ์•„๋‹Œ) ๋‹จ์ˆ˜)์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ’). ๋‹น์‹ ์ด ์“ด ๊ฒƒ์€ ์ถ”์ƒ์  ์ธ ์„ ํ˜• ๋Œ€์ˆ˜ ๊ฐœ๋…์ฒ˜๋Ÿผ ๋“ค๋ฆฌ๋Š”๋ฐ, ๋ฒกํ„ฐ์™€ ๊ณต๋™ / ์ด์ค‘ ๋ฒกํ„ฐ๋Š” ์„œ๋กœ์—์„œ ์–ด๋–ค ์Šค์นผ๋ผ๋กœ์˜ ๋งต์ธ๋ฐ, ๊ดœ์ฐฎ์ง€ ๋งŒ Julia์™€ MATLAB์—์„œ ์‹œ๋„ํ•œ ๊ฒƒ๊ณผ๋Š” ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค (IMHO). ๋‚˜๋Š” ๋‹น์‹ ์ด ์“ด ๊ฒƒ์„ ๋‚ด์ , dot() ๋˜๋Š” โ‹… ๋กœ ํ•ด์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (์šฐ๋ฆฌ๋Š” ์•„๋งˆ๋„ covector์— ๋Œ€ํ•ด ์ •์˜ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.) -product, ํ˜„์žฌ ๋น„๋ˆ„ ์  * ์‚ฌ์šฉํ•˜๋ฉด ๋‘ ๊ฐ€์ง€ ๋™์ž‘์„ ๋ชจ๋‘ ์ž‘์„ฑํ•˜๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜ธ์ถœ ๊ทœ์น™ v(w) , ๋‚ด์ ์— ๋Œ€ํ•ด w ๋ฐฉํ–ฅ์œผ๋กœ v ๊ธˆ์•ก์„ ์›ํ•œ๋‹ค๊ณ  ๋˜‘๊ฐ™์ด ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ธ๋ฑ์‹ฑ ์—ฐ์‚ฐ์ž v[w] ์‚ฌ์šฉ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค

๋‚ด์ ์— ๋Œ€ํ•ด w ๋ฐฉํ–ฅ์œผ๋กœ v ์˜ ์–‘์„ ์›ํ•œ๋‹ค๊ณ  ๋˜‘๊ฐ™์ด ๋งํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” ์ธ๋ฑ์‹ฑ ์—ฐ์‚ฐ์ž v[w] ์‚ฌ์šฉํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด ์ œ์•ˆ์€ ์ธ๋ฑ์‹ฑ์˜ ์˜๋ฏธ๋ฅผ ๊ฑฐ์˜ ๋”ฐ๋ฅด์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ v ์ด Vector{<:Integer} ๊ฒฝ์šฐ ๋ฒกํ„ฐ ์ธ๋ฑ์‹ฑ์— ๋Œ€ํ•œ ํ˜„์žฌ ์ง€์›๊ณผ ์ถฉ๋Œํ•ฉ๋‹ˆ๋‹ค.

v :: Vector{T<:Real} ๊ฒฝ์šฐ v[1] ๋Š” ๋‚ด์  vโ‹…eโ‚ ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ eโ‚ ๋Š” ์ฒซ ๋ฒˆ์งธ ์ถ•์˜ ํ‘œ์ค€ ๊ธฐ์ € ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ„๋‹จํ•œ ์ธ๋ฑ์‹ฑ์ด ์‹ค์ œ๋กœ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

   v[n] : n :: Integer --> y = (v โ‹… eโ‚™) :: T

๋ฒกํ„ฐ ์ธ๋ฑ์‹ฑ์˜ ๊ฒฝ์šฐ v[[1, 2]] ๋Š” [vโ‹…eโ‚, vโ‹…eโ‚‚] v ๋ฅผ {eโ‚, eโ‚‚} ๊ฑธ์ณ์žˆ๋Š” ๋ถ€๋ถ„ ๊ณต๊ฐ„์œผ๋กœ ํˆฌ์˜ ํ•œ ๊ฒฐ๊ณผ ์ธ v' * [eโ‚ eโ‚‚] ์˜ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค

๋”ฐ๋ผ์„œ ๋ฒกํ„ฐ ์ธ๋ฑ์‹ฑ์€

   v[I] : I :: Vector{<:Integer} --> y = v' * [eโ‚™ for n in I] :: Vector{T}

v[w] = (w โ‹… v) v ๋ฅผ ๋งŒ๋“ค ๊ฒ ๋‹ค๋Š” ์ œ์•ˆ์€ n ์ธ๋ฑ์Šค ๋ชจ์Œ ( w ๋กœ ์ง€์ •๋จ)์—์„œ ํ‘œ์ค€ ๊ธฐ์ € ๋ฒกํ„ฐ ๋ชจ์Œ์œผ๋กœ์˜ ์•”์‹œ ์  ๋งคํ•‘์„ ์ œ๊ฑฐํ•˜๋ฏ€๋กœ์ด ์ •์˜์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. eโ‚™ , ํ˜„์žฌ ์ƒ‰์ธ ์ƒ์„ฑ ๊ทœ์น™์ด ์ž‘๋™ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

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

๊ทธ๋ž˜์„œ ์ €๋Š” ์ฝ” ๋ฒกํ„ฐ๋ฅผ ์ดฌ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž‘์—…์ด ๋งŽ๊ณ  ์•ˆํƒ€๊น๊ฒŒ๋„ ๋” ๋งŽ์€ ์‹œ๊ฐ„์„ ํ• ์•  ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ๋‹ฌ๋ฆฌ๊ฑฐ๋‚˜ ์šฐ๋ฆฌ๊ฐ€ ์–ด๋ ค์›€์œผ๋กœ๋ถ€ํ„ฐ ๋ฐฐ์šฐ๊ณ  ๋„๋ง ์น˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•  ๊ฒƒ์ด๋ผ๋Š” ํฌ๋ง์œผ๋กœ ์—ฌ๊ธฐ์— ๊ฒŒ์‹œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๋ทฐ๋กœ ์ „์น˜ํ•˜๋Š” ๋ถ„๊ธฐ ๊ฑด๋ฌผ๊ณผ ์ฝ” ๋ฒกํ„ฐ๋กœ ๊ตฌํ˜„ ๋œ ํ–‰๋ ฌ ๊ณฑ์…ˆ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์„ ํƒ๋œ ํ…Œ์ŠคํŠธ๋Š” ํ†ต๊ณผํ•˜์ง€๋งŒ depwarn=error ์—†์ด ๋งŒ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค (์˜ˆ : ./julia -e 'using Base.Test; include("test/matmul.jl")' ). https://github.com/JuliaLang/julia/compare/mb/transpose

transpose ๋ฐ ctranspose ์˜ ํ–‰๋ ฌ ๋ฐ ๋ฒกํ„ฐ์— ์‚ฌ์šฉํ•  ๋‘ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ๋ทฐ ์œ ํ˜•์„ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

immutable MatrixTranspose{C,T,A} <: AbstractArray{T,2}
    data::A # A <: AbstractMatrix{T}
end
immutable Covector{C,T,V} 
    data::V # V <: AbstractVector{T}
end

C ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ์ „์น˜๊ฐ€ ์ „์น˜์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ„๋‹จํ•œ ๋ถ€์šธ์ž…๋‹ˆ๋‹ค. Covector๋Š” AbstractArray ์˜ ํ•˜์œ„ ์œ ํ˜•์ด _ ์•„๋‹™๋‹ˆ๋‹ค _. ์ด๊ฒƒ์€ ๋””์ŠคํŒจ์น˜๊ฐ€ ํ•ฉ๋ฆฌ์ ์œผ๋กœ ์ž‘๋™ํ•˜๊ธฐ์œ„ํ•œ ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ๋‹จ์  :

  • ์ฝ” ๋ฒกํ„ฐ๋Š” ํ™•์‹คํžˆ ๋ณต์žกํ•˜๋ฉฐ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ณ  ์—„๊ฒฉํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์„œํ™”ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์–ธ์–ด๊ฐ€ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ RowVector ๋ผ๊ณ  ๋ถ€๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ ์ด ๋™์ž‘์„ ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๊ฐ€์žฅ ๋จผ์ € ๋ถ€๋”ชํžˆ๋Š” ์–ด๋ ค์›€์€ ์ฝ” ๋ฒกํ„ฐ์˜ ๋ชจ์–‘์— ๋Œ€ํ•ด ๋งํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค ( size ๋Š” ์ •์˜๋˜์ง€ ์•Š์Œ). (m,n) ์ด ํ–‰๋ ฌ์˜ ๋ชจ์–‘์ด๋ฉด (m,) ๋Š” ๋ฒกํ„ฐ์˜ ๋ชจ์–‘์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠœํ”Œ ํ‘œ๊ธฐ๋ฒ•์„ ๋‚จ์šฉํ•˜๋ฉด ์ฝ” ๋ฒกํ„ฐ๋ฅผ ์€๋ฐ€ํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์—ฌ (,n) ๋ชจ์–‘์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • ํ–‰๋ ฌ * ๋ฒกํ„ฐ๋Š” (m,n) ร— (n,) โ†’ (m,)

    • ์ฝ” ๋ฒกํ„ฐ * ํ–‰๋ ฌ์€ (,m) ร— (m,n) โ†’ (,n)

    • ๋ฒกํ„ฐ * ์ฝ” ๋ฒกํ„ฐ๋Š” (n,) ร— (,n) โ†’ (n,n)

    • ์ฝ” ๋ฒกํ„ฐ * ๋ฒกํ„ฐ๋Š” (,n) ร— (n,) โ†’ ฮฑ (์Šค์นผ๋ผ)์ž…๋‹ˆ๋‹ค.

  • ์—ฌ๊ธฐ์„œ ์ด์ง„ ์—ฐ์‚ฐ๊ณผ ์œ ํ˜•์˜ ์ˆ˜๋Š” ์ •์˜ํ•ด์•ผํ•˜๋Š” ๋ฉ”์„œ๋“œ์˜ ์ˆ˜๋ฅผ ํฌ๊ฒŒ ์กฐํ•ฉํ•˜์—ฌ ํญ๋ฐœ์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    • ๋Œ์—ฐ๋ณ€์ด : (๋ณ€์ด, ๋น„๋ณ€์ด)
    • ์กฐ์˜ฎ๊น€ : (A, Aแต€, Aแดด) ร— (B, Bแต€, Bแดด).
    • ๋ชจ์–‘ : (๋งคํŠธ ร— ๋งคํŠธ; Vec ร— ๋งคํŠธ; ๋งคํŠธ ร— Vec, Vec ร— Vec). ์ด๋“ค ๋ชจ๋‘๊ฐ€ ๋ชจ๋“  ์ „์น˜ ์กฐํ•ฉ์—์„œ ์ง€์›๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์€ ์ง€์›๋ฉ๋‹ˆ๋‹ค.
    • ๊ตฌํ˜„ : (BLAS, Strided, ์ผ๋ฐ˜ ๋ฐ ๊ตฌ์กฐ ๋งคํŠธ๋ฆญ์Šค์— ๋Œ€ํ•œ ์ „๋ฌธํ™”)

    ์ด๋Ÿฌํ•œ ์ž‘์—… ์ค‘ ์ผ๋ถ€๋Š” ์—ฌ๋Ÿฌ ๋””์ŠคํŒจ์น˜ ๋ฐ ํด๋ฐฑ ๋™์ž‘๊ณผ ์ž˜ ๋งž์•„ ๋–จ์–ด์ง€์ง€ ๋งŒ ์—ฌ์ „ํžˆ ๊ฐ ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด _ ์—„์ฒญ๋‚œ ์ˆ˜์˜ ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ˜ผํ•ฉ ํ–‰๋ ฌ / ๋ฒกํ„ฐ ์ง€์›์„ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜๋ฉด ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๋ฐ ํ™•์‹คํžˆ ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค.


  • ๋ชจ๋“  ์Šค์นผ๋ผ ์ฐจ์›์„ ์‚ญ์ œํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ฆ‰์‹œ ํ•ด๊ฒฐํ•˜์ง€๋Š” ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์Šค์นผ๋ผ ์ฐจ์›์„ ์‚ญ์ œํ•  ๋•Œ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ๋ฒกํ„ฐ ์ „์น˜๋ฅผ ์ง€์›ํ•˜๋ฉด ๋ณต์žกํ•œ ์ผค๋ ˆ์™€ ๊ด€๋ จํ•˜์—ฌ ๋ชจํ˜ธํ•œ ์˜์—ญ์—์žˆ๊ฒŒ๋ฉ๋‹ˆ๋‹ค (https://github.com/JuliaLang/julia/pull/13612 ์ฐธ์กฐ). ์•„๋งˆ๋„ ์šฐ๋ฆฌ๋Š” A[1,:] ๊ฐ€ ์ฝ” ๋ฒกํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ž˜ ์ผ๋ฐ˜ํ™”๋˜์ง€ ์•Š๊ณ  ์Šฌ๋ผ์ด์Šค์—์„œ ๋น„ AbstractArray๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ์ƒ๋‹นํžˆ ์ด์ƒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด # 13612๋ฅผ ์‹œ๋„ํ•ด๋ณด๊ณ  ํŠน๋ณ„ํžˆ ๋ฒกํ„ฐ์˜ ์ผค๋ ˆ ์ „์น˜๋กœ ์ธํ•ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ ๋ฒกํ„ฐ ์ „์น˜ ์˜๋ฏธ๋ก ์—์„œ๋„ ๋˜‘๊ฐ™์ด ๋‚˜์˜๊ณ  Covector๋ฅผ ๋…ธ์ถœ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋ช‡ ๊ฐ€์ง€ ์žฅ์  :

  • Ax_mul_Bx ์— ๋Œ€ํ•œ ํŠน์ˆ˜ ๊ตฌ๋ฌธ ๋ถ„์„ ๋Œ€์‹  ์ง์ ‘ dispatch๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํฐ ์Šน๋ฆฌ์ž…๋‹ˆ๋‹ค. BLAS์˜ API๋กœ ๋งค์šฐ ์ž˜ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฐ€์žฅ ์•ˆ์ชฝ ์ˆ˜์ค€์—์„œ ํ™œ์šฉ์„ ์›ํ•˜๋ฏ€๋กœ์ด ์ •๋ณด๋ฅผ ์ธ์ˆ˜์™€ ํ•จ๊ป˜ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. BLAS ํ˜ธ์ถœ์˜ ๊ฒฝ์šฐ ๊ฐ„๋‹จํ•œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ „์น˜ ๋ฌธ์ž ( ntc )๋ฅผ ์กฐํšŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • v'v ๊ฐ€ ์Šค์นผ๋ผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฒกํ„ฐ์™€ ์ฝ” ๋ฒกํ„ฐ ๊ฐ„์˜ ๊ณฑ์…ˆ์€ ์ด์ œ ์—ฐ๊ด€์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ v'v*v ๋ฅผ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ‰๊ฐ€ํ•˜๊ณ  ํ–‰๋ ฌ ํ˜•์„ฑ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๋ ‡๊ฒŒํ•˜๋ฉด ๋ชจ๋“  ๋ฒกํ„ฐ๋ฅผ ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค ์ฐจ์›์ด์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•˜๋Š” Vector * Matrix๋ฅผ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค ์ฐจ์›์— ๋Œ€ํ•œ ์ง€์›์„ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜๋Š” ์ข‹์€ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

๊ธฐํƒ€ ์ฐธ๊ณ  ์‚ฌํ•ญ :

  • ๋ถ€์šธ ์œ ํ˜• ๋งค๊ฐœ ๋ณ€์ˆ˜๋กœ ํ‘œํ˜„๋˜๋Š” ์ „์น˜์˜ ๋ณต์žก์„ฑ์€ ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ์ข…์ข… ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ž˜๋ชป๋œ ์ˆœ์„œ๋กœ ์ •์˜ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๊ผˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ T ๋ฐ C ๋ฅผ) ์ œํ•œํ•˜๊ฑฐ๋‚˜ ์บก์ฒ˜ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ •์˜ํ•ด์•ผ ํ•  ์ž๋ฆฌ ํ‘œ์‹œ ์ž ์œ ํ˜• ๋ณ€์ˆ˜์˜ ์ˆ˜ ์ธก๋ฉด์—์„œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ๋” ๋‚˜์€์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ์ ์–ด๋„ AbstractArray{T} ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ StridedArray ์–ด๋ ค์›€์„ ์•…ํ™”์‹œํ‚ต๋‹ˆ๋‹ค. * ๋Œ€ํ•œ ๋ฉ”์†Œ๋“œ ํ…Œ์ด๋ธ”์„ ์ฝ๋Š” ๊ฒƒ์€ ::Union{DenseArray{T<:Union{Complex{Float32},Complex{Float64},Float32,Float64},2},MatrixTranspose{C,T<:Union{Complex{Float32},Complex{Float64},Float32,Float64},A<:Union{DenseArray{T,1},DenseArray{T,2},SubArray{T,1,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD},SubArray{T,2,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD}}},SubArray{T<:Union{Complex{Float32},Complex{Float64},Float32,Float64},2,A<:DenseArray{T,N},I<:Tuple{Vararg{Union{Colon,Int64,Range{Int64}}}},LD}} ์™€ ๊ฐ™์€ ์œ ํ˜•์—์„œ ์ƒ๋‹นํžˆ ์–ด๋ ค์šด ์ผ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก , ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ typealias๋กœ ์ž‘์„ฑํ–ˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋‹ค๋ฅธ ์œ ํ˜• ๋ณ„์นญ ์ด๋ฆ„์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์กฐ์ฐจ๋„ ๊ณ ํ†ต ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค ( StridedMatOrTrans , QRCompactWYQorTranspose ๋“ฑ).
  • ์ €๋Š” ์ด๊ฒƒ์„ SparseVector์™€ ํ†ตํ•ฉ ํ•  ๊ธฐํšŒ๊ฐ€ ์—†์—ˆ์ง€๋งŒ CSR ์—†์ด๋„ ํšจ์œจ์ ์œผ๋กœ ํŠธ๋žœ์Šค ํฌ์ฆˆ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํฐ ์Šน๋ฆฌ๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • Covector์—์„œ ์Šค์นผ๋ผ ๋ฐ / ๋˜๋Š” ๋น„ ์Šค์นผ๋ผ ์ธ๋ฑ์‹ฑ์„ ์ •์˜ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด r[:] ๋˜๋Š” r[1:end] ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋ฒกํ„ฐ ๋˜๋Š” ์ฝ” ๋ฒกํ„ฐ์ž…๋‹ˆ๊นŒ? ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ด๊ฒƒ์„ ์ •์˜ํ•˜์ง€ ์•Š๊ณ  ๋ฒ—์–ด๋‚˜๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํฅ๋ฏธ๋กญ๊ฒŒ๋„ Matlab์€ ๋‹ค๋ฅธ ๋ฒกํ„ฐ๋กœ ํ–‰ ๋ฒกํ„ฐ๋ฅผ ์ธ๋ฑ์‹ฑํ•˜๋Š” ๋ฐ ๋งค์šฐ ํŠน๋ณ„ํ•œ ๊ทœ์น™ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ด์ƒํ•œ ์ฝ”๋„ˆ ์ผ€์ด์Šค ( r((1:end)') ๋Š” r(1:end) ๋Š” r(:)' ํฌ์ƒํ•˜๋ฉด์„œ ํ–‰-๋‹ˆ์Šค๋ฅผ ์œ ์ง€ํ•˜๋ ค๊ณ  ๋งค์šฐ ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, ์—ฌ๊ธฐ์—์„œ ๋ณผ ์ˆ˜์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ด์ ์€ MatrixTranspose ์œ ํ˜• ์ž์ฒด์— ์ ์šฉ๋˜๋Š” ๊ฒƒ๊ณผ ๋˜‘๊ฐ™์ด ์ ์šฉ๋œ๋‹ค๋Š” ์ ์„ ์ง€์ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ํ˜ผํ•ฉ ๋ฒกํ„ฐ / ํ–‰๋ ฌ ์—ฐ์‚ฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒํ•˜๊ธฐ ์œ„ํ•ด ์ถ”์ƒ ๋Œ€์ˆ˜๋ฅผ ๋„ˆ๋ฌด ๊นŠ์ด ํƒ๊ตฌํ•˜์ง€ ์•Š๊ณ ๋„ Covector๊ฐ€ ์•„์ฃผ ์ž˜ ์ž‘๋™ ํ•  ์ˆ˜ ์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ๋ฉ‹์ง„ ๊ธฐ๋Šฅ (์„ ํ˜• ๋Œ€์ˆ˜์™€ ํ•จ๊ป˜ ๋ฒกํ„ฐ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ)์„ ์ถ”๊ฐ€ํ•˜์ง€๋งŒ ์ถ”๊ฐ€ ๋ณต์žก์„ฑ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ˜ธ๊ธฐ์‹ฌ์œผ๋กœ @mbauman์„ ๊ธฐ์–ต C ๋ฅผ ๋„์ž…ํ•˜๊ฒŒ ๋œ ๋™๊ธฐ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ทธ๋ƒฅ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

transpose(::Matrix) -> MatrixTranspose
transpose(::MatrixTranspose) -> Matrix

? ๋‚˜๋Š” ์—ฌ๊ธฐ์„œ ๋‹น์‹ ์˜ (์˜ˆ์™ธ์  ์ธ) ํŒ๋‹จ์„ ์˜์‹ฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋‹น์‹ ์ด ์ด๊ฒƒ์„ํ•˜๊ฒŒ ๋งŒ๋“  ๊นจ๋‹ฌ์Œ์ด ๋ฌด์—‡์ธ์ง€ ์ดํ•ดํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ์ˆœ์—ด์„ ์ธ์ฝ”๋”ฉํ•˜๋Š” ํŠœํ”Œ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PermutedDimensionArray ์œ ํ˜•์œผ๋กœ ์ผ๋ฐ˜ํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Covector ์œ ํ˜•์€ ๋ถ„๋ช…ํžˆ ๋‹ค๋ฅธ ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๋ณ„๋„์˜ ๊ฒƒ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ผค๋ ˆ ์ „์น˜ (๋ฐ (A').' ๋Œ€ํ•œ ๋น„์ „ ์น˜ ์ผค๋ ˆ ๋ฐฐ์—ด)๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ๋ถ„๋ช…ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ™œ์šฉ์„ ํ•˜๋‚˜์˜ MatrixTranspose ์œ ํ˜• ๋‚ด์—์„œ ๋ถ€์šธ ํ•„๋“œ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ƒ๊ฐํ•ด ๋ณด๋ฉด ์ด๊ฒƒ์ด ์™ธ๋ถ€ BLAS์™€์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ์œ„ํ•œ ์ตœ์ƒ์˜ ์˜ต์…˜์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋„ค์ดํ‹ฐ๋ธŒ JuliaBLAS์˜ ๊ด€์ ์—์„œ ๋ณด๋ฉด Julia / LLVM์ด T.isconjugate ? conj(T[i,j]) : T[i,j] ๋ฅผ ๋ฃจํ”„ ๋ฐ–์œผ๋กœ ๋Œ์–ด ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
  • ํ™œ์šฉ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€์žˆ๋Š” ์œ ํ˜•. ์ด๊ฒƒ์ด ์ œ๊ฐ€ ์„ ํƒํ•œ ๊ฒƒ์ด๊ณ , ์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ ํ˜„์žฌ Ac_mul_Bt ์™€ ์นœ๊ตฌ๋“ค์„ ํ†ตํ•ด conjugate-ness์— ๋Œ€ํ•ด pseudo-dispatch๋ฅผํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์— ์˜ํ–ฅ์„๋ฐ›์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ Julia๊ฐ€ ์ˆ˜ํ–‰ ํ•  ์ˆ˜์žˆ๋Š” ๋ถ„๊ธฐ ์ œ๊ฑฐ ์ตœ์ ํ™”์— ๋Œ€ํ•œ ๋” ๊ฐ•๋ ฅํ•œ ๋ณด์ฆ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์—ด์‹ฌํžˆ ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์Šค์ผ€์น˜ ๊ตฌํ˜„์„ ์‹œ์ž‘ํ•˜๊ณ  ์‹ถ์—ˆ๊ณ  Covector์— ๋Œ€ํ•ด ๋” ๊ฑฑ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋‘ ๊ฐ€์ง€ ์œ ํ˜•, MatrixTranspose ๋ฐ MatrixCTranspose . ์œ ํ˜• ๋งค๊ฐœ ๋ณ€์ˆ˜์— ๋Œ€ํ•ด ๋™ํ˜•์ด์ง€๋งŒ ๋‘ ๊ฐœ์˜ ๊ฐœ๋ณ„ ๋ž˜ํผ ์œ ํ˜•์ด ์งœ์ฆ๋‚˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ถ”์ƒ ์Šˆํผ ํƒ€์ž…๊ณผ ๊ณต์šฉ์ฒด ๋ณ„์นญ์ด ๋„์›€์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ์ด ์˜ต์…˜์— ๋Œ€ํ•ด ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์„ ํƒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด์ œ ์œ ํ˜•์ด ์ง€์ •๋œ ํ•จ์ˆ˜๊ฐ€์žˆ๋Š” ๋„ค ๋ฒˆ์งธ ์˜ต์…˜์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.์ด ์˜ต์…˜์€ ์ „์น˜ ์œ ํ˜• ๋‚ด์— ๋ณ€ํ™˜ ํ•จ์ˆ˜๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ํ•จ์ˆ˜๊ฐ€ ๋น ๋ฅด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์œ ํ˜• ๋งค๊ฐœ ๋ณ€์ˆ˜๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์‰ฝ๊ฒŒ ์ „๋‹ฌ๋˜์ง€ ์•Š๋Š” ์œ ํ˜• ๋งค๊ฐœ ๋ณ€์ˆ˜์ด๊ธฐ๋„ํ•ฉ๋‹ˆ๋‹ค.

conj ๋ฐ transpose ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ ConjugateView ๋ž˜ํผ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ConjugateView ๊ฐ€ MatrixTranspose ๋ž˜ํผ ์•ˆ์— ๋ฐฐ์น˜๋˜๋„๋กํ•ฉ๋‹ˆ๋‹ค. . ์ฆ‰, A a Matrix ,
A' = conj(transpose(A)) = transpose(conj(A)) ๋ชจ๋‘ MatrixTranspose{ConjugateView{Matrix}} (์ •๋ณด๊ฐ€์—†๋Š” ์œ ํ˜• ๋งค๊ฐœ ๋ณ€์ˆ˜ ์‚ญ์ œ).

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

์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ์•„์ง์ด ์ž‘์—…์„ํ•˜๊ณ ์žˆ์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค! ์ด๊ฒƒ์€ ์„œ์‚ฌ์‹œ ์Šค๋ ˆ๋“œ์ž…๋‹ˆ๋‹ค! ์„ธ ๋ฒˆ์˜ ํ™˜ํ˜ธ !!!

๊ต์ฐจ ๋งํฌ https://github.com/JuliaLang/julia/pull/6837#issuecomment -213123832

1.0 ์šฉ์œผ๋กœ ๊ณ„ํš๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ (# 18056, # 18136)์—์„œ์ด ๊ฑฐ๋Œ€ํ•œ ์Šค๋ ˆ๋“œ๋ฅผ ์ง€์ ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ Julia์—๋Š” ์ง„์ •ํ•œ 1 ์ฐจ์› ๋ฒกํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. _e.g._ mx[row,:] ๋Š” ๋” ์ด์ƒ 1xn ํ–‰๋ ฌ์ด ์•„๋‹™๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ํ™˜์˜๋ฐ›๋Š” ๋ณ€ํ™”์ž…๋‹ˆ๋‹ค!

๊ทธ๋Ÿฌ๋‚˜ ๋ถ€์ž‘์šฉ์œผ๋กœ ๊ธฐ์กด์˜ ์ผ๋ถ€ ๋ฌธ์ œ๊ฐ€ ๋” ๋ถ„๋ช…ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” v*mx ๊ฐ€ 1 ์ฐจ์› ๋ฒกํ„ฐ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์— ๋ฌผ์—ˆ์Šต๋‹ˆ๋‹ค.
์ˆ˜ํ•™์ ์œผ๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ž‘๋™ํ•˜๊ณ  1-d ๋ฒกํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
์ผ๋ฐ˜ a*b ์ œํ’ˆ์ด ๊ณ„์•ฝ์— ์˜ํ•ด ์ •์˜ ๋œ ๊ฒฝ์šฐ
์ฒซ ๋ฒˆ์งธ ์šฉ์–ด์˜ ๋งˆ์ง€๋ง‰ ์ƒ‰์ธ๊ณผ ๋‘ ๋ฒˆ์งธ ์šฉ์–ด์˜ ์ฒซ ๋ฒˆ์งธ ์ƒ‰์ธ.

ํ˜„์žฌ Vector-Matrix ์ œํ’ˆ์˜ ๋ฉ”์„œ๋“œ ์„œ๋ช…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
(*)(A::AbstractVector, B::AbstractMatrix) = reshape(A,length(A),1)*B
์ด ๋ฉ”์„œ๋“œ๋Š” v*mx ์•„๋‹Œ v*v' ์ผ€์ด์Šค์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
(์ด ์ ์„ ์ง€์  ํ•ด ์ฃผ์‹  @andreasnoack ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.)
๋ถ„๋ช…ํžˆ ํ•˜๋‚˜์˜ ๋ฐฉ๋ฒ•์„ ๋‘˜ ๋‹ค ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค.

Julia๋Š” Matlab๊ณผ ๊ฐ™์€ ๊ณ„์•ฝ์œผ๋กœ ์–ด๋ ค์›€์„ ๊ฒช๊ณ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ Matlab์—๋Š” 1 ์ฐจ์› ๋ฒกํ„ฐ๊ฐ€ ์—†์œผ๋ฉฐ 1xn ๋ฐ nx1 ํ–‰๋ ฌ ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค.
์ž์—ฐ์Šค๋Ÿฝ๊ณ  ๋งŽ์€ ๊ฒƒ๋“ค์ด ์—ฌ๊ธฐ์— ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Julia๋Š” ํฐ ์ด์ ์ด ๋  ์ง„์ •ํ•œ 1 ์ฐจ์› ๋ฒกํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์ •๋ง ์ผ๊ด€๋œ ์ž์ฒด ์ƒํƒœ์— ๋„๋‹ฌํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Fortran์€์ด ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์•ผ ํ•  ํ›จ์”ฌ ๋” ์ข‹๊ณ  ์ผ๊ด€๋œ ์˜ˆ์ž…๋‹ˆ๋‹ค.
transpose ์—ฐ์‚ฐ์€ Fortran์˜ ํ–‰๋ ฌ์— ๋Œ€ํ•ด์„œ๋งŒ ์ •์˜๋ฉ๋‹ˆ๋‹ค.
์ง„์ •ํ•œ 1 ์ฐจ์› ๋ฒกํ„ฐ์—์„œ 1xn ํ–‰๋ ฌ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋‹จ์ˆœํžˆ ์ „์น˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
matmul ์˜ ๊ฒฝ์šฐ # 18056์— ์ธ์šฉ ๋œ Metcalf ์ฑ… ๋ฐœ์ทŒ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

@alanedelman ์˜ ์›๋ž˜ ์š”์ ์ด ๋Œ€๋ถ€๋ถ„ ์ •ํ™•ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๊ธฐ์กด ๋ฌธ์ œ๋ฅผ ๊ฐ„๋‹จํžˆ ํ•ด๊ฒฐํ•  ์ˆ˜์žˆ๋Š” ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐ€๋Šฅํ•œ ํ•œ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์กด์ค‘ํ•˜๋ฉด์„œ :

  • v' ๊ทธ๋Œ€๋กœ 1 ์ฐจ์› ๋ฒกํ„ฐ v ์—์„œ 1xn ํ–‰๋ ฌ์„ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • rowmx ๋ฐ colmx ํ•จ์ˆ˜๊ฐ€ ๋” ์ข‹์„ ์ˆ˜ ์žˆ์ง€๋งŒ v' ๋Š” ๋„ˆ๋ฌด ๋„๋ฆฌ ํผ์ ธ์„œ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ์ง„์ •ํ•œ 1 ์ฐจ์› ๋ฒกํ„ฐ๋ฅผ ๋งŒ๋“ค๊ธฐ์œ„ํ•œ vec ํ•จ์ˆ˜๊ฐ€ ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • v' ์˜ ์—ญ์ด v'' ์•„๋‹ˆ๋ผ vec(v') ์ด์ง€๋งŒ ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ๊ณผ ํ•จ๊ป˜ ์‚ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  • a*b ์ œํ’ˆ์€ ํ•ญ์ƒ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ๊ณ„์•ฝ์„ ์ฒด๊ฒฐํ•œ๋‹ค a ๊ณผ์˜ ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค b
  • * ์—ฐ์‚ฐ์ž๋Š” ๋‚ด๋ถ€ ๋˜๋Š” ์™ธ๋ถ€ ์ œํ’ˆ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  • ๋‚ด๋ถ€ ์ œํ’ˆ์˜ ๊ฒฝ์šฐ ์ด๋ฏธ dot ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์™ธ๋ถ€ ์ œํ’ˆ์˜ ๊ฒฝ์šฐ * ์„ ์ œ๊ฑฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (_i.e._ v*v' ๊ตฌ๋ฌธ).
  • ์™ธ๋ถ€ ์ œํ’ˆ์˜ ๊ฒฝ์šฐ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • ํ•ด๋‹น ์ค‘์œ„ ์—ฐ์‚ฐ์ž๋Š” ๊ตฌ๋ฌธ์„ ๊ฐ€๋ณ๊ฒŒ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์™ธ๋ถ€ ์ œํ’ˆ์— ๋Œ€ํ•œ [๊ฐ„๊ฒฐํ•œ ์ˆ˜ํ•™์  ๊ตฌ๋ฌธ]์„ ์žƒ๋Š” ๊ฒƒ์€ ๋ถˆํ–‰ํ•œ ์ผ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ฐจ๋ผ๋ฆฌ vec * mat๋ฅผ ๊ฐœ์ธ์ ์œผ๋กœ ํฌ๊ธฐํ•˜๊ณ  ์‹ถ๋‹ค.

๊ธฐ์กด PernutedDimsArray๊ฐ€ ๋ถ€๋ชจ์™€ ๋ทฐ์˜ ์ฐจ์› ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋ฅผ ์ด๋ฏธ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ์•„๋งˆ๋„ ๋ฒกํ„ฐ ๋ถ€๋ชจ์— ๋Œ€ํ•ด์„œ๋„ ๋น„๊ณต ์•ก ์ „์น˜ ๋ž˜ํผ ์œ ํ˜•์œผ๋กœ ์ด๋ฏธ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์„ค๋ช…์„œ์—์„œ PermutedDimsArray๋ฅผ ์ฐพ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ๋ฐœ๋ช…ํ•˜๋Š” ๋Œ€์‹ 
์„ธ ๊ฐ€์ง€ ์œ ํ˜•์˜ ์–ด๋ ˆ์ด ์ œํ’ˆ ๋งŒ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๋‚ด๋ถ€ ์ œํ’ˆ์€ ์ด๋ฏธ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ผ๋ฐ˜ ์ œํ’ˆ๊ณผ ์™ธ๋ถ€ ์ œํ’ˆ ๋งŒ ๋ถ„๋ฆฌํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค.
์™ธ๋ถ€ ์ œํ’ˆ์€ ์†์‹ค๋˜์ง€ ์•Š๊ณ  ๊ตฌ๋ฌธ ๋งŒ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.
v*mx ์ผ€์ด์Šค๋Š” ๋” ๊นŠ์€ ๋ฌธ์ œ์˜ ์ฆ์ƒ์œผ๋กœ ๋งŒ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค.

"๋ˆ„๋ฝ ๋œ ๋ฉ”์„œ๋“œ ๋ฌธ์ œ"๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๊ฑฑ์ •ํ•  ์œ ํ˜•์ด ์•„๋‹ˆ๋ผ .' ๊ฐ€ ์ง€์—ฐ ๋ž˜ํผ ์œ ํ˜• (๋ฐ ' ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ์ด์˜ ์ ‘ํ•ฉ์ฒด ๋ฒ„์ „). ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋™์ผํ•œ * ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ vec*mat ๋ฐ vec*vec' ๋‘˜ ๋‹ค ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋…ผ๋ฌธ์—์„œ vec*mat ๋ฅผ ๋ณธ๋‹ค๋ฉด ๋‚˜์—๊ฒŒ๋Š” ํ‹€๋ฆฐ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ vec*vec' ๊ฝค ์ž์ฃผ ๋ด…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋” ์ƒ๊ฐํ•˜๋ฉด PermutedDimsArray๊ฐ€ ๋ฐฐ์—ด ๋ฐฐ์—ด์— ๋Œ€ํ•œ ์š”์†Œ๋ฅผ ์žฌ๊ท€ ์ ์œผ๋กœ ์ „์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฏ€๋กœ ์—ฌ๊ธฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ž˜ํผ ์œ ํ˜•์œผ๋กœ ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๋Œ€์•ˆ์€ ๋ฒกํ„ฐ ์ „์น˜๋ฅผ ์™„์ „ํžˆ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ €๋Š” ์—ฌ๊ธฐ์—์„œ ๋…ผ์˜๊ฐ€ ์ด๋ฏธ ์ง€๋‚˜์น˜๊ฒŒ ์ฒ ์ €ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ์˜ํ–ฅ์ด ์–ด๋–ป๊ฒŒ ๋‚˜ํƒ€๋‚ ์ง€ ํ‰๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋‚˜ ๋˜๋Š” ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์˜ ํฌ๊ด„์  ์ธ ๊ตฌํ˜„์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฑฐ์˜ ๋๋‚˜๊ฐ€๋Š” ๋™์•ˆ ํ† ๋ก  ํ•  ์ค€๋น„๊ฐ€๋˜์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

v*mx ์€ (๋Š”) ์ด์ƒํ•˜๊ฒŒ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฒฐ์ • ํ•™์  ์ฝ”๋“œ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ Fortran์˜ matmul ์—์„œ๋„ ์ž˜ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. (# 18056 ์ฐธ์กฐ)

u*v' ์ œํ’ˆ์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.
u ๋ฐ v ๊ฐ€ ๋ชจ๋‘ nx1 ํ–‰๋ ฌ ์ธ ๊ฒฝ์šฐ ์ด๊ฒƒ์€ ์ •๊ทœ ํ–‰๋ ฌ ๊ณฑ์ž…๋‹ˆ๋‹ค.
๊ทธ๊ฒƒ์€ ์™ธ๋ถ€ ์ œํ’ˆ๊ณผ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋งคํŠธ๋ฆญ์Šค ์ œํ’ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ์ œํ’ˆ์„ ๋ชจ๋ฐฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ๋ชจ๋“  ๊ฒƒ์ด ํ–‰๋ ฌ ์ธ Matlab์˜ ์„ธ๊ณ„์—์„œ ๋งค๋„ ๋Ÿฝ์Šต๋‹ˆ๋‹ค.

Julia์—๋Š” Fortran์˜ ์„ธ๊ณ„์— ๋” ๊ฐ€๊นŒ์šด ์ง„์ •ํ•œ 1 ์ฐจ์› ๋ฒกํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
Julia์—์„œ ์ „์น˜ ๋œ ๋ฒกํ„ฐ v' ๋Š” ์ด๋ฏธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
Fortran์˜ ์„ ํƒ์€ ์ด๋ฏธ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด Julia์—๊ฒŒ ์ œ์•ˆํ•œ ๊ฒƒ์ฒ˜๋Ÿผ์ด๋ฅผ ๊ธˆ์ง€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Fortran์—๋Š” ์™ธ๋ถ€ ์ œํ’ˆ์— ๋Œ€ํ•œ ๊ณ ์œ  ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค.
Julia๋Š” v' ๋ฅผ 1xn ํ–‰๋ ฌ๋กœ ์‰ฝ๊ฒŒ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
1d ๋ฒกํ„ฐ์™€ 1xn ํ–‰๋ ฌ์— ๋Œ€ํ•ด * ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
๋‹ค์ค‘ ํŒŒ๊ฒฌ์œผ๋กœ ์ธํ•ด์ด๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ * ๋Š” ๋” ์ด์ƒ ๋งคํŠธ๋ฆญ์Šค ์ œํ’ˆ์ด ์•„๋‹™๋‹ˆ๋‹ค.

Fortran๊ณผ Julia๊ฐ€ ๋น„์Šทํ•˜๊ฒŒ ํ–‰๋™ํ•˜๋Š” ์ง€์ 
๋‘˜ ๋‹ค ๋‚ด๋ถ€ ์ œํ’ˆ์— ๋Œ€ํ•ด ๋ณ„๋„์˜ dot ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
dot ์„ * ์—ฐ์‚ฐ์ž์—๋„ ๋ฌถ๋Š” ํ† ๋ก ์ด์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์šด ์ข‹๊ฒŒ๋„ ๊ทธ๋ ‡๊ฒŒ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์„ ํ˜• ๋Œ€์ˆ˜์˜ ์„ธ ๊ฐ€์ง€ ์ œํ’ˆ์„ ์ฒ˜๋ฆฌํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
์ผ๋ฐ˜ ๋งคํŠธ๋ฆญ์Šค ์ œํ’ˆ, ๋‚ด๋ถ€ ์ œํ’ˆ ๋ฐ ์™ธ๋ถ€ ์ œํ’ˆ.
ํ˜„์žฌ * ์—ฐ์‚ฐ์ž๋Š” ์ผ๋ฐ˜ ์ œํ’ˆ๊ณผ ์™ธ๋ถ€ ์ œํ’ˆ์— ๋Œ€ํ•œ ๊ฒฐํ•ฉ ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ์ œ์•ˆํ•œ ๊ฒƒ์€ ์ด๋“ค์„ ๋ถ„๋ฆฌํ•˜๊ณ ๋ณด๋‹ค ์ผ๊ด€๋œ ์ƒํƒœ์— ๋„๋‹ฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

(์˜ค, ์™ธ์ ์€ ์ƒ๋žตํ–ˆ์ง€๋งŒ ์ด๋ฏธ ์ž˜ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค)

๋‚ด์ , ์™ธ์ , ํ–‰๋ ฌ ๊ณฑ์…ˆ์ด ์ œํ’ˆ์„ ๋‚˜๋ˆ„๊ณ  ๋ถ„๋ฅ˜ํ•˜๋Š” ์ˆ˜ํ•™์ ์œผ๋กœ ๊ฑด์ „ํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์—ฌ๋Ÿฌ ์‚ฌ๋žŒ๋“ค์ด ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ๋‚ด์šฉ์˜ ๋ฐ˜๋ณต์ด์ง€๋งŒ,์ด ์ฃผ์ œ์˜ ๊ธธ์ด๋ฅผ ๊ณ ๋ คํ•  ๋•Œ ๋•Œ๋•Œ๋กœ ์š”์•ฝ์„ ํฌํ•จํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‚ด ๊ฐœ์ธ ์š”์•ฝ์ด๋ฉฐ ๋‚˜๋Š” ํ™•์‹คํžˆ ์ „๋ฌธ๊ฐ€๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋‚ด๊ฐ€ ํ‹€๋ฆฐ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•˜์‹ญ์‹œ์˜ค.

์ถ”์ƒ ์„ ํ˜• ๋Œ€์ˆ˜ ์„ค์ •์—์„œ ์ฃผ์š” ํ”Œ๋ ˆ์ด์–ด๋Š” ๋ฒกํ„ฐ v (๋ฒกํ„ฐ ๊ณต๊ฐ„ V ๊ฑฐ์ฃผ), ์„ ํ˜• ๋งต (ํ•˜๋‚˜์˜ ๋ฒกํ„ฐ ๊ณต๊ฐ„ V ๋ฐ ๋‹ค๋ฅธ ๊ณต๊ฐ„ W ) ๋ฐ ์ด๋Ÿฌํ•œ ๋งต์˜ ๊ตฌ์„ฑ, ์„ ํ˜• ํ˜•ํƒœ ๋˜๋Š” ์ฝ” ๋ฒกํ„ฐ (์ด์ค‘ ๊ณต๊ฐ„ V* ๊ฑฐ์ฃผํ•˜๊ณ  V ์—์„œ ์Šค์นผ๋ผ๋กœ ๋งคํ•‘), ๋‚ด๋ถ€ ์ œํ’ˆ ( V ร— V to scalars), ๋ฒกํ„ฐ ๊ฐ„์˜ ํ…์„œ ๊ณฑ (์˜ˆ : kron ). ์™ธ์  ๋‚˜๋Š” ๋ฒกํ„ฐ์™€ ์ฝ” ๋ฒกํ„ฐ ์‚ฌ์ด์˜ ํ…์„œ ๊ณฑ์œผ๋กœ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

๋‚ด์ ์ด ์ •์˜ ๋œ ๊ฒฝ์šฐ์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ๊ด€์‹ฌ ๋ฒกํ„ฐ์™€ ์„ ํ˜• ํ˜•ํƒœ์˜ ๋™ํ˜• ์ธ ์ฆ‰, ๋ชจ๋“ ๊ฐ€ f ๋งคํ•‘ ๋ฒกํ„ฐ v ์Šค์นผ๋ผ์—, ๊ฑฐ๊ธฐ์— ์กด์žฌํ•˜๋Š” w f(v) = dot(w,v) ์— ๋Œ€ํ•ด v . ๊ทธ๋Ÿฌ๋‚˜ ์ฝ” ๋ฒกํ„ฐ๋Š” ๋‚ด์  (์˜ˆ : ๋‹ค์ฐจ์› ํ•จ์ˆ˜์˜ ๊ธฐ์šธ๊ธฐ)์— ๋Œ€ํ•œ ์ฐธ์กฐ์—†์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ปดํ“จํ„ฐ์—์„œ ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๊ฐœ์ฒด๋ฅผ ํ‘œํ˜„ํ•˜๋ ค๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ๊ธฐ์ค€์„ ์„ ํƒํ•œ ๋‹ค์Œ ํ–‰๋ ฌ ๋Œ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์ด ๋Œ€๋ถ€๋ถ„์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํ›„ํ–‰ ๋‹จ์ผ ์ฐจ์› (๋ฒกํ„ฐ๋ฅผ nx1 ํ–‰๋ ฌ๋กœ, ์Šค์นผ๋ผ๋ฅผ 1x1 ํ–‰๋ ฌ๋กœ ๋“ฑ)์— ์œ ์—ฐํ•˜๊ฒŒ ์ ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ–‰๋ ฌ ๊ณฑ์…ˆ๊ณผ ์ „์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Matlab์ด ์ทจํ•œ ๊ฒƒ์ด๋ฉฐ, ํŠนํžˆ ์ˆ˜์น˜ ์„ ํ˜• ๋Œ€์ˆ˜์—์„œ ๋งŽ์€ ์ฑ…๊ณผ ๋…ผ๋ฌธ์ด ์ž‘์„ฑ๋˜๋Š” ๋ฐฉ์‹์ด์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ, ์•ž์„œ ์–ธ๊ธ‰ ํ•œ ๋ฒกํ„ฐ์—์„œ ์ฝ” ๋ฒกํ„ฐ๋กœ์˜ ๋™ํ˜• (์•”๋ฌต์ ์œผ๋กœ ์œ ํด๋ฆฌ๋“œ ๋‚ด์ ์„ ๊ฐ€์ • ํ•จ)์€ ๋ฒกํ„ฐ์˜ ํ–‰๋ ฌ ํ‘œํ˜„์˜ ์ „์น˜ (๋ณต์žกํ•œ ๊ฒฝ์šฐ ์—๋ฅด ๋ฏธํŠธ ๊ณต์•ก)๋ฅผ ์ทจํ•˜๋Š” ๊ฒƒ์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ถ”์ƒ์  ์ธ ์˜๋ฏธ์—์„œ ๋ฒกํ„ฐ์˜ ์ „์น˜ ๊ฐœ๋…์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— @GaborOszlanyi๊ฐ€ ์–ธ๊ธ‰ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ Fortran์—์„œ ์ •์˜๋˜์ง€ ์•Š์€ ๊ฒƒ

Julia ์ฝ”๋“œ์—์„œ ํ˜•์‹ ์•ˆ์ •์„ฑ์ด ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Matlab์˜ "์œ ์ผํ•œ ํ–‰๋ ฌ"(์œ ์—ฐํ•œ ํ›„ํ–‰ ๋‹จ์ผ ์ฐจ์› ์‚ฌ์šฉ) ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ ์™„์ „ํžˆ ์ถ”์ƒ์  ์ธ ์„ค์ •์œผ๋กœ ์ „ํ™˜ํ•˜๊ณ  ์ผ๋ฐ˜์ ์ธ ์„ค์ •์—์„œ ๊ณ„์† ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์„ ์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (Euclidean ๋‚ด๋ถ€ ์ œํ’ˆ, ๋ฒกํ„ฐ์—์„œ ์ฝ” ๋ฒกํ„ฐ๋กœ์˜ ์‚ฌ์†Œํ•œ ๋งคํ•‘ ๋“ฑ). ๊ฒฐ๊ตญ ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ASCII ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋ฅผ ์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— * , ' ๋ฐ .' ๊ธฐํ˜ธ์—์„œ ๊ฐ€๋Šฅํ•œ ํ•œ ๋งŽ์ด ์งœ ๋‚ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์šด ์ข‹๊ฒŒ๋„ ์—ฌ๊ธฐ์—์„œ ๋‹ค์ค‘ ๋””์ŠคํŒจ์น˜๊ฐ€ ํŽธ๋ฆฌํ•˜๊ณ  ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ๋‹ค์–‘ํ•œ ์ œ์•ˆ์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•œ ํ‘œ ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์ถ”์ƒ์  ์ธ ์„ ํ˜• ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์ด ํ•จ์ˆ˜๊ฐ€ ์•„๋‹Œ ํŠน์ • ์ค„๋ฆฌ์•„ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

@GaborOszlanyi์— ๋Œ€ํ•œ ๋งˆ์ง€๋ง‰ ๋ฉ”๋ชจ๋กœ์„œ, ๋‚˜๋Š” ์—ฌ์ „ํžˆ์ด ๋ชจ๋“  v*A ์— ๋Œ€ํ•œ ์žฅ์†Œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋ฒกํ„ฐ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ–‰ ํ–‰๋ ฌ๋กœ ํ‘œ์‹œ๋˜๋Š” ํ•„๋“œ์—์„œ ํ‘œ์ค€ ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐœ์ธ์ ์œผ๋กœ ์ด๊ฒƒ์€ ์ด์ƒํ•œ ์„ ํƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์„ ํ˜• ๋งต f ๋ฐ g ๊ฐ€ f(v) = v*A ๋ฐ g(v) = v*B ์„ํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋Š” g(f(v)) = (g โ—ฆ f)(v) = v*A*B ๋กœ ๊ตฌ์„ฑ ์ˆœ์„œ ์ดํ›„์— ํ™€์ˆ˜์ž„์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ตํ™˜๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์žˆ๋‹ค๋ฉด, ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋งํฌ ๋œ ํ…Œ์ด๋ธ”์˜ ๋‘ ๋ฒˆ์งธ์—์„œ ๋งˆ์ง€๋ง‰ ํ–‰๊ณผ ๊ฐ™์ด ๋ถˆ์™„์ „ํ•œ ๋‚ด๋ถ€ ๊ณฑ์œผ๋กœ ํ•ด์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ์š”์•ฝ์€ ๊นŠ๊ณ  ์„ค๋“๋ ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ž˜ ์„ค๋ช… ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‚จ์€ ์งˆ๋ฌธ์€ ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

  • ์ด ์ฒ ์ €ํ•œ ๋…ผ์˜์˜ ๊ฒฐ๊ณผ๋กœ Julia์—์„œ ์‹ค์ œ๋กœ ์–ด๋–ค ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚ ๊นŒ์š”?
  • Fortran์ด v*mx ์— matmul v*mx ์„ ๊ตฌํ˜„ ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ด ๋ฌธ์ œ๋กœ ์ธํ•ด ๋…ธ์ถœ๋˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

A. ์‘์šฉ ์ˆ˜ํ•™์ž๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐ€์ง€ ์ž์—ฐ์ ์ธ ๋™ ํ˜•์‚ฌ์ƒ์„ ์•”๋ฌต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์ •์šฉ ํ‘œ๊ธฐ๋ฒ•์— ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค.

  1. ๊ธธ์ด๊ฐ€ N ์ธ ๋ฒกํ„ฐ๋Š” Nx1 ํ–‰๋ ฌ์ด ๋ฒกํ„ฐ ๊ณต๊ฐ„์„ ํ˜•์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— Nx1 _ ์—ด ํ–‰๋ ฌ _๊ณผ ๊ตฌ๋ณ„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ( "์—ด", โ–ฏ)
  2. 1x1 ํ–‰๋ ฌ์€ ์Šค์นผ๋ผ์˜ ๋ชจ๋“  ๋Œ€์ˆ˜์  ์†์„ฑ์œผ๋กœ ์ •์˜ ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์Šค์นผ๋ผ ์ˆซ์ž์™€ ๊ตฌ๋ณ„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ( "์Šค์นผ๋ผ ํ™”", โ– )

๋ฌธ์ œ๋Š” ์ด๋Ÿฌํ•œ ๋™ํ˜•์ด Julia์˜ ์œ ํ˜•์œผ๋กœ ํ‘œํ˜„ํ•˜๊ธฐ์— ์ž์—ฐ์Šค๋Ÿฝ์ง€ ์•Š์œผ๋ฉฐ ๋‘˜ ๋‹ค ๋ฐฐ์—ด ๋ชจ์–‘์˜ ๋Ÿฐํƒ€์ž„ ๊ฒ€์‚ฌ๋ฅผ ํฌํ•จํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. MATLAB์˜ ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค ์ฐจ์› ๊ทœ์น™์€ ์ด๋Ÿฌํ•œ ๋‘ ๋™ํ˜•์˜ ๊ตฌํ˜„์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

B. 2 ์ฐจ์› ๋ฐฐ์—ด์€ ๋ฐฐ์—ด์˜ ๋ฐฐ์—ด๋กœ ์žฌ๊ท€ ์ ์œผ๋กœ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ–‰๋ ฌ์€ ์—ด์˜ ํ–‰ ๋˜๋Š” ํ–‰์˜ ์—ด์ด์ง€๋งŒ ํ–‰์˜ ํ–‰์ด๋‚˜ ์—ด์˜ ์—ด์€ ์•„๋‹™๋‹ˆ๋‹ค. ํ–‰๋ ฌ์„ ์žฌ๊ท€ ์ ์œผ๋กœ ์ •์˜ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์‚ฌ์‹ค์€ ํ–‰๋ ฌ๊ณผ n ์ฐจ์› ๋ฐฐ์—ด์˜ ๋‹ค๋ฅธ ํ…์„œ ๊ตฌ์กฐ๋ฅผ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค. ์ ์ ˆํ•˜๊ฒŒ ๋งํ•˜๋ฉด ๋‹ค์ฐจ์› ๋ฐฐ์—ด์€ ๋งค์šฐ ์ œํ•œ๋œ ์ข…๋ฅ˜์˜ ํ…์„œ์ด๋ฉฐ ํ›„์ž๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ „์ฒด ๊ธฐ๊ณ„๊ฐ€ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค. ์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ์ถ•์†Œ๋Š” ๋ฒกํ„ฐ ๊ณต๊ฐ„๊ณผ ์ด์ค‘ ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์Œ์— ๋Œ€ํ•œ ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด์ค‘ ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ๊ฐœ๋…์„ ์ ˆ๋Œ€ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š” ๋‹ค์ฐจ์› ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ์ถ•์†Œํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋งํ•˜๋Š” ๊ฒƒ์€ ์ž˜๋ชป๋œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ์ „์ฒด ๊ธฐ๊ณ„๋ฅผ ์›ํ•˜์ง€ _ ์•Š์Šต๋‹ˆ๋‹ค _. ์ด๋Š” ํ–‰ / ์—ด ํŠน์„ฑ์„ ๊ฐ€์ง„ ๊ณต / ๋ฐ˜ ๋ณ€์„ฑ ๋˜๋Š” ์—… / ๋‹ค์šด ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ๋ฐฐ์—ด์ด ๋ชจ๋“  ์ฐจ์›์—์„œ ์™„์ „ํžˆ ๋ฐ˜๋ณ€์ ์ธ ์ผ๋ฐ˜ ์ปจํ…Œ์ด๋„ˆ๊ฐ€๋˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. _2 ์ฐจ์›์„ ์ œ์™ธํ•˜๊ณ  _ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์ž๋Š” 2 ์ฐจ์› ๋ฐฐ์—ด์„ ํ–‰๋ ฌ์˜ ๋Œ€์ˆ˜ (ํ•˜ํ–ฅ ํ…์„œ)๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ๊ฒฐ์ฝ” ๋‹ค์šด-๋‹ค์šด, ์—…-์—… ๋˜๋Š” ์—…-๋‹ค์šด ํ…์„œ. ์ฆ‰, 2 ์ฐจ์› ๋ฐฐ์—ด์€ ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.


๋‚˜๋Š” ์—ฌ์ „ํžˆ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ์„ค๋“ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ˜„์žฌ 3 ๋ถ€๋กœ ๊ตฌ์„ฑ๋œ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

a) ๋ฒกํ„ฐ ์ „์น˜ ๊ธˆ์ง€, u'v , u*v' , u'*A*v ๋ฐ u'*A*v/u'v ์™€ ๊ฐ™์€ ๊ฐ€์ •๋ถ€ ์Šคํƒ€์ผ ํ‘œํ˜„์‹์„ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒกํ„ฐ๋ฅผ ์—ด ํ–‰๋ ฌ๋กœ ๋ช…์‹œ ์ ์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค u*v' u'*A*v/u'v . ์ด๋Ÿฌํ•œ ๋ชจ๋“  ํ‘œํ˜„์‹์€ matmul, ํ–‰๋ ฌ ์ „์น˜ ๋ฐ ํ–‰๋ ฌ ๋‚˜๋ˆ„๊ธฐ์˜ ์„ธ ๊ฐ€์ง€ ๊ธฐ๋ณธ ๋‹จํ•ญ ๋ฐ ์ดํ•ญ ์—ฐ์‚ฐ์ž๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ, u ๋ฐ v ๊ฐ€ ํŠธ๋ฃจ ๋ฒกํ„ฐ ์ธ ๊ฒฝ์šฐ u' ๋˜๋Š” u'*A ์™€ ๊ฐ™์€ ํ•˜์œ„ ํ‘œํ˜„์‹์— ํŠน๋ณ„ํ•œ TransposedVector ๋„์ž…ํ•˜์ง€ ์•Š๊ณ  ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

(a)์˜ ํ•œ๊ณ„๋Š” ๋ชจ๋“  ๊ฐ€์ •๋ถ€ ์Šคํƒ€์ผ ํ‘œํ˜„์‹์ด ์‹ค์ œ ์Šค์นผ๋ผ ๋Œ€์‹  1x1 ํ–‰๋ ฌ์„ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (์ด๋Š” ์—ฌ์ „ํžˆ 1- ๋ฒกํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” u'v ๋ณด๋‹ค ํฌ๊ฒŒ ํ–ฅ์ƒ๋จ). ๋”ฐ๋ผ์„œ (u'*v)*w ์™€ ๊ฐ™์€ ํ‘œํ˜„์‹

b) ๋ฒกํ„ฐ์— ๋Œ€ํ•œ ์œ ์‚ฌ ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ๋Œ€์ฒด ํ‘œ๊ธฐ๋ฒ•์„ ๋„์ž…ํ•˜์‹ญ์‹œ์˜ค.

  • ๋‚ด๋ถ€ (์ ) ์ œํ’ˆ์˜ ๊ฒฝ์šฐ u โ‹… v = scalarize(columnify(u)'*columnify(v))
  • ์™ธ๋ถ€ (Kronecker) ์ œํ’ˆ์˜ ๊ฒฝ์šฐ u โŠ— v = columnify(u)*columnify(v)'
  • A(u, v) = scalarize(columnify(u)'*A*columnify(v)) , ์Œ ์„ ํ˜• ํ˜•์‹์— ๋Œ€ํ•œ ์˜ค๋ž˜๋œ ํ‘œ๊ธฐ๋ฒ•
  • 2 ์ฐจ ํ˜•์‹์˜ ๊ฒฝ์šฐ A(u) = A(u, u)

(b)์˜ ์‹์€ ๋‚ด์  ๋ฐ ์Œ ์„ ํ˜• / 2 ์ฐจ ํ˜•์‹์— ๋Œ€ํ•œ ์‹์„ ์ž๋™์œผ๋กœ ์Šค์นผ๋ผ ํ™”ํ•˜์—ฌ 1x1 ํ–‰๋ ฌ์˜ ํ˜•์„ฑ์„ ํ”ผํ•จ์œผ๋กœ์จ (a)์˜ ์‹๊ณผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

c) 1x1 ํ–‰๋ ฌ์„ ํŠธ๋ฃจ ์Šค์นผ๋ผ๋กœ ๋ณ€ํ™˜ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

M = Array(Int, 1, 1, 1)
a::Int = M

์ž‘๋™ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์–ด๋ ˆ์ด ํฌ๊ธฐ์— ๋Œ€ํ•œ ๋Ÿฐํƒ€์ž„ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

function convert{T}(::Type{T}, A::Array{T,N})
    if length(A) == 1
        return A[1]
    else
        error()
    end
end

์ด ์ œ์•ˆ์€ ์•ฝ 2 ๋…„ ์ „์— Folkmar Bornemann์ด ์ œ์•ˆํ•œ ๊ฒƒ์„ ์•ฝ๊ฐ„ ์ˆ˜์ • ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์„ ๋•Œ, ๋Ÿฐํƒ€์ž„ ๊ฒ€์‚ฌ์˜ ๋น„์šฉ์€ ๊ทธ๋ฆฌ ํฌ์ง€ ์•Š์•˜๊ณ , ์ผ๋ฐ˜์ ์ธ ํ• ๋‹น์ด ์•„๋‹ˆ๋ผ ์œ ํ˜• ๊ฐ•์ œ ํ• ๋‹น (์‹ค์ œ๋กœ๋Š” convert ํ˜ธ์ถœ)์—์„œ๋งŒ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

@jiahao ,์ด ๊ฒŒ์‹œ๋ฌผ์˜ ๊ฐ€๋…์„ฑ์€ ๋ Œ๋”๋งํ•˜๊ธฐ ์–ด๋ ค์šด ๋ฌธ์ž์— ์˜ํ•ด ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๊ธ€๊ผด์— ์™„์ „ํžˆ ์œ ๋‹ˆ ์ฝ”๋“œ๊ฐ€์žˆ๋Š” OS X์—์„œ๋Š” ์ œ๋Œ€๋กœ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@jiahao , ๋‘ ๊ฐ€์ง€ ์‚ฌํ•ญ์— ๋„์ „ํ•˜๊ณ  ์‹ถ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„ / ๋ชจ๋‘ ๋™์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠน๋ณ„ํ•œ TransposedVector ์œ ํ˜•์„ ๋„์ž…ํ•˜์ง€ ์•Š๊ณ , ๋…ผ๋ฆฌ์  ๊ฒฐ๊ณผ๋กœ ๋‹ค์ฐจ์› ๋ฐฐ์—ด์ด ํ…์„œ ๊ตฌ์กฐ์˜ ์—… / ๋‹ค์šด ์ธ๋ฑ์Šค์— ๋Œ€ํ•ด ๊ฑฑ์ •ํ•ด์•ผํ•˜๋Š”๋ฐ, ์ด๋Š” ์ง€๋ถˆํ•˜๊ธฐ์— ๋„ˆ๋ฌด ๋†’์€ ๊ฐ€๊ฒฉ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ TransposedVector AbstractArray ๊ณ„์ธต ๊ตฌ์กฐ์˜ ํ•˜์œ„ ์œ ํ˜•์œผ๋กœ ๋งŒ๋“ค๊ณ ์žํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๋…ผ๋ฆฌ์  ๊ฒฐ๊ณผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค (์‹ค์ œ๋กœ LazyTranspose ์œ ํ˜•๊ณผ ๋‹ฌ๋ฆฌ AbstractMatrix ์˜ ๋˜ ๋‹ค๋ฅธ ์ข…๋ฅ˜์ž…๋‹ˆ๋‹ค).

์™ธ๋ถ€ (Kronecker) ์ œํ’ˆ์˜ ๊ฒฝ์šฐ u โŠ— v

๋ชฉํ‘œ๊ฐ€ ์•”์‹œ ์  ๋™ํ˜•์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  ๋ฒกํ„ฐ ์—ฐ์‚ฐ๊ณผ ๋” ์ถ”์ƒ์  ์ธ ์ œํ’ˆ์—์„œ ํ–‰๋ ฌ ์—ฐ์‚ฐ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ ์‹คํŒจํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (๋‹ค์Œ ์ˆ˜ํ•™์  ์ •์˜์— ๋Œ€ํ•œ ๋ณดํŽธ์  ์ธ ํ•ฉ์˜์— ๋Œ€ํ•ด ํ™•์‹  ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค).

  • Kronecker ์ œํ’ˆ A โŠ— B ๋Š” ๋ฒกํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ํ–‰๋ ฌ์— ์ •์˜ ๋œ ์—ฐ์‚ฐ์ž…๋‹ˆ๋‹ค.
  • ๋”ฐ๋ผ์„œ u โŠ— v ๋ฅผ ๋‘ ๋ฒกํ„ฐ์˜ ํ…์„œ ๊ณฑ์œผ๋กœ ์ฝ๋Š” ๋Œ€์‹  ์•„๋ž˜๋กœ ๋‹ค์šด ์œ ํ˜•์˜ 2 ์ฐจ์› ํ…์„œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ ์ ˆํ•œ 'ํ–‰๋ ฌ'์„ ์–ป๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ ๋ฒกํ„ฐ์˜ ํ…์„œ ๊ณฑ์„ ์ฝ” ๋ฒกํ„ฐ๋กœ ๊ฐ€์ ธ ์˜ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ๊ฐ์ฒด์˜ ๋„์ž…์„ ํ”ผํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ๊ด€๋ จ๋œ ๋‘ ๋ฒกํ„ฐ๋ฅผ ์—ดํ™”ํ•˜๊ธฐ ์ „์—์ด ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • u โŠ— v ์˜ ์„ธ ๋ฒˆ์งธ ์ด๋ฆ„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์—‰์„ฑํ•˜๊ฒŒ ์ •์˜ ๋œ ์™ธ๋ถ€ ์ œํ’ˆ์ด๋ฉฐ, ์œ„์•„๋ž˜๋กœ ํ—ˆ์šฉ๋˜๋Š” ์—„๊ฒฉํ•œ ์ •์˜๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ถœ์ฒ˜๋Š” ๋‘ ๋ฒกํ„ฐ์˜ ํ…์„œ ๊ณฑ๊ณผ ๋™์ผํ•˜๋ฏ€๋กœ ์ด์ „ ์ ์„ ์–ธ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  '์™ธ๋ถ€ ๊ณฑ'์ด ์•”์‹œ ์ ์œผ๋กœ ๋‘ ๋ฒˆ์งธ ๋ฒกํ„ฐ๋ฅผ ์ฝ” ๋ฒกํ„ฐ์— ๋งคํ•‘ํ•˜์—ฌ ๋‹ค์šด ์—… ํ…์„œ๋ฅผ ์–ป๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š” ์ •์˜๋ฅผ ์ˆ˜๋ฝํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋Œ€์‹  ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ๋ฐฐ์—ด์ด 2 ์ฐจ์›์„ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋“  ์ฐจ์›์—์„œ ์™„์ „ํžˆ ๋ฐ˜๋ณ€์ ์ธ ์ผ๋ฐ˜ ์˜ค๋ž˜๋œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€๋˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต ์˜ต์…˜์„ ๊ณ ๋ ค ํ–ˆ์Šต๋‹ˆ๊นŒ? ์„ ํ˜• ๋Œ€์ˆ˜ํ•™์„ ์‹œ์ž‘ํ•˜์—ฌ AbstractVector ๋ฐ AbstractMatrix ๋Œ€ํ•œ typealias๋ฅผ ์™„์ „ํžˆ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์Œ์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

abstract AbstractVector{T} <: AbstractArray{T,1}
abstract AbstractMatrix{T} <: AbstractArray{T,2}

# and we could introduce:
abstract AbstractCoVector{T} <: AbstractArray{T,1}

๋งŽ์€ ๋‚™์ง„์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜์ง€๋งŒ ๋‹ค์ฐจ์› ์ €์žฅ ๋ฐฐ์—ด๊ณผ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ๋ถ„๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์™„์ „ํ•œ ๋‹ค์ฐจ์› ํ…์„œ ๋Œ€์ˆ˜, ์ด์ค‘ ๋ฒกํ„ฐ ๊ณต๊ฐ„ ๋“ฑ์„ ๊ตฌํ˜„ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์›ํ•˜๋Š” ๋น„ํŠธ, ์ฆ‰ ๋ฒกํ„ฐ, ์ฝ” ๋ฒกํ„ฐ ๋ฐ ํ–‰๋ ฌ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ๋งŒํ•˜๋ฉด๋ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‚ด์ , ์™ธ์ , covector-matrix product, matrix-vector product ๋ฐ matrix-matrix product๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. Transpose๋Š” ์œ„์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์— ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์‹ค์ œ๋กœ 1D ๋ฐฐ์—ด์˜ 1D ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” AbstractMatrix ๊ตฌํ˜„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (๋ฌผ๋ก  ๊ธฐ๋ณธ ๊ตฌํ˜„์ด ์•„๋‹™๋‹ˆ๋‹ค). ๊ฐ€์ •์šฉ ํ‘œ๊ธฐ๋ฒ• (IMHO๋Š” MATLAB์˜ ์•ฝ์  ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค!)์„ ์‚ฌ์šฉํ•  ํ•„์š”๋Š” ์—†์ง€๋งŒ ์„ ํ˜• ๋Œ€์ˆ˜์˜ ๋ชจ๋“  ํŽธ๋ฆฌํ•จ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์ด ์•ฝ๊ฐ„ ๊ธด์žฅ๋˜์ง€๋งŒ, Julia๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ์˜ˆ๋ฅผ ๋“ค์–ด 1 ํ•™๋…„ ๋Œ€ํ•™ ์ˆ˜์ค€์˜ ์„ ํ˜• ๋Œ€์ˆ˜์—์„œ ๋ฐฐ์šด ๊ฒƒ์˜ "์˜ฌ๋ฐ”๋ฅธ"๋ชจ๋ธ์„ ๋ชจ๋ฐฉ ํ•  ์ˆ˜์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜๋ฉด Base.LinAlg ๋ฅผ "ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ"ํŒจํ‚ค์ง€๋กœ ์‰ฝ๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ํŒจํ‚ค์ง€๋Š” Julia์—๊ฒŒ ์žฅ๊ธฐ์ ์ธ ๋ชฉํ‘œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ƒˆ๋กœ์šด Buffer ๋ณ€๊ฒฝ ์‚ฌํ•ญ ๋ฐ Array ์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ์ƒˆ๋กœ์šด 1D ํฌ๊ธฐ ์กฐ์ • ๊ฐ€๋Šฅ ๋ชฉ๋ก๊ณผ ๊ฐ™์€ ๊ฒƒ์ด์žˆ์„ ๊ฒƒ์ด๋ผ๋Š” ์ƒ๊ฐ๊ณผ ์ž˜ ๋งž์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ์ด ์ผ๋ฐ˜์ ์ธ "๋ชฉ๋ก"์œ ํ˜• Julia์˜ ๋งŽ์€ ํ•ต์‹ฌ ๋ถ€๋ถ„์— ๋Œ€ํ•ด Vector ๋ฅผ ๋Œ€์ฒด ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Array ๋ฐ "list"๋ฅผ ์•„์ฃผ ์ผ์ฐ ์ •์˜ํ•˜๋Š” ๋™์•ˆ LinAlg ํŒจํ‚ค์ง€๋ฅผ ์•„์ฃผ ๋Šฆ๊ฒŒ๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ "๋‹จ์ˆœ"๋œ ๋งŽ์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ์œผ๋ฉฐ ์ ์ ˆํ•œ ์„ ํ˜• ๋Œ€์ˆ˜๊ฐ€ ์•„๋‹Œ ํฌํŠธ๋ž€ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. Julia๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋‹ค์ฐจ์› ๋ฐฐ์—ด ์œ„์—์„œ ์„ ํ˜• ๋Œ€์ˆ˜ ๊ตฌ์กฐ๋ฅผ ์žฌ๋ฐœ๊ฒฌ (๋˜๋Š” ๊ฐ•์ œ)ํ•˜์ง€ ์•Š๊ณ ๋„ ์ด๋Ÿฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ž‘์—… ๋ผ์ธ์—์„œ ํ…์„œ ๋ฐ ๊ณต / ๋ฐ˜ ๋ณ€์„ฑ ์ธ๋ฑ์Šค ๋“ฑ์„ Fortran ๋ฐฐ์—ด์— ๋งคํ•‘ํ•˜๋Š” ์ ์ ˆํ•œ ์„ ํ˜• ๋Œ€์ˆ˜๊ฐ€ ์•„๋งˆ๋„ ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค. ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‚ฌ๋žŒ๋“ค์„ ํ˜ผ๋™ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด "๋ฒกํ„ฐ"์™€ "ํ–‰๋ ฌ"๋ฐ "๋ฐฐ์—ด"์ด๋ผ๋Š” ์šฉ์–ด๋Š” ๊ทธ๋Œ€๋กœ๋‘๊ณ  ๋‚ฎ์€ ์ˆ˜์ค€์œผ๋กœ ์œ ์ง€ํ•˜๊ณ  ๋ชจ๋“  ๋†’์€ ์ˆ˜์ค€์— ๋Œ€ํ•ด ๋‹ค๋ฅธ (๋” ๋ฉ‹์ง„?) ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. . ๋” ๋†’์€ ์ˆ˜์ค€์€ ์ถ”์ƒ ์œ ํ˜• ๋˜๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜ํ™”๋ฅผ ํ†ตํ•ด ์ €์žฅ ์˜ต์…˜์„ ์ถ”์ƒํ™”ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ ‘๋‘์‚ฌ LA ๊ฐ€ ์ด๊ฒƒ์„ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค :

LA.Vector
LA.CoVector
LA.Tensor{... describing co/contravariance of indices ...}

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ์€ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ์ €์žฅ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋‚ฎ์€ ์ˆ˜์ค€์—์„œ ์กฐ์˜ฎ๊น€์€ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค (BLAS์—์„œ์™€ ๋™์ผ). ๋†’์€ ์ˆ˜์ค€์—์„œ๋Š” ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ๊นจ์ง€ ์•Š๊ณ  Matlab / Fortran / numpy ๋ณ€ํ™˜ ์ž์˜ ๊ธฐ๋Œ€๋ฅผ ๊นจ์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์„ ์ œ์™ธํ•˜๋ฉด @andyferris ์˜ ์ œ์•ˆ์— ๊ฐ€๊น์Šต๋‹ˆ๋‹ค.

@eschnett ์ด ์Šค๋ ˆ๋“œ์˜ ์•ž๋ถ€๋ถ„์—์„œ ๋‹ค์ค‘ ์„ ํ˜• ๋Œ€์ˆ˜ํ•™์ด ๊ธฐ๋ณธ Julia๊ฐ€ ์•„๋‹Œ ํŒจํ‚ค์ง€์— ๋‚จ๊ฒจ์งˆ ๊ฒƒ์ด๋ผ๊ณ  ๊ฒฐ์ •ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ์ œ์•ˆํ•œ ๊ฒƒ๊ณผ ๊ฐ™์€ ๋งŽ์€ ์•„์ด๋””์–ด๊ฐ€ ํŽธ์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” _TensorOperations.jl_ ํŒจํ‚ค์ง€์™€๋Š” ๋‹ค์†Œ ๋‹ค๋ฅธ ์œ ํ˜• ์‹œ์Šคํ…œ ๋‚ด์—์„œ ํ…์„œ, ๋ฒกํ„ฐ ๊ณต๊ฐ„, ๊ณต / ๋Œ€๋ณ€ ๋Ÿ‰ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ƒˆ๋กœ์šด ํŒจํ‚ค์ง€๋กœ ๊ตฌ์ฒดํ™” ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์„ ํ…์„œ์ฒ˜๋Ÿผ ๊ณฑํ•˜๊ธฐ ์œ„ํ•ด. ๊ฐœ๋ฐœํ•˜๊ธฐ๋Š” ์–ด๋ ต์ง€๋งŒ ์ž ์žฌ์ ์œผ๋กœ ๊ฐ€์น˜์žˆ๋Š” ์ถ”์ƒํ™”๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค!

Matrix ๋ฐ Vector ๋งŒ ๋‚จ๊ฒจ ๋‘๋Š” ๊ฒฝ์šฐ-ํ˜„์žฌ ์ •์˜๊ฐ€ ์™„๋ฒฝํ•˜๊ฑฐ๋‚˜ ํ‘œ์ค€ ์ˆ˜ํ•™์„ ์‚ฌ์šฉํ•˜์—ฌ ํ–‰๋ ฌ์„ ๊ณฑํ•˜๊ณ  ๋ฒกํ„ฐ๋ฅผ ์ „์น˜ํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด ๋” ๋‚˜์€ ์กฐ์น˜๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ‘œ๊ธฐ๋ฒ•. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ƒˆ๋กœ์šด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž‘์€ ํ•™์Šต ๊ณก์„ ์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ์‹œ์Šคํ…œ์ด ๋ถ„๋ช…ํ•˜๊ณ  ์œ ์ฐฝํ•˜๊ณ  ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ๋Š” _ ๊ฐœ์„  _๋œ๋‹ค๋ฉด ๋ฐฐ์šฐ๊ธฐ ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ ๋น„ ์œ ํด๋ฆฌ๋“œ ๋ณตํ•ฉ ๋ฒกํ„ฐ ๊ณต๊ฐ„ V ์—๋Š” V , conj(V) , dual(V) ๋ฐ conj(dual(V)) ๊ฐœ์˜ ์—ฐ๊ด€๋œ ๊ณต๊ฐ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ผ๋ฐ˜ ํ…์„œ์—๋Š” 4 ๊ฐ€์ง€ ์ข…๋ฅ˜์˜ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค (์ผ๋ฐ˜์ ์œผ๋กœ up ๋˜๋Š” down, barred ๋˜๋Š” not barred๋กœ ํ‘œ์‹œ๋จ). ๋ณต์žกํ•œ ์œ ํด๋ฆฌ๋“œ ๊ณต๊ฐ„ (์˜ˆ : ์–‘์ž ์—ญํ•™)์—์„œ dual(V) โ‰ก conj(V) ๋ฐ conj(dual(V)) = V . ์‹ค์ œ (๋น„ ์œ ํด๋ฆฌ๋“œ) ๊ณต๊ฐ„ (์˜ˆ : ์ผ๋ฐ˜ ์ƒ๋Œ€์„ฑ ์ด๋ก )์—์„œ V โ‰ก conj(V) . ํ›„์ž์˜ ๊ฒฝ์šฐ ๋ชจ๋‘ ์—… ๋ฐ ๋‹ค์šด ์ธ๋ฑ์Šค ๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

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

  • contract / inner product โˆ™ , ๋‹ค์Œ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜์—ฌ N ์ˆœ์œ„์˜ ์ž„์˜ ๋ฐฐ์—ด๋กœ ์ผ๋ฐ˜ํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค๋ฅผ ๋‘ ๋ฒˆ์งธ ์ธ๋ฑ์Šค (๋˜๋Š” numpy์˜ dot ๊ทœ์น™, ๋น„๋ก ๋œ ์ง๊ด€์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค), A ๋ฐ B ์— ์ˆœ์œ„๊ฐ€ M ๊ฒฝ์šฐ A A โˆ™ B ๋Š” ์ˆœ์œ„ ๋ฐฐ์—ด M+N-2 ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. M ๋ฐ ์ˆœ์œ„ N .
  • tensor product โŠ— : A โŠ— B ๋Š” ์ˆœ์œ„ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. N+M

๋ฒกํ„ฐ v , w ๋ฐ ํ–‰๋ ฌ A , B ๋กœ ํŠน์ˆ˜ํ™”๋˜์–ด ๋‹ค์Œ์„ ๋ชจ๋‘ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฒกํ„ฐ ๋‚ด์  v โˆ™ w -> ์˜ˆ์™ธ์ ์œผ๋กœ ์ˆœ์œ„ 0 ๋ฐฐ์—ด ๋Œ€์‹  ์Šค์นผ๋ผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํ–‰๋ ฌ ๋ฒกํ„ฐ ๊ณฑ์…ˆ A โˆ™ v
  • ํ–‰๋ ฌ ํ–‰๋ ฌ ๊ณฑ์…ˆ A โˆ™ B
  • ํ…์„œ / ์™ธ๋ถ€ ์ œํ’ˆ v โŠ— w
  • ์ฝ” ๋ฒกํ„ฐ (=== ๋ฒกํ„ฐ) ํ–‰๋ ฌ ๊ณฑ์…ˆ v โˆ™ A

ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ * ์— ๋Œ€ํ•ด โˆ™ , ํ•จ์ •์€์˜ ์œ„์˜ ์ •์˜์ด๋‹ค โˆ™ ์—ฐ๊ด€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค : (A โˆ™ v) โˆ™ w โ‰  A โˆ™ (v โˆ™ w) ํ›„์ž ์‹ฌ์ง€์–ด ์•Š์„ ๊ฒƒ ์ •์˜๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ๋ณต์žกํ•œ ๋ฐฐ์—ด์„ ๋ฌด์‹œํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค.

ํ…์„œ์˜ ์™„์ „ํžˆ ์ผ๋ฐ˜์ ์ธ ๊ตฌํ˜„์— ๊ด€ํ•ด์„œ๋Š” ์Šคํƒ ํ• ๋‹น ํŠœํ”Œ, ์ƒ์„ฑ ๋œ ํ•จ์ˆ˜ ๋ฐ ์˜ค๋Š˜๋‚  ๋” ์‹คํ˜„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค ๋‹ค๋ฅธ ๋ชจ๋“  ์ข‹์€ ๊ธฐ๋Šฅ์ด ์žˆ๊ธฐ ์ „์— ์˜ค๋ž˜ ์ „์— ์ด๊ฒƒ์„ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค (๊ทธ๋ฆฌ๊ณ  ํฌ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค).

ํฅ๋ฏธ๋กœ์šด ์ ‘๊ทผ ๋ฐฉ์‹, @Jutho. ์ถฉ๋ถ„ํžˆ ์ง๊ด€์  ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ €๋Š” * ๋ฐ ' ๋กœ ๋ฌด์—‡์„ํ•˜๋Š”์ง€์— ๊ด€๊ณ„์—†์ด ์ด๋Ÿฌํ•œ ์ •์˜๊ฐ€ ์ถ”๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  _ ์ถ”์ธกํ•ฉ๋‹ˆ๋‹ค _. ๊ทธ๋ฆฌ๊ณ  ์ €๋Š”์ด๋ฅผ ์ง€์›ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ๋ณต์žกํ•œ ๋ฐฐ์—ด์„ ๋ฌด์‹œํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋งŒ ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค.

์ˆ˜๋™์œผ๋กœ ์‚ฝ์ž… ๋œ conj() ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Julia๊ฐ€ ๋ณต์žกํ•œ ํ–‰๋ ฌ์„ ๋ฌด์‹œํ•˜๊ณ  ์‹ถ์–ดํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

์œ ํ˜• ๋ณ„์นญ์ด ์•„๋‹Œ ํŠน์ˆ˜ ํ•˜์œ„ ์œ ํ˜•์œผ๋กœ AbstractMatrix ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ๋” ์•Œ์•„ ์ฐจ ๋ ธ์Šต๋‹ˆ๋‹ค.

matrix[:,i] -> AbstractVector{T}
matrix[i,:] -> AbstractCoVector{T}
array_2d[:,i] -> AbstractArray{T,1}
array_2d[i,:] -> AbstractArray{T,1}

์ด๊ฒƒ์€ ๋งค์šฐ ๋ฉ‹์ง‘๋‹ˆ๋‹ค. ํ–‰๋ ฌ์„ ์ธ๋ฑ์‹ฑํ•˜์—ฌ ์—ด๊ณผ ํ–‰ ๋ฒกํ„ฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 2D ์Šคํ† ๋ฆฌ์ง€ ์ปจํ…Œ์ด๋„ˆ ์ธ ๊ฒฝ์šฐ 1D ์Šคํ† ๋ฆฌ์ง€ ์–ด๋ ˆ์ด๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ๋‹ค๋ฃจ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  AbstractVector{T} <: AbstractArray{T,1} ๋ฐ AbstractCoVector{T} <: AbstractArray{T,1} ์ด๋ฏ€๋กœ APL ์Šฌ๋ผ์ด์‹ฑ ๊ทœ์น™์„ ์‚ฌ์šฉํ•˜๋Š” AbstractArray ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—ฌ์ „ํžˆ ์ค€์ˆ˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ "ํฅ๋ฏธ๋กœ์šด"์‚ฌ์‹ค์€

array_3d[:,:,i] -> AbstractArray{T,2}
matrix(array_3d[:,:,i]) ->`AbstractMatrix {T}

๋”ฐ๋ผ์„œ ๊ฒฐ๊ณผ๋กœ ํ–‰๋ ฌ ๊ณฑ์…ˆ์„ ์ˆ˜ํ–‰ํ•˜๋ ค๋ฉด ์ˆ˜๋™์œผ๋กœ ํ–‰๋ ฌ๋กœ ๋ž˜ํ•‘ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒŒ ํ”Œ๋Ÿฌ์Šค์ธ์ง€ ๋งˆ์ด๋„ˆ์Šค์ธ์ง€ ๋ชจ๋ฅด๊ฒ ์–ด์š”? ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ํ•˜๋‚˜์˜ ์ž ์žฌ์  ์ธ ๋ณต์žก์„ฑ์œผ๋กœ ๋ณด์ด๋ฉฐ ์ €์žฅ์†Œ์™€ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก

์ด๊ฒƒ์€ ์–ด๋ฆฌ์„์€ ์งˆ๋ฌธ ์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, @jutho ๋Š” ์ฝ”๋“œ ์ž‘์„ฑ์ด ASCII์— ์˜ํ•ด ์ œํ•œ

์šฐ๋ฆฌ๋Š” ์œ ๋‹ˆ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ํ‚ค๋ณด๋“œ์˜ ํฌ๊ธฐ๋Š” ์ง€๋‚œ 40 ๋…„ ๋™์•ˆ ๋น„์Šทํ•œ ์š”์ธ์œผ๋กœ ์ปค์ง€์ง€ ์•Š์•˜๊ณ , ํ‰๋ฒ”ํ•œ ์‚ฌ๋žŒ์ด ๊ฐ€์ง€๊ณ ์žˆ๋Š” ์†๊ฐ€๋ฝ์˜ ์ˆ˜๋„ (์ง€๋‚œ 1 ๋งŒ๋…„ ์ด์ƒ) ์•„์‰ฝ๊ฒŒ๋„ ์„ฑ์žฅํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

IMHO, ASCII๋Š” ์‰ฌ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋น ๋ฅธ ์ˆ˜ํ•™ ๊ธฐํ˜ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„์œ„ํ•œ ํŠน์ˆ˜ ์ˆ˜ํ•™ ํ‚ค๋ณด๋“œ๋Š” ์‹ค์ œ๋กœ ์ข‹์€ ์ƒ๊ฐ์ž…๋‹ˆ๋‹ค! UTF์™€ ํ•จ๊ป˜ ์ œ๊ณต๋˜๋Š” ๋” ๋งŽ์€ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ข‹์€ ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒƒ์„ ASCII์—์„œ ์ถ”์ถœํ•˜๋ ค๋Š” ๋…ธ๋ ฅ์˜ ๊ณ ํ†ต์„ ์ •๋‹นํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@ esd100 :์ด GitHub ๋ฌธ์ œ๋ฅผ ๋งค์šฐ ํˆฌ๊ธฐ์ ์ธ ํ† ๋ก ์— ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

ํŠธ์œ— ๋‹ด์•„ ๊ฐ€๊ธฐ "ํˆฌ๊ธฐ ์ "์ด ๋ฌด์Šจ ๋œป์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์‚ฌ์šฉํ•˜๋ ค๋Š” ๋‹จ์–ด๊ฐ€ ํ™•์‹คํ•ฉ๋‹ˆ๊นŒ? ์–ธ์–ด, ์—ฐ์‚ฐ์ž ๋ฐ ๊ธฐ๋Šฅ์ด ์‚ฌ์šฉ ๋œ ๊ธฐํ˜ธ์— ๋ฌถ์—ฌ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์— ASCII ๋Œ€ ๋‹ค๋ฅธ ๊ฒƒ์˜ ์‚ฌ์šฉ์ด ํ† ๋ก ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์–ด๋–ค ์‹ ์œผ๋กœ๋“  ์ „๋ฌธ๊ฐ€๋Š” ์•„๋‹ˆ์ง€๋งŒ ํ•ด๊ฒฐ๋˜๋Š” ๊ธฐ๋Šฅ๊ณผ ๊ด€๋ จํ•˜์—ฌ ๋…ผ์˜ํ•˜๊ฑฐ๋‚˜ ์ ์–ด๋„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ฐํžˆ๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์–ธ์–ด๋ฅผ ์ •์˜ ํ•  ์ˆ˜์—†๋Š” ์ด์œ ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ (๊ธฐ๋ณธ ๋ชฉํ‘œ : ์‚ฌ์šฉ ์šฉ์ด์„ฑ, ์†๋„)? ํŠน๋ณ„ํ•œ ๊ธฐํ˜ธ / ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ธ์–ด๊ฐ€ ๋” ํ’๋ถ€ํ•˜๊ณ  ์•„๋ฆ„๋‹ต ์ง€ ์•Š์„๊นŒ์š”?

@ esd100 ์˜ˆ๋ฅผ ๋“ค์–ด @Jutho ์˜ ๊ฐ€์žฅ ์ตœ๊ทผ ๋Œ“๊ธ€ (์œ ๋‹ˆ ์ฝ”๋“œ ๊ธฐํ˜ธ 2 ๊ฐœ ์‚ฌ์šฉ)์ด ํ˜ธํ‰์„ ๋ฐ›์•˜์œผ๋ฉฐ @yuyichao ๋Š” ์œ ๋‹ˆ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ์œ ๋‹ˆ ์ฝ”๋“œ ์ „์šฉ ์—ฐ์‚ฐ์ž๋ฅผ ๋„์ž…ํ•˜๊ธฐ์œ„ํ•œ ๋‹ค๋ฅธ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค (์˜ˆ : ํ•จ์ˆ˜๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” compose ๊ธฐํ˜ธ, # 17184). ์‚ฌ๋žŒ๋“ค์ด ๊ท€ํ•˜์—๊ฒŒ ๋™์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค (์‹ค์ œ์ ์ธ ๊ณ ๋ ค ์‚ฌํ•ญ์ด ์žˆ์Œ์„ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•จ). _ ํŠน์ • _ ์ฃผ์ œ์— ๋Œ€ํ•œ ์ œ์•ˆ์ด์žˆ๋Š” ๊ฒฝ์šฐ ์•Œ๋ ค ์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ด ํ† ๋ก ์—์„œ ๋ฐœ์ƒํ•œ v0.5 ์ƒˆ๋กœ์šด ๋™์ž‘์— ๋Œ€ํ•ด ์•ฝ๊ฐ„ ํ˜ผ๋ž€ ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

julia> [ x for x in 1:4 ]' # this is fine
1ร—4 Array{Int64,2}:
 1  2  3  4

julia> [ Symbol(x) for x in 1:4 ]' # bit this isn't? What is special about symbols?
WARNING: the no-op `transpose` fallback is deprecated, and no more specific
`transpose` method for Symbol exists. Consider `permutedims(x, [2, 1])` or writing
a specific `transpose(x::Symbol)` method if appropriate.

๋ชฉ๋ก ์ดํ•ด์—์„œ (์ˆซ์ž๊ฐ€ ์•„๋‹Œ) ํ–‰ ๋ฒกํ„ฐ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์–ด๋–ป๊ฒŒํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ํ–‰ ๋ฒกํ„ฐ ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค. (๋ณ„๋„์˜ ๋ฌธ์ œ๋กœ ๋” ์ข‹์„๊นŒ์š”, ์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋…ผ์˜ํ• ๊นŒ์š”? ์–ด๋””์— ๊ฒŒ์‹œํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค ...)

๋ชจ์–‘ ๋ณ€๊ฒฝ : reshape(v, 1, length(v)) ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์› ์ค‘๋‹จ ๊ฒฝ๊ณ ์—๋„ ์–ธ๊ธ‰๋˜์–ด์•ผํ• ๊นŒ์š”? ์ด ์•„์ด๋””์–ด๋Š” ์ „์น˜๊ฐ€ ์ˆ˜ํ•™์  ์—ฐ์‚ฐ์ด๋ฏ€๋กœ ์ˆ˜ํ•™์  ๋ฒกํ„ฐ / ํ–‰๋ ฌ์— ๋Œ€ํ•ด์„œ๋งŒ ์ •์˜๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

depwarn : permutedims(x, [2, 1]) ์–ธ๊ธ‰๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

permutedims ๋Š” ๋ฒกํ„ฐ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ํ˜ธ๋ณด๊ธฐ : # 18320

์ด ์•„์ด๋””์–ด๋Š” ์ „์น˜๊ฐ€ ์ˆ˜ํ•™์  ์—ฐ์‚ฐ์ด๋ฏ€๋กœ ์ˆ˜ํ•™์  ๋ฒกํ„ฐ / ํ–‰๋ ฌ์— ๋Œ€ํ•ด์„œ๋งŒ ์ •์˜๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ† ๋ก ํ• ๊นŒ์š”? ์ •๋ง ์ข‹์€ ์ •๋‹น์„ฑ์ด ์—†๋‹ค๋ฉด ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฐฐ์—ด์—์„œ ์ž‘์—…ํ•˜๊ธฐ ์œ„ํ•ด ์ „์น˜ํ•˜๋Š” ๊ฒƒ์„ ์ •๋ง๋กœ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์ด ์•„์ด๋””์–ด๋Š” ์ „์น˜๊ฐ€ ์ˆ˜ํ•™์  ์—ฐ์‚ฐ์ด๋ฏ€๋กœ ์ˆ˜ํ•™์  ๋ฒกํ„ฐ / ํ–‰๋ ฌ์— ๋Œ€ํ•ด์„œ๋งŒ ์ •์˜๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ† ๋ก ํ• ๊นŒ์š”? ์ •๋ง ์ข‹์€ ์ •๋‹น์„ฑ์ด ์—†๋‹ค๋ฉด ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฐฐ์—ด์—์„œ ์ž‘์—…ํ•˜๊ธฐ ์œ„ํ•ด ์ „์น˜ํ•˜๋Š” ๊ฒƒ์„ ์ •๋ง๋กœ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ์›ํ•˜๋Š” ๊ฒƒ์„ ๋งŒ์กฑ์‹œํ‚ค๋Š” ๊ฒƒ์€ ๋น„๊ต์  ๋ณต์žกํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜ํ•™์  ์˜๋ฏธ์—์„œ ์ „์น˜๋Š” ์ข…์ข… ๋ฒกํ„ฐ ๊ณต๊ฐ„๊ณผ ๋ฒกํ„ฐ ๋˜๋Š” ํ–‰๋ ฌ์˜ ์ด์ค‘ ๊ณต๊ฐ„์„ ๊ต์ฒดํ•˜์—ฌ ์ •์˜๋ฉ๋‹ˆ๋‹ค (์ „์น˜ ๋Œ€ ์ผค๋ ˆ ์ „์น˜์—๋„ ์•ฝ๊ฐ„์˜ ๋ณต์žก์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค). ์ •๊ทœ ์ˆซ์ž์˜ ํ–‰๋ ฌ M ์˜ ๊ฒฝ์šฐ, ์šฐ๋ฆฌ๋Š” permutedims(M, (2,1)) ๋กœ ์ „์น˜ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ถ€๋ถ„ ํ–‰๋ ฌ์˜ ๊ด€์ ์—์„œ "๋ธ”๋ก"ํ–‰๋ ฌ์„ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

M = [A B;
     C D]

์—ฌ๊ธฐ์„œ A ๋“ฑ์€ ํ–‰๋ ฌ ์ž์ฒด์ž…๋‹ˆ๋‹ค. ๋‚ด ์ดํ•ด๋Š” Julia๊ฐ€

M' = [A' C';
      B' D']

์ด๊ฒƒ์€ ํŽœ๊ณผ ์ข…์ด๋กœ ๋œ ์ˆ˜ํ•™์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•  ๊ฒƒ์ด๋ฏ€๋กœ "๋ฐ”๋žŒ์งํ•œ ๊ตฌ๋ฌธ"์ž…๋‹ˆ๋‹ค.

์ฆ‰, ํ–‰๋ ฌ์˜ ์š”์†Œ๋Š” ' ๋ฐ .' ํ•ฉ๋‹ˆ๋‹ค. ์ˆซ์ž์˜ ๊ฒฝ์šฐ ์ด๋“ค์€ ๊ฐ๊ฐ ๋ณตํ•ฉ ํ™œ์šฉ ๋ฐ ๋ฌด ์ž‘์—…์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. IMHO ์ €๋Š” ์ด๊ฒƒ์ด ํŽธ๋ฆฌํ•จ์˜ ๋ง์žฅ๋‚œ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ์ž‘๋™ํ•˜๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ _simple_ ๊ทœ์น™์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค ( "transpose is recursive"- BlockMatrix ํด๋ž˜์Šค ๋“ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Œ). ํ•˜์ง€๋งŒ์ด ๋ง์žฅ๋‚œ์€ 0.5์—์„œ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ์œ ํ˜•์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.๋ณ„๋กœ ๋ง์ด๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. Symbol ์˜ ์กฐ์˜ฎ๊น€์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ˆซ์ž๊ฐ€ ์•„๋‹ˆ๋ผ _data_๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ permutedims ์€ ๊ทธ ์˜๋ฏธ์™€ ๋™์ž‘์ด ์™„๋ฒฝํ•˜๊ฒŒ ์ž˜ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„์žฌ ๊ท€์ ์ž…๋‹ˆ๋‹ค. .' ์™€ ๊ฐ™์€ ์ˆ˜ํ•™์  ๋ง์žฅ๋‚œ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž…๋ ฅํ•˜๋Š” ๋ฌธ์ž ๋ช‡ ๊ฐœ๋ฅผ ์ ˆ์•ฝ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ (์ˆ˜ํ•™์ด๋‚˜ MATLAB์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ์‚ฌ๋žŒ)์ด ์‚ฌ์šฉ์ค‘์ธ ๊ฒฝ์šฐ ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๊ฒƒ์ด _lot_ ๋” ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. reshape ๋ฐ permutedims . _ ๋‚˜์—๊ฒŒ ์ด๊ฒƒ์ด ๊ฐ€์žฅ _

IMHO์ด ๋งค์šฐ ๊ธด ๋ฌธ์ œ๋Š” ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ์œ„ํ•ด ์ˆ˜ํ•™์ ์œผ๋กœ ์ผ๊ด€๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์— ๊ด€ํ•œ ๊ฒƒ์ด๋ฉฐ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด์— ๋Œ€ํ•œ ์ˆ˜ํ•™์  ๋ง์žฅ๋‚œ์ด ์ ๋‹ค๋Š” ๊ฒƒ์€ ๋‹น์—ฐํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์‚ฌ๋ ค ๊นŠ์€ ๋‹ต๋ณ€์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ ์ƒ๋‹นํžˆ ๋™์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค

ํ•˜์ง€๋งŒ์ด ๋ง์žฅ๋‚œ์€ 0.5์—์„œ ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ์œ ํ˜•์—์„œ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.๋ณ„๋กœ ๋ง์ด๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ธฐํ˜ธ์˜ ์ „์น˜๊ฐ€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

Symbol ์˜ ์ „์น˜๋ฅผ no-op์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์‹ค์ˆ˜๋กœ ์ „์น˜๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋œ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” "๋ง์žฅ๋‚œ"์ด ํŽธ๋ฆฌํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์ง€๋งŒ, "์ ์ ˆํ•œ"์ผ์€ ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ์— ๋Œ€ํ•ด์„œ๋งŒ ์ •์˜ํ•˜๊ณ  transpose(A::Matrix{Complex}) conj ์˜ ์ผ๋ถ€๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ ์‹คํ–‰.

.' ์™€ ๊ฐ™์€ ์ˆ˜ํ•™์  ๋ง์žฅ๋‚œ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ž…๋ ฅํ•˜๋Š” ๋ฌธ์ž ๋ช‡ ๊ฐœ๋ฅผ ์ ˆ์•ฝ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์‚ฌ๋žŒ (์ˆ˜ํ•™์ด๋‚˜ MATLAB์— ์ต์ˆ™ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ)์ด ์‚ฌ์šฉ์ค‘์ธ ๊ฒฝ์šฐ ์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ํ•„์š”์— ๋”ฐ๋ผ ๋ชจ์–‘์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์ˆœ์—ดํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฒŒ๋Š” ์ด๊ฒƒ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค.

๋ณธ์ธ์€ .' ์ด ์‹ ์ค‘ํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜์–ด์•ผํ•˜๋ฉฐ transpose ๋Œ€ํ•œ๋ณด๋‹ค ๋ช…ํ™•ํ•œ ํ˜ธ์ถœ์ด ์ข…์ข… ๋” ๋‚ซ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. reshape ๋ฐ permutedims ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ์ฝ๊ณ  ์ฝ”๋”ฉํ•˜๋Š” ๋ฐ ์‚ฌ์†Œํ•œ ์–‘์˜์ธ์ง€ ์˜ค๋ฒ„ ํ—ค๋“œ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์‹ฑํ•˜๋Š” ๊ฒƒ์ด ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค.

transpose([ f(x) for x = 1:length(A) ])
reshape([ f(x) for x = 1:length(A) ], 1, length(A))

์ด์™€ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ์—๋„ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜๋ ค๋ฉด ์ค„์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ๋๊นŒ์ง€ ( reshape ๋ฅผ ์ฝ์Œ) ๋๊นŒ์ง€ ํŠ•๊ฒจ ์•ผํ•ฉ๋‹ˆ๋‹ค ( length(A) ๋ฅผ ์ฝ์Œ). (๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฒ˜์Œ์— length(A) ์ด (๊ฐ€)์žˆ๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์ค‘๊ฐ„์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

๋‚˜์—๊ฒŒ ๋” ํฐ ๋ฌธ์ œ๋Š” ๋‚ด๊ฐ€ ์ƒˆ๋กœ์šด Julia (์ด์ „์— numpy์™€ MATLAB์„ ์‚ฌ์šฉํ–ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์Œ)์ด๊ณ  ์ด๊ฒƒ์ด ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

[ x for x = 1:10 ]'

๋‚˜๋Š” ๋‹น์—ฐํžˆ ๋ฌธ์ž์—ด, ๊ธฐํ˜ธ ๋“ฑ์˜ ๋ฐฐ์—ด์— ๋Œ€ํ•ด์„œ๋„ ๊ฐ™์€ ๊ฒƒ์ด ์ž‘๋™ํ•œ๋‹ค๊ณ  ๊ฐ€์ • ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. .' ์˜ ์˜๋ฏธ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ๊ธด ์˜จ๋ผ์ธ ํ† ๋ก ์„ ์ฝ์ง€๋Š” ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ช‡ ๊ฐ€์ง€๋ฅผ ์‹œ๋„ํ•˜๊ณ  ๊ณผ๊ฑฐ์˜ ๊ฒฝํ—˜์œผ๋กœ ์ผ๋ฐ˜ํ™” / ์ถ”๋ก  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋” ๋‚˜์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ์—ฌ๊ธฐ์— ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ „๋ฐ˜์ ์œผ๋กœ Symbol ๋ฐ ๊ธฐํƒ€ ๋น„ ์ˆซ์ž ์ž…๋ ฅ์— ๋Œ€ํ•œ no-op ์กฐ์˜ฎ๊น€์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์—ฌ๊ธฐ์„œ ์ œ์•ˆ ๋œ ๋ฉ‹์ง„ ์ˆ˜ํ•™์  ํ”„๋ ˆ์ž„ ์›Œํฌ (๊ฐ€์น˜์žˆ๋Š” ๋ชฉํ‘œ!)๋ฅผ ๋ฐฉํ•ดํ•˜๋Š” ๋ฐฉ์‹์„ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋…ธ์˜ต์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๋ฌดํ•ดํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋…ธ์˜ต์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์€ ๋ฌดํ•ดํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฒƒ์ด Any ์˜ ํ•˜์œ„ ์œ ํ˜•์ด๊ธฐ ๋•Œ๋ฌธ์— Any ๋Œ€ํ•ด ์˜๋ฏธ์žˆ๋Š” ์–ด๋–ค ๊ฒƒ๋„ ์ •์˜ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. transpose(x)=x ์ •์˜๋Š” ๋ชจ๋“  ์ข…๋ฅ˜์˜ ํ–‰๋ ฌ์— ๋Œ€ํ•ด ๋ช…๋ฐฑํžˆ ์ž˜๋ชป๋˜์—ˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ์ •์˜ ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•˜๋Š” ์ผ๋ถ€ ์กฐ์šฉํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์™„์ „ํžˆ ๋น„ ์ˆ˜ํ•™์  ์ž‘์—…์— ๋Œ€ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ์ด์ƒํ•œ ๊ตฌ๋ฌธ ' ๋ฅผ ํ—ˆ์šฉํ•˜๊ณ  ์ž๋™ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ํŽธ์˜์„ฑ ์‚ฌ์ด์˜ ์ ˆ์ถฉ์ ์ž…๋‹ˆ๋‹ค.

๊ธฐํ˜ธ์˜ ์กฐ์˜ฎ๊น€์„ no-op์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์‹ค์ˆ˜๋กœ ์กฐ์˜ฎ๊น€์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋œ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” "๋ง์žฅ๋‚œ"์ด ํŽธ๋ฆฌํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์ง€๋งŒ, "์ ์ ˆํ•œ"์ผ์€ ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ์— ๋Œ€ํ•ด์„œ๋งŒ ์ •์˜ํ•˜๊ณ  transpose(A::Matrix{Complex}) conj ์˜ ์ผ๋ถ€๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์˜ ์‹คํ–‰.

๋‚˜๋Š” ์™„์ „ํžˆ ๋™์˜ํ•˜์ง€ ์•Š์ง€๋งŒ BlockMatrix ๊ฐ™์€ ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ Matrix{M<:Matrix} ๋Œ€ํ•ด ์ •์˜ ๋œ ํŠน์ˆ˜ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ ธ์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‘˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ธ๊ธฐ์žˆ๋Š” ์•„์ด๋””์–ด์ธ์ง€ ์•„๋‹Œ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. (์ด๊ฒƒ์€ ์ด๋Ÿฌํ•œ ๊ด€๋ จ ๋ฌธ์ œ ์ค‘ ์ผ๋ถ€๋ฅผ ๋‹จ์ˆœํ™” ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒ”๋กœ์šฐ ํ•œ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์‹ฌ๊ฐํ•œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค).

ํŒŒ์‹ฑํ•˜๋Š” ๊ฒƒ์ด ๋” ๋น ๋ฆ…๋‹ˆ๋‹ค.

transpose([ f(x) for x = 1:length(A) ])
reshape([ f(x) for x = 1:length(A) ], 1, length(A))

๋‘ ๋ฒˆ์งธ๋Š”, ๋‚˜๋Š” ๋ฒกํ„ฐ์˜ ์ค„๋ฆฌ์•„์˜ ํ˜„์žฌ ์ „์œ„์ฒ˜๋Ÿผ / ๊ด€๋ จ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— (๋ถ„๋ช…ํžˆ _i ๊ฑธ๋ฆด ๋ฒกํ„ฐ transposes_ ๋„ˆ๋ฌด _seriously_ :)) ๋‚ด๊ฐ€ ์ž์„ธํ•˜๊ฒŒ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค ๋‘ ๋ฒˆ์งธํ•ด์•ผ ํ•  ์ผ์„ํ–ˆ์„ ๊ฒฝ์šฐ rowvec = reshape(colvec, (1, n)) , ๋˜๋Š” ์•„๋งˆ [f(x) for _ = 1:1, x = 1:n] ๋Š” ์ดํ•ด๋ ฅ์ด ์˜ฌ๋ฐ”๋ฅธ ๋ชจ์–‘์„ ๋งŒ๋“ค๋„๋ก ๊ฐ•์ œํ•˜๊ฑฐ๋‚˜ .' ๋ฅผ ์ •๋ง๋กœ ์ข‹์•„ํ•œ๋‹ค๋ฉด map(f, (1:n).') ์™€ f.((1:n).') ํ˜„์žฌ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์™„์ „ํžˆ ๋น„ ์ˆ˜ํ•™์  ์—ฐ์‚ฐ์— ๋Œ€ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ์ด์ƒํ•œ ๊ตฌ๋ฌธ์„ ํ—ˆ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ์ž๋™ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๋Š” ํŽธ์˜์„ฑ ์‚ฌ์ด์˜ ์ ˆ์ถฉ์ ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์นจ๋ฌต์˜ ์˜ค๋ฅ˜ ๋ฐ ๊ธฐํƒ€ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚จ๋‹ค๋ฉด ์•„๋งˆ๋„์ด ๋…ผ์Ÿ์„ ์žƒ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. (์™œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋‚˜๋Š” ๋‹น์‹ ์„ ๋ฏฟ์Šต๋‹ˆ๋‹ค.) ๋ฐ˜๋ฉด์— ....

์ผ์ข…์˜ BlockMatrix๋ฅผ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ Matrix {M <: Matrix}์— ๋Œ€ํ•ด ์ •์˜ ๋œ ํŠน์ˆ˜ ๋ฉ”์„œ๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ‹€๋ ธ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋‘ ๋ฒˆ์งธ ์ž‘์—…์„ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ, ์ด๋Š” ๋‚˜์—๊ฒŒ ํ•ฉ๋ฆฌ์ ์ธ ์„ ํƒ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋‚ด ์›”๊ธ‰์„ ๋„˜์–ด ์„œ๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

[f (x) for _ = 1 : 1, x = 1 : n]

๋‚˜๋Š” ์ด๊ฒƒ์„ ์žŠ์—ˆ๋‹ค! ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๋‚ด๊ฐ€ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ „๋ฐ˜์ ์œผ๋กœ, ๋‚˜๋Š” ์—ฌ์ „ํžˆ ์ฝ์„ ์ˆ˜์žˆ๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•œ ๋‹น์‹ ์˜ ์ทจํ–ฅ์— ๋™์˜ํ•˜์ง€ ์•Š์ง€๋งŒ, ๊ฐ๊ฐ ์ž์‹ ์˜ ์ทจํ–ฅ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค! ยฏ\_(ใƒ„)_/ยฏ

๋ถ„๋ช…ํžˆ ๋ฒกํ„ฐ ์ „์น˜๋ฅผ ๋„ˆ๋ฌด ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ž…๋‹ˆ๋‹ค

์˜ˆ. ๋‚˜๋„ ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ•ด. ๐Ÿ˜‰

์ด๊ฒƒ์€ (https://github.com/JuliaLang/julia/issues/16790) ๋˜ํ•œ transpose ๋Œ€์‹  reshape ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚˜์—๊ฒŒ ์•ฝ๊ฐ„ ๋” ๋ง›์žˆ๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ‹€๋ ธ์„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋‘ ๋ฒˆ์งธ ์ž‘์—… ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉด๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (ํŽธ์ง‘ : Matrix{M<:Matrix} ๋Œ€ํ•ด ์ •์˜ ๋œ ํŠน์ˆ˜ ์กฐ์˜ฎ๊น€ ๋ฉ”์„œ๋“œ ํฌํ•จ). ์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ ํ•ฉ๋ฆฌ์ ์ธ ์˜ต์…˜์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ์ด์ œ ์šฐ๋ฆฌ๋Š” ๋‹ค์‹œ ๋ฐ์ดํ„ฐ์™€ ์„ ํ˜• ๋Œ€์ˆ˜ ์‚ฌ์ด์˜ ๊ตฌ๋ถ„์œผ๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. ์„ ํ˜• ๋Œ€์ˆ˜ ๋ธ”๋ก ํ–‰๋ ฌ์—๋Š” ์žฌ๊ท€ ์ „์น˜๊ฐ€ ์žˆ์ง€๋งŒ 2D ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด์˜ ์ผ๋ฐ˜ 2D ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด์—๋Š” ์žฌ๊ท€ ์ „์น˜๊ฐ€ ์—†๊ธฐ๋ฅผ ์› ํ•˜์ง€๋งŒ Matrix{T} ๋ฐ Array{T,2} ์€ (๋Š”) ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ.

์ด๊ฒƒ์€ (# 16790) ๋˜ํ•œ ๋‚˜์—๊ฒŒ ์•ฝ๊ฐ„ ๋” ์ž…๋ง›์— ๋งž๊ฒŒ ์กฐ์˜ฎ๊น€ ๋Œ€์‹ ์— ๋ชจ์–‘ ๋ณ€๊ฒฝ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋งŒ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ง„์‹ค!!

์„ ํ˜• ๋Œ€์ˆ˜ ๋ธ”๋ก ํ–‰๋ ฌ์—๋Š” ์žฌ๊ท€ ์ „์น˜๊ฐ€ ์žˆ์ง€๋งŒ 2D ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด์˜ ์ผ๋ฐ˜ 2D ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด์—๋Š” ์žฌ๊ท€ ์ „์น˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฑด ๋‚ด๊ฐ€ ๋‹น์—ฐํžˆ ์›ํ•˜๋Š” ๊ฒƒ ๊ฐ™์ง€ ์•Š์€๋ฐ ... ์™œ ์ด๋ ‡๊ฒŒ ์„œ๋กœ ๋‹ค๋ฅธ ์ข…๋ฅ˜์˜ ์ „์น˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๊นŒ? ์„ ํ˜• ๋Œ€์ˆ˜ ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด ์‚ฌ์ด์— ๋งค์šฐ ์—„๊ฒฉํ•œ ๊ตฌ๋ถ„์ด ์žˆ๋‹ค๋Š” ๋ฉ”๋ชจ๋ฅผ ๋†“์นœ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด ์ „์ฒด ์Šค๋ ˆ๋“œ๋ฅผ ์ฝ๋Š” ๊ฒƒ์€ ๋ฒ…์ฐฌ ์ž‘์—…์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์ถ”๊ฐ€๋กœ ์„ค๋ช…ํ•˜๊ธฐ ์ „์— ๊ทธ๋ ‡๊ฒŒํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์•Œ์ง€ ๋ชปํ•˜๋Š” ์†Œ์Œ์„ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์„ ํ˜• ๋Œ€์ˆ˜ ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ ๊ฐ์ฒด ์‚ฌ์ด์— ๋งค์šฐ ์—„๊ฒฉํ•œ ๊ตฌ๋ถ„์ด ์žˆ๋‹ค๋Š” ๋ฉ”๋ชจ๋ฅผ ๋†“์นœ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Linear Algebra ๊ฐœ์ฒด์™€ Data ๊ฐœ์ฒด ๊ฐ„์—๋Š” ์—„๊ฒฉํ•œ ๊ตฌ๋ถ„์ด ์—†์Šต๋‹ˆ๋‹ค.
ํ˜„์žฌ ๊ตฌํ˜„๋„ ์•„๋‹ˆ๊ณ  ์ด์ƒ์ ์ธ ์‚ฌ์šฉ๋„ ์•„๋‹™๋‹ˆ๋‹ค.

์žˆ๋Š” ๊ฒฝ์šฐ ํฌ๊ธฐ ( push! ) ๋˜๋Š” Linear Algebra ๊ฐœ์ฒด์˜ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์€ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ (์ด๋Ÿฌํ•œ ์‚ฌ์šฉ์ž๋Š” StaticArrays.jl ๋“ฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค) broadcast ๋งŒ ์„ ํ˜• ๋Œ€์ˆ˜ ๊ฐ์ฒด์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.
๋ฐ์ดํ„ฐ ๊ฐ์ฒด๋Š” ์ˆ˜์ • ๋ฐ ํ™•์žฅ ๊ฐ€๋Šฅํ•˜๋ฉฐ map , (๋ฐ reduce ๋ฐ filter )๋ฅผ ์ง€์›ํ•˜์ง€๋งŒ broadcast ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ ๋Š” ์‚ฌ๋žŒ๋“ค์ด ๋ฐ์ดํ„ฐ ๊ฐ์ฒด์™€ ์„ ํ˜• ๋Œ€์ˆ˜ ๊ฐ์ฒด์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ƒ๊ฐํ•˜๋Š” ์„ธ์ƒ์— ์‚ด์ง€
๋”ฐ๋ผ์„œ ์ด๋ฒˆ 2.5 ๋…„, 340 ๊ฐœ์˜ ๋Œ“๊ธ€ ์Šค๋ ˆ๋“œ.


no-op ์ „์น˜์ž…๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” Scalar ๋ฐ Nonscalar ์ถ”์ƒ ์œ ํ˜•์„ ๋งค์šฐ ๋†’์€ ์œ ํ˜• ๊ณ„์ธต ๊ตฌ์กฐ์— ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Scalars ๋ชจ๋‘ no-op ์กฐ์˜ฎ๊น€์œผ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.
Nonscalars ์ด ์—†์ง€๋งŒ ์ง€๊ธˆ์€ ์ง€์› ์ค‘๋‹จ ๊ฒฝ๊ณ ๋กœ ๋Œ€์ฒดํ•ฉ๋‹ˆ๋‹ค.

์ˆซ์ž, ๋ฌธ์ž, ๋ฌธ์ž์—ด, ์‹ฌ์ง€์–ด ํŠœํ”Œ๋„ Scalar ์ด๊ณ  no-op transpose๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ถ€ ์Šค์นผ๋ผ, ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณต์†Œ์ˆ˜๋Š”์ด ์ „์น˜ ์ •์˜๋ฅผ ๋ฎ์–ด ์”๋‹ˆ๋‹ค.

๋ฐฐ์—ด (ํ–‰๋ ฌ, ๋ฒกํ„ฐ ๋ฐ ๊ธฐํƒ€)์€ Nonscalar ํ•˜์œ„ ์œ ํ˜•์ด๋ฉฐ ์žฌ๊ท€ ์ „์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ ์ข‹์•„ํ•˜๋Š”์ง€ ์•„๋‹Œ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ตœ๊ทผ ๋งŽ์€ ๊ฒŒ์‹œ๋ฌผ์ด # 18320 # 13171 # 13157 # 8974์˜ _matrix transpose_ ๋ฐ "scalar"์œ ํ˜•์— ๋Œ€ํ•œ ํ† ๋ก ์„ ๋‹ค์‹œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

transpose(x)=x no-op ํด ๋ฐฑ์ด ๋ฌดํ•ดํ•˜๋‹ค๋Š” ๊ฐœ๋…์„ ์ •๋ง๋กœ ์—†์• ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ œ ์ƒ๊ฐ์—, ํด๋ฐฑ์€ ์ตœ์ ํ™” ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ณด๋‹ค ๋” ๋Š๋ฆฌ๊ฒŒ ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. fallback ๋ฉ”์†Œ๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์ž˜๋ชป๋œ ๋‹ต์„ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” fallback์ด ์˜ฌ๋ฐ”๋ฅธ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. transpose(x) ๋Š” x ์œ ํ˜•์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

no-op ์ „์น˜ ํด๋ฐฑ์€ ํ–‰๋ ฌ์˜ ํ–‰๋ ฌ์— ๋Œ€ํ•ด ์ž˜๋ชป ๋ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ AbstractMatrix ํ•˜์œ„ ์œ ํ˜•์ด ์•„๋‹Œ ๋ชจ๋“  ํ–‰๋ ฌ ์œ ์‚ฌ ๊ฐ์ฒด์— ๋Œ€ํ•ด ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค (# 987์— ์˜ํ•ด ๋ช…์‹œ ์ ์œผ๋กœ ์ €์žฅ๋œ ํ•ญ๋ชฉ์ด ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. _not_ ํ–‰๋ ฌ์˜ ๋Œ€์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ). ๋‹ค์Œ์€ ํ•˜๋‚˜์˜ ํฌ์Šคํ„ฐ ์ž์‹ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค (๋งŽ์€ ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค).

julia> A = rand(5,5); F = qrfact(A); R = F[:R]; Q = F[:Q] #Q is an example of a matrix-like object
5x5 Base.LinAlg.QRCompactWYQ{Float64,Array{Float64,2}}:
 -0.518817    0.0315127   0.749223    0.410014  -0.0197446
 -0.613422   -0.16763    -0.609716    0.33472   -0.3344   
 -0.0675866   0.686142    0.0724006  -0.302066  -0.654336 
 -0.582362   -0.0570904   0.010695   -0.735632   0.341065 
 -0.104062    0.704881   -0.248103    0.295724   0.585923 

julia> norm(A - Q*R) #Check an identity of the QR factorization
8.576118402884728e-16

julia> norm(Q'A - R) #Q'A is actually an Ac_mul_B in disguise
8.516860792899701e-16

julia> Base.ctranspose(Q::Base.LinAlg.QRCompactWYQ)=Q; #Reintroduce no-op fallback

julia> norm(ctranspose(Q)*A - R) #silently wrong 
4.554067975428161

์ด ์˜ˆ์ œ๋Š” ๋ฌด์–ธ๊ฐ€๊ฐ€ Any ์˜ ํ•˜์œ„ ์œ ํ˜•์ด๋ผ๊ณ ํ•ด์„œ ๊ทธ๊ฒƒ์ด ์Šค์นผ๋ผ๋ผ๊ณ  ๊ฐ€์ • ํ•  ์ˆ˜ ์žˆ๊ณ  no-op ์ „์น˜๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ OP์˜ ์ƒ์œ„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐํ•˜๊ธฐ ์–ด๋ ค์šด ์ด์œ ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ํ–‰๋ ฌ๊ณผ ๊ฐ™์€ ๋น„ ๋ฐฐ์—ด ๊ฐ์ฒด Q์˜ ๊ฒฝ์šฐ Q' ๋Š” ๋ฐฐ์—ด ์—ฐ์‚ฐ์œผ๋กœ์„œ ์‹ค์ œ ์˜๋ฏธ๊ฐ€ ์—†์ง€๋งŒ ๋ช…ํ™•ํ•œ ๋Œ€์ˆ˜์  ์˜๋ฏธ๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. Q'A ์™€ ๊ฐ™์€ ํ‘œํ˜„์‹์€ ์™„๋ฒฝํ•˜๊ฒŒ ์ž˜ ์ •์˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ํ˜• ๋Œ€์ˆ˜๊ฐ€ ์•„๋‹Œ ๋ฐฐ์—ด๋กœ ์ž‘์—…ํ•˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์€ ๋‹จ์ˆœํžˆ ๋น„์žฌ ๊ท€์  ์ˆœ์—ด์„ ์›ํ•˜๊ณ  ํ–‰๋ ฌ๊ณผ ๊ฐ™์€ ๋น„ ๋ฐฐ์—ด์€ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ชจ๋“  ์œ ํ˜•์— ๋Œ€ํ•ด ๋Œ€์ˆ˜ ๋ฐ ์ถ• ๊ตํ™˜ ์˜๋ฏธ๋ก  ๋ชจ๋‘์— ๋Œ€ํ•ด ์ผ๊ด€๋œ ์ฒ ์ž๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค๋Š” ์‚ฌ์‹ค์ด ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋งˆ๋„ ๋‚˜๋Š” ๋ฐ€๋„๊ฐ€ ๋†’์ง€๋งŒ ๋น„๊ต๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

julia> A = rand(5,5); F = qrfact(A); R = F[:R]; Q = F[:Q]
julia> Base.ctranspose(Q::Any) = Q;
WARNING: Method definition ctranspose(Any) in module Base at operators.jl:300 overwritten in module Main at REPL[6]:1.
julia> norm(ctranspose(Q)*A - R) # still works fine
4.369698239720409e-16

์ด๋Ÿฐ ์‹์œผ๋กœ transpose ๋ฅผ ๋ฎ์–ด ์“ฐ๋ฉด transpose([ :x _=1:4 ]) -์ฆ‰ ๋‚ด๊ฐ€ ๊ฒŒ์‹œ ํ•œ ๋‚ด์šฉ์ด ํ—ˆ์šฉ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์— ๋Œ€ํ•ด transpose / ctranspose ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š” ํ•œ (์˜ˆ : QRCompactWYQ ) ํด ๋ฐฑ์ด ํ˜ธ์ถœ๋˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค).

์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑํ•œ ctranspose ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค ( @which ). ๋ณธ์งˆ์ ์œผ๋กœ ctranspose(full(Q)) ์ˆ˜ํ–‰ํ•˜๋Š” Julia v0.5 (v0.4์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š์Œ)์—์„œ ๋‹ค๋ฅธ ๋Œ€์ฒด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋‹ค๋ฅธ ํด๋ฐฑ์€ ๋งž์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€์ด ๋ฉ‹์ง„ Q- ํƒ€์ž…์„ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๋ฐ”๋กœ ๊ทธ ์ด์œ ๋ฅผ ๋ฌด๋„ˆ ๋œจ๋ฆฝ๋‹ˆ๋‹ค (๊ทธ๋ž˜์•ผ ๊ณฑ์…ˆ์„ ์ •ํ™•ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค). ํด ๋ฐฑ์ด ์ •ํ™•ํ•ด์•ผํ•œ๋‹ค๋Š” ๋‚ด ์˜๊ฒฌ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹์œ ํšจํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ, ๋ชจ๋“  ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์กฐ์˜ฎ๊น€์„ ๊ตฌํ˜„ํ•˜๋Š” ํ•œ
๋‹น์—ฐํžˆ ํด๋ฐฑ์€ ํ•ด๋ฅผ ๋ผ์น˜ ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•ด์•…์€ ๋‹น์‹ ์ด
๊ทธ๊ฒƒ์„ ์žŠ์€ ๊ฒฝ์šฐ ๋ฐฉ๋ฒ• ์—†์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ ์กฐ์šฉํžˆ ์ž˜๋ชป๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ฒฐ๊ณผ.

๋‚˜๋ฅผ ์œ„ํ•ด ํด๋ฆญํ•˜๊ฒŒ ๋งŒ๋“  @toivoh ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์„ค๋ช… ํ•ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋Œ€์ฒด transpose(X::AbstractMatrix) ๋ฐ transpose(X::AbstractVector) ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉด ์•„๋งˆ๋„ ํ•ญ์ƒ ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (๋Š๋ฆฐ ๊ฒฝ์šฐ์—๋„ ... ์˜ˆ๋ฅผ ๋“ค์–ด full ํ˜ธ์ถœ). ๋” ๋‚˜์€ / ๋น ๋ฅธ ์ž‘์—…์„ ์œ„ํ•ด ํ•ญ์ƒ ๋” ์ „๋ฌธํ™” ๋œ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด transpose(::Any) ๊ฐ€ ์•ž์„œ ์–ธ๊ธ‰ ํ•œ "๋ง์žฅ๋‚œ"์ด์™ธ์˜ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚ค์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค (์ฆ‰, Complex ๋ฒˆํ˜ธ๋ฅผ ์ฒ˜๋ฆฌ ํ•  ๋•Œ ... ๋‚ด๊ฐ€ ๋ชจ๋ฅด๋Š” ๋‹ค๋ฅธ ์Šค์นผ๋ผ ์‚ฌ์šฉ ์‚ฌ๋ก€์ผ๊นŒ์š”?).

์—ญ์‚ฌ์ ์ธ ์ด์œ ๋กœ QRCompactWYQ <: AbstractMatrix ์ด์ง€๋งŒ # 987 # 10064์— ๋”ฐ๋ฅด๋ฉด์ด ํ•˜์œ„ ์œ ํ˜• ๊ด€๊ณ„๋Š” ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์œผ๋ฏ€๋กœ ์ œ๊ฑฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ–‰๋ ฌ๊ณผ ๊ฐ™์€ ๋น„ ๋ฐฐ์—ด์˜ ๋˜ ๋‹ค๋ฅธ ์˜ˆ๋Š” IterativeSolvers.AbstractMatrixFcn ์ด๋ฉฐ, ์ด๋Š” AbstractMatrix ์˜ ํ•˜์œ„ ์œ ํ˜•์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ด ์œ ํ˜•์˜ ๊ฒฝ์šฐ ์ฐธ์กฐํ•˜๋Š” ํด๋ฐฑ์€ ์ ˆ๋Œ€๋กœ ์ „๋‹ฌ๋˜์ง€ ์•Š์œผ๋ฉฐ ๋‹ค์‹œ๋Š” ๋‚ด ์š”์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/JuliaLang/julia/issues/13171 ์—์„œ์ด ํ† ๋ก ์„ ๊ณ„์†ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค

"ํŒ€ ์„ ํ˜• ๋Œ€์ˆ˜ํ•™"์˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ํ•œ ๋‹จ๊ณ„ ์˜ฌ๋ผ์„œ 0.6์„ ์œ„ํ•ด ๋ญ”๊ฐ€๋ฅผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋‹ค์‹œ ๋ถ€๋”ช ํž ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์žฌ๋ถ€ํŒ…ํ•˜๋ ค๋ฉด ์‹ค์ œ ๊ณ„ํš์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ œ ์ƒ๊ฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. transpose(v::AbstractVector) = TransposedVector(v) ์—ฌ๊ธฐ์„œ TransposedVector <: AbstractVector . TransposedVector ์™€ AbstractVector ๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ์œ ์ผํ•œ ์˜๋ฏธ๋Š” * (๋ฐ ๋ชจ๋“  A_mul_B s, \ , / , ...). ์ฆ‰, * (etc ...) ๋ฏธ๋งŒ์œผ๋กœ ๊ณ„์•ฝ ํ•  ์ธ๋ฑ์Šค๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ์กฐ์˜ฎ๊น€์€ ์„ ํ˜• ๋Œ€์ˆ˜ ๊ฐœ๋…์ด๋ฉฐ "๋ฐ์ดํ„ฐ"๋ฐฐ์—ด์„ ์žฌ์ •๋ ฌํ•˜๋ ค๋ฉด reshape ๋ฐ permutedims ๋ฅผ ๊ถŒ์žฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

TransposedVector ์™€ AbstractVector ๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ์œ ์ผํ•œ ์˜๋ฏธ๋Š” * ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ v'==v ํ•˜์ง€๋งŒ v'*v != v*v' ? ์ด๊ฒƒ์€ ์˜๋ฏธ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ž ์žฌ์ ์œผ๋กœ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ ๋ณด์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ v'==v ํ•˜์ง€๋งŒ v'*v != v*v' ? ์ด๊ฒƒ์€ ์˜๋ฏธ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ ์ž ์žฌ์ ์œผ๋กœ ํ˜ผ๋ž€์Šค๋Ÿฌ์›Œ ๋ณด์ž…๋‹ˆ๋‹ค.

IMO ์ด๊ฒƒ์€ ํ”ผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค (์•„๋งˆ๋„ ๋ถˆํ–‰ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค).

๋ฒกํ„ฐ์˜ ์Œ๋Œ€๋„ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค. ์ „์น˜๋„ ์—ฌ์ „ํžˆ ์ž˜ ์ •์˜ ๋œ ์š”์†Œ๊ฐ€์žˆ๋Š” 1 ์ฐจ์› ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ, ๊ฐ€์ ธ์˜ค๊ณ , ๋ณ€ํ˜•ํ•˜๊ณ , ๋งคํ•‘ํ•˜๊ณ , ์ค„์ผ ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ์—ด์—์„œ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š๋Š” ํ•œ (์˜ˆ : Matrix{T} ์˜ ํ•˜์œ„ ์œ ํ˜•๊ณผ Array{T,2} ์˜ ๋ถˆ๋ณ€ ๋ž˜ํผ๋ฅผ ๋ชจ๋‘ ์ •์˜ํ•˜๊ณ  ๋” ๋งŽ์€ (์„ ํ˜• ๋Œ€์ˆ˜ ํŠน์ •) ๋ฉ”์„œ๋“œ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์Œ) ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด ๋ฐ ์„ ํ˜• ๋Œ€์ˆ˜ ์†์„ฑ๊ณผ ์ผ์น˜ํ•˜๋Š” ๋งŽ์€ ์„ ํƒ์ž…๋‹ˆ๋‹ค.

(๋‚˜์—๊ฒŒ) ํ•œ ๊ฐ€์ง€ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด ์งˆ๋ฌธ์€ ๊ทธ๊ฒƒ์ด ๋ฒกํ„ฐ์ฒ˜๋Ÿผ ๋ฐฉ์†ก๋˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด 2 ์ฐจ์›์— ๊ฑธ์ณ ๋ฐฉ์†ก๋˜๋Š”์ง€์ž…๋‹ˆ๋‹ค. ํฌ๊ธฐ๊ฐ€ (1, n) ์ด๋ฉด ์ฒซ ๋ฒˆ์งธ ์ฐจ์›์ด ๊ธธ์ด 1 ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ง„ ํ–‰๋ ฌ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์ฃผ์žฅํ•˜๋Š” ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์ „์ฒด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์‹ค์ œ๋กœ ๋งŽ์ด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. Vector{T} ์˜ ์กฐ์˜ฎ๊น€์€ Array{T,2} (์˜ˆ : Matrix ...)๋กœ ์œ ์ง€๋˜์–ด์•ผํ•˜์ง€๋งŒ, ๊ทธ ์กฐ์˜ฎ๊น€์€ ๋‹ค์‹œ Vector ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ( ์˜ˆ : v'' === v ).

๊ทธ๊ฒŒ ๋” ์ข‹์€ ์ƒ๊ฐ์ธ๊ฐ€์š”? ๊ทธ๊ฒƒ์€ ๋œ ๊นจ์ง€๋ฉด์„œ ์„ ํ˜• ๋Œ€์ˆ˜ํ•™์—์„œ ์˜๋ฏธ๋ก ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŽธ์ง‘ : @martinholters ๊ฐ€ ํ‘œ์‹œํ•จ์— ๋”ฐ๋ผ wrt == ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค).

๋‚˜์—๊ฒŒ TransposedVector{T <: AbstractVector{Tv}} <: AbstractMatrix{Tv} *)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด size(::TransposedVector, 1)==1 ์ด์ง€๋งŒ transpose(::TransposedVector{T})::T ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํ˜„๋ช…ํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์ฒ˜๋Ÿผ ๋“ค๋ฆฌ์ง€๋งŒ, ์ด์— ๋Œ€ํ•œ ์ข‹์€ ์ฃผ์žฅ์ด์žˆ์„ ์ •๋„๋กœ ๋งŽ์€ ๋…ผ์Ÿ์ด์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

*) ์ด๊ฒƒ์ด ๊ตฌ๋ฌธ ์ƒ ์œ ํšจํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์˜๋„ ํ•œ ์˜๋ฏธ๊ฐ€ ๋ช…ํ™•ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์˜ˆ, ์ฝ”๋“œ์—์„œ ์•„์ด๋””์–ด๋ฅผ ๊ฐ€์ง€๊ณ  ๋†€ ๋•Œ @martinholters์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

https://github.com/andyferris/TransposedVectors.jl ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค

ํ•œ ๊ฐ€์ง€ ํฐ ์งˆ๋ฌธ์€ ๋ณต์žกํ•œ ํ™œ์šฉ์— ๋Œ€ํ•ด CTransposedVector ์œ ํ˜•์—†์ด ์‚ด ์ˆ˜ ์žˆ๋Š”์ง€ ์•„๋‹ˆ๋ฉด ์ฒ˜๋ฆฌ ๋  ๊ฒƒ์ธ์ง€์ž…๋‹ˆ๋‹ค.

๋ณ„๋„์˜ CTransposedVector ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋‘ ๊ฐ€์ง€ ๊ฐœ๋… (๊ฒฐํ•ฉ ๋ฐ ์žฌ๊ตฌ์„ฑ)์„ ํ•˜๋‚˜์˜ ๊ฐœ์ฒด๋กœ ๊ฒฐํ•ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐœ๋…์„ ๋ณ„๋„์˜ ์—”ํ‹ฐํ‹ฐ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋” ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด MappedArrays.jl์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‰ฝ์Šต๋‹ˆ๋‹ค.

conjview(A) = mappedarray((conj,conj), A)

๊ทธ๋ฆฌ๊ณ  ๋‹น์‹ ๋„ ํ›Œ๋ฅญํ•œ ์„ฑ๋Šฅ์„ ์–ป์Šต๋‹ˆ๋‹ค.

๋งž์•„, ๊ณ ๋งˆ์›Œ Tim. ๋‚˜๋Š” ๊ทธ์™€ ๊ฐ™์€ ๊ฒƒ์„ ์ƒ๊ฐ / ํฌ๋งํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ๋‚ด ์œ ์ผํ•œ ๊ด€์‹ฌ์‚ฌ๋Š” ๋‘ ๋ž˜ํผ๊ฐ€ ํ•ญ์ƒ "์˜ฌ๋ฐ”๋ฅธ"์ˆœ์„œ๋กœ ๋‚˜ํƒ€๋‚˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ• ์ด์—ˆ์ง€๋งŒ ์ง€๊ธˆ๊นŒ์ง€ ๊ตฌํ˜„ ํ•œ ๊ฒƒ์ด ๊ทธ๊ฒƒ์„ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๋˜ํ•œ ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๋ชจ๋“  ์กฐํ•ฉ์— ๋Œ€ํ•ด BLAS๋ฅผ ์ง€์›ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ์•„๋ฆ„๋‹ค์šด ์ ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ conj ์—์„œ conjview ๋˜๋Š” ๋ณ„๋„์˜ ๋ณ€๊ฒฝ์ด์ด ๋ณ€๊ฒฝ์— ๋…๋ฆฝ์ ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋‘˜ ๋‹ค ๋…๋ฆฝ์  ์ธ ํŒจํ‚ค์ง€๋กœ ๋•œ์งˆ ํ•  ์ˆ˜ ์žˆ๊ณ  ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํ•จ๊ป˜ ๊ตฌ์„ฑ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค). conj ์กฐํšŒ์ˆ˜๋ฅผ ์˜ฌ๋ฆฌ๋ ค๋Š” ์š•๊ตฌ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ๊ทธ๋Ÿฌํ•œ ๋ทฐ๋ฅผ ๋ฌด๋ฃŒ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ธ๋ผ์ธ non-isbits ๋ถˆ๋ณ€์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ๊ธฐ๋‹ค๋ฆด ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๊นŒ?

@andyferris : ๋‹น์‹ ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์ข‹์€ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค โ€“ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ตฌํ˜„์ด ์ž˜ ์ž‘๋™ํ•˜๋ฉด Base์—์„œ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ช…์‹ฌํ•ด์•ผ ํ•  ํ•œ ๊ฐ€์ง€๋Š” https://github.com/JuliaLang/julia/issues/5332์— ๋Œ€ํ•ด์„œ๋„ TransposedMatrix๋ฅผ ์›ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ

์ด์ œ ๋ณ€ํ™˜์„ ๊ณ„์† ํ–ˆ์œผ๋ฏ€๋กœ ์ „์น˜ ๋ฒกํ„ฐ ์œ ํ˜•์„ ํ”ผํ•ด์•ผํ•œ๋‹ค๊ณ  ๋‹ค์‹œ ์–ธ๊ธ‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ ๋ช‡ ๋ฒˆ ์–ธ๊ธ‰๋˜์—ˆ์ง€๋งŒ ๋ˆ„๊ตฌ๋‚˜์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ชจ๋“  ์˜๊ฒฌ์„ ๋‹ค์‹œ ์ฝ์„ ์ˆ˜ ์žˆ์„์ง€ ์˜์‹ฌ๋ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์— ๋Œ€ํ•œ ์ „์น˜ ์œ ํ˜•์„ ๋„์ž…ํ•˜๋ฉด ๊ฑฐ์˜ ์ด์ ์ด์—†์ด ์ƒํ™ฉ์ด ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค. ๋ฒกํ„ฐ๊ฐ€ ๋ฐฉํ–ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ •๋ง๋กœ ์ƒ๊ฐํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์„ ํ–‰๋ ฌ๋กœ ๋งŒ๋“œ์‹ญ์‹œ์˜ค. ํ–‰๋ ฌ๊ณผ ๋‹ค๋ฅธ ์„ ํ˜• ๋Œ€์ˆ˜ ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ฒกํ„ฐ๊ฐ€ 1xn ํ–‰๋ ฌ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋„๋ก ์ƒˆ ๋ž˜ํผ ์œ ํ˜•์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋น„๋Œ€์นญ์€ x' ๊ฐ€ x ๋ฅผ ํ–‰๋ ฌ๋กœ ์Šน๊ฒฉํ•˜๋Š” ๋ฐ˜๋ฉด A*x ๋Š” x ๋ฅผ ํ–‰๋ ฌ๋กœ ์Šน๊ฒฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์„ ํ˜• ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์ด 2D ์ „์šฉ์ด๋ผ๋ฉด A*x ๋Š” ์Šน๊ฒฉ๋˜์–ด์•ผํ•˜๊ณ  x'x ๋Š” 1x1 ํ–‰๋ ฌ์ด๋ฉ๋‹ˆ๋‹ค. ๋˜๋Š” ๋ฒกํ„ฐ๋ฅผ ๋ฒกํ„ฐ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ A*x ๋„ ๋ฒกํ„ฐ๊ฐ€๋˜์ง€๋งŒ x' ๋Š” noop ๋˜๋Š” ์˜ค๋ฅ˜ ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค. ์ „์น˜ ๋ฒกํ„ฐ๋ฅผ ๋„์ž…ํ•˜๋ ค๋ฉด ๋งŽ์€ ์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œ ์ •์˜๊ฐ€ ํ•„์š”ํ•˜๋ฉฐ ์œ ์ผํ•œ ์ด์ ์€ x'x ๊ฐ€ ์Šค์นผ๋ผ๊ฐ€๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ–‰๋ ฌ ์ „์น˜๊ฐ€ ๋งค์šฐ ๋‹ค๋ฅด๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  Ax_mul_Bx ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฒกํ„ฐ ์ „์น˜ ๋™์ž‘๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘์— ๋Œ€ํ•ด ํ† ๋ก  ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

TransposedVector ์œ ํ˜•์„ ๋„์ž…ํ•˜๋ฉด TransposedMatrix ์œ ํ˜•์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ์‹ค์ œ๋กœ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ,์ด ์ž‘์—…์˜ ์ค‘๊ฐ„ ์–ด๋”˜๊ฐ€์—์žˆ๋Š” ๊ฐ•ํ•œ ํ•ฉ์˜๋Š” ๋ฒกํ„ฐ ์ „์น˜๊ฐ€ ์ด์ƒํ•˜๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๊ณ , ๊ตฌํ˜„๋˜๋ฉด ๋ถ„๋ช…ํžˆ AbstractArray ์˜ ํ•˜์œ„ ์œ ํ˜•์ด๋˜์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค โ€” ์ €๋Š” size ๋„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค ์œ„์˜ ์š”์•ฝ ์€ ์ฝ” ๋ฒกํ„ฐ๋ฅผ ํฌํ•จ ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋ฅผ ์—ด๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ํ‘œ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค (์œ ํ˜•์œผ๋กœ ํฌํ•จํ•˜๋Š” ๋Œ€์‹  ๋ฐฐ์—ด์— conj ๋งคํ•‘ํ•˜๋Š” Tim์˜ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ ๋ณ€์ˆ˜).

๊ทธ๋Ÿฌ๋‚˜ ๋ฒกํ„ฐ ์ „์น˜๊ฐ€ ๋‹จ์ˆœํžˆ ์˜ค๋ฅ˜๋ผ๋Š” ๋” ๊ฐ•๋ ฅํ•œ ์š”์ฒญ์ด์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์‹ค์ œ๋กœ ํŒจํ‚ค์ง€์— ์‚ด ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋ฒกํ„ฐ ์ „์น˜๊ฐ€ ์˜ค๋ฅ˜๊ฐ€๋˜๋Š” ๊ฒƒ์€ ์•„๊ธฐ๋ฅผ ๋ชฉ์š•๋ฌผ๋กœ ๋‚ด ๋˜์ง€๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๋ฒกํ„ฐ๋ฅผ ์ „์น˜ํ•˜๊ธฐ ์œ„ํ•ด v' ๋ฅผ ์“ธ ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์€ ์ •๋ง, ์ •๋ง ์งœ์ฆ๋‚  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฒกํ„ฐ ๋ฐ ํ–‰๋ ฌ๊ณผ ๊ณฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์™ธํ•˜๊ณ  ํ–‰ ํ–‰๋ ฌ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋Š” TransposedVector ์œ ํ˜•์„ ๊ฐ–๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ๊ทธ๋ ‡๊ฒŒ ๋‚˜์œ ๊ฒƒ์€ ์‹ค์ œ๋กœ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

๋ฒกํ„ฐ ์ „์น˜๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค๋Š” ๋™์ž‘์˜ ์ˆ˜์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋‹น์‹ ์€ ๋‹จ์ˆœํžˆ ์›ํ•˜๋Š” ๊ฒฝ์šฐ v'' == v , ๊ทธ๊ฒƒ์€์„์œ„ํ•œ ๊ดœ์ฐฎ์•„์š” typeof(v') <: AbstractMatrix . ๊ทธ๋Ÿฌ๋‚˜ typeof(v'v) <: Scalar ๋˜๋Š” typeof(v'A) <: AbstractVector ์™€ ๊ฐ™์ด์ด ์Šค๋ ˆ๋“œ์—์„œ ์–ธ๊ธ‰ ํ•œ ๋‹ค๋ฅธ ๊ฒƒ๋“ค์„ ์›ํ•œ๋‹ค๋ฉด, ์ข€ ๋” ๋ณต์žกํ•˜๊ณ  ๋” ๋ณต์žกํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

TransposedVector๋ฅผ Vector์˜ ์ผ์ข…์œผ๋กœํ•œ๋‹ค๋Š” ์ƒ๊ฐ์€ ๋งŽ์€ ๋ฌธ์ œ์˜ ๊ทผ์› ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ทธ๊ฒƒ์ด ์ผ์ข…์˜ ํ–‰๋ ฌ์ด๊ณ  size(v.') == (1,length(v)) ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ํ›จ์”ฌ ๋œ ๋ฐฉํ•ด๊ฐ€ ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์œ ์ผํ•œ ์ฐจ์ด์ ์€ ์ด์ค‘ ์ „์น˜๊ฐ€ ๋ฒกํ„ฐ๋ฅผ ๋‹ค์‹œ ์ œ๊ณตํ•˜๊ณ  v'v ๊ฐ€ ์Šค์นผ๋ผ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ „์น˜๋ฅผ ๋ฒกํ„ฐ๋กœ ์ทจ๊ธ‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด length(v') ๊ฐ€ ์ •๋‹ต์„ ์ œ๊ณตํ•˜๊ณ  ์„ ํ˜• ์ธ๋ฑ์‹ฑ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@StefanKarpinski์™€ 110 % ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋ฒกํ„ฐ์˜ ์œ ํ˜•์œผ๋กœ ๋งŒ๋“œ๋Š” ๋ฐ ๋†€๋ž์ง€ ๋งŒ,์ด ์Šค๋ ˆ๋“œ์˜ ์•ž๋ถ€๋ถ„์—์„œ ๋…ผ์˜ ๋œ ์ข…๋ฅ˜์˜ ์ด์œ ๋กœ ์ธํ•ด ๋„ˆ๋ฌด ์˜๋ฏธ๊ฐ€ ์—†์œผ๋ฉฐ ์˜คํžˆ๋ ค ๊นจ์กŒ์Šต๋‹ˆ๋‹ค.

(1, n) ํฌ๊ธฐ๋กœ ๋งŒ๋“œ๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์€ Array ๋™์ž‘ ์ธก๋ฉด์—์„œ ์ง€๊ธˆ๊ณผ ๋˜‘๊ฐ™์ด ๋™์ž‘ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 1xN Matrix ๊ณผ ๊ตฌ๋ณ„๋˜๋Š” _only_ ์—ฐ์‚ฐ์€ ' , .' , * , \ . ๋ฐ / .

์ด๋“ค ์ค‘ ์–ด๋Š ๊ฒƒ๋„ "์œ ์‚ฌ ๋ฐฐ์—ด"์—ฐ์‚ฐ์ž๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ์ˆœ์ „ํžˆ ํ–‰๋ ฌ๊ณผ ๋ฒกํ„ฐ ์‚ฌ์ด์˜ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•˜๋ฉฐ MATLAB ( "ํ–‰๋ ฌ ์‹คํ—˜์‹ค")์—์„œ ์ง์ ‘ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์ด ์ตœ์ข… ๊ฐœ์„ ์€ ๋‹จ์ˆœํžˆ size(tvec, 1) = 1 ์ปดํŒŒ์ผ๋Ÿฌ์— ์ •์ ์œผ๋กœ v'' ๋ฅผ v ํ•˜๊ณ  ์‹ถ์€ ์ปดํŒŒ์ผ๋Ÿฌ _and_๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. (ํ•œ ์ฐจ์›์ด ๊ณ ์ •๋˜๊ณ  ๋‹ค๋ฅธ ์ฐจ์›์ด ๋™์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋˜๋Š” StaticArray ์™€ ๋น„์Šทํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.)

๋‹จ์ˆœํžˆ v ''== v๋ฅผ ์›ํ•˜๋ฉด typeof (v ') <: AbstractMatrix์— ๋Œ€ํ•ด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

๊ถŒ๋ฆฌ.

๊ทธ๋Ÿฌ๋‚˜ typeof (v'v) <: Scalar ๋˜๋Š” typeof (v'A) <: AbstractVector์™€ ๊ฐ™์ด์ด ์Šค๋ ˆ๋“œ์—์„œ ์–ธ๊ธ‰ ํ•œ ๋‹ค๋ฅธ ์‚ฌํ•ญ์„ ์›ํ•œ๋‹ค๋ฉด ์ข€ ๋” ๋ณต์žกํ•˜๊ณ  ๋‹ค๋ฅธ ์ง์Šน์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์™œ? ์šฐ๋ฆฌ๋Š” ๋ฐฐ์—ด๊ณผ ์œ ์‚ฌํ•œ ์†์„ฑ์„ ๊นจ๋œจ๋ฆฌ์ง€ ์•Š์œผ๋ฏ€๋กœ ์—ฌ์ „ํžˆ ๋ฐฐ์—ด ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์  ํ˜ธ์ถœ์€ ์ด์ „๊ณผ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋ฉฐ ๋‹ค๋ฅธ ๋ฒกํ„ฐํ™” ๋œ ์ž‘์—…์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. * ๋Š” Vector ๋ฐ Matrix ์˜ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์— ๋Œ€ํ•œ ์ง€์‹์— "ํŠนํ™”"๋˜์–ด ์žˆ์œผ๋ฉฐ ์ด๋Š” ์„œ๋ฉด ์„ ํ˜• ๋Œ€์ˆ˜์˜ ๋™์ž‘์„ ๋ชจ๋ฐฉํ•˜๋ ค๊ณ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. v' * v ์Šค์นผ๋ผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ _ ๋งค์šฐ _ ํ‘œ์ค€ ์ˆ˜ํ•™์ด๋ฉฐ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ทธ๋ ‡๊ฒŒ๋˜์ง€ ์•Š์€ ์œ ์ผํ•œ ์ด์œ ๋Š” ์ผ๊ด€๋œ ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์‚ฌ์†Œํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค (์ค„๋ฆฌ์•„๊ฐ€ ์–ป์€ ์˜๊ฐ์€ MATLAB),ํ•˜์ง€๋งŒ Stefan์€ ์ด์— ๋Œ€ํ•ด ๋ช…ํ™•ํžˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ๊ณฑ์„ ์Šค์นผ๋ผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์—ฌ๊ธฐ์„œ ๋งํ•  ์ˆ˜์žˆ๋Š” ์œ ์ผํ•œ ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค (๋‹ค๋ฅธ ๋งค์šฐ ์‚ฌ์†Œํ•œ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค)-๊ทธ ์ž์ฒด๋งŒ์œผ๋กœ Array ๊ฐ€๋˜๋Š” ๊ฒƒ์ด ๋ถ€์ ํ•ฉํ•œ ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค (๋งŽ์€ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค). Array ์ค‘ ' , .' , * , \ ๋ฐ / ์ •์˜ ๋จ _ ๋ชจ๋‘ _ , ์ฃผ๋ชฉํ• ๋งŒํ•œ ์ˆœ์œ„ 3+)

์ž‘๋…„์— ์ œ๊ฐ€ ๋งŒ๋‚œ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜๋Š” ๋ชจํ˜ธ์„ฑ์ด์—ˆ์Šต๋‹ˆ๋‹ค. IIRC ๋ฒกํ„ฐ ์ „์น˜๊ฐ€ ๋ฐฐ์—ด์ด ์•„๋‹ ๋•Œ ํ•ด๊ฒฐํ•˜๊ธฐ๊ฐ€ ํ›จ์”ฌ ๋” ๊ฐ„๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

๋„ค, ๋๋‚˜๊ธฐ ์ „์— ์–ผ๋งˆ๋‚˜ ๊นŠ์–ด ์งˆ์ง€ ์กฐ๊ธˆ ๊ฑฑ์ • ๋˜๋„ค์š” ... :)

์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๊ฐ€ Base ๋œ ๋ชจ ๋†€๋ฆฌ ์‹์œผ๋กœ ๋งŒ๋“ค๊ณ  ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌํ•จํ•œ๋‹ค๋ฉด ๋ฉ‹์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. AbstractArray ๋ฐ Array ๋งŒ ์ •์˜ํ•˜๋Š” ์ž์ฒด ํฌํ•จ ๋œ ํŒจํ‚ค์ง€ ๋˜๋Š” ๋ชจ๋“ˆ์ด ์žˆ์œผ๋ฉด ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๊ฐœ๋ฐœ์ด ๋” ๊ฐ„๋‹จ ํ•ด์ง‘๋‹ˆ๋‹ค.

@Jutho ์˜ ์ œ์•ˆ์— ์ •ํ™•ํžˆ ๋ฌด์—‡์ด ๋ฌธ์ œ * ๊ฐ€ ์™ผ์ชฝ์˜ ๋ฒกํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ (๊ฒฐํ•ฉ) ์ „์น˜ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

* ํ–‰๋ ฌ ๊ณฑ์…ˆ, ' ํ–‰๋ ฌ (์ผค๋ ˆ) ์ „์น˜ (๋ฒกํ„ฐ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ), ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค ๋ฐ demote ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋‘ ๊ฐœ์˜ ์—ฐ์‚ฐ์ž promote ๊ฐ€์žˆ๋Š” ๊ฒฝ์šฐ ํ›„ํ–‰ ์‹ฑ๊ธ€ ํ†ค์„ ์ œ๊ฑฐํ•˜๋Š” demote , ์˜ค๋ฅธ์ชฝ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ *: (n,m) -> (m,) -> (n,) , ์™ผ์ชฝ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ *: (n,) -> (n,m) -> (m,) , ์Šค์นผ๋ผ ์ œํ’ˆ *: (n,) -> (m,) -> (,) ๋ฐ ์™ธ๋ถ€ ์ œํ’ˆ ร—: (n,) -> (m,) -> (n,m) :

(*)(A::AbstractMatrix, v::AbstractVector) = demote(A*promote(v))
(*)(u::AbstractVector, A::AbstractMatrix) = demote((promote(u)'*A)')
(*)(u::AbstractVector, v::AbstractVector) = demote(demote(promote(u)'*promote(v)))
(ร—)(u::AbstractVector, v::AbstractVector) = promote(u)*promote(v)'

์ด ์—ฐ์‚ฐ์ž๋กœ ๋ฒกํ„ฐ๋ฅผ ์ „์น˜ํ•ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

ํŽธ์ง‘ : ์ •ํ™•ํžˆ @Jutho ์˜ ์ œ์•ˆ์€ ์•„๋‹™๋‹ˆ๋‹ค.

@Armavica ,์ด ์˜๋ฏธ๋ฅผ * ์— ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด ์ •ํ™•ํžˆ ๋‚ด ์ œ์•ˆ ์ด์—ˆ๋Š”์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ํ˜„์žฌ dot ์™€ ๋™์ผํ•œ ์ƒˆ๋กœ์šด (์œ ๋‹ˆ ์ฝ”๋“œ) ์—ฐ์‚ฐ์ž โˆ™ ์— ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. dot . ๋˜ํ•œ promote ๋ฐ demote ์ ‘๊ทผ ๋ฐฉ์‹์„ ์œ ํ˜• ์•ˆ์ • ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ €์˜ ์ˆœ์ˆ˜ ์ฃผ์˜์ž๋Š” ๋ฒกํ„ฐ ์ž์ฒด์˜ ์ „์น˜๋ฅผ ํ”ผํ•ด์•ผ ํ•œ๋‹ค๋Š” v'w ๋˜๋Š” v'*w ๋ณด๋‹ค v'w dot(v,w) ์“ฐ๊ธฐ๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค). @andyferris๊ฐ€ ์ œ์•ˆํ•œ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜๋„๋กํ•˜๋Š” ์œ ์—ฐ์„ฑ. ๋”ฐ๋ผ์„œ์ด ํ† ๋ก ์— ๋” ์ด์ƒ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ์‹ค์ œ ๊ตฌํ˜„์„ ์‹คํ–‰ํ•˜๋ ค๋Š” ์ •์ƒ์ ์ธ ์‹œ๋„๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋งž์•„, @Jutho. ํฅ๋ฏธ๋กญ๊ฒŒ๋„์ด ๋‘˜์€ ์ƒํ˜ธ ๋ฐฐํƒ€์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ •์˜ ๋œ ๋ฒกํ„ฐ์— ์ „์น˜๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์€์ด ๊ธฐ๋Šฅ์ด ํ•ฉ๋ฒ•์ ์œผ๋กœ ๋ณ„๋„์˜ ํŒจํ‚ค์ง€, ๋ชจ๋“ˆ ๋˜๋Š” "ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ"(์ฆ‰, "ํƒ€์ž… ๋ถˆ๋ฒ• ๋ณต์ œ"์—†์ด)์—์žˆ์„ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

(์ €๋Š” ๊ฐœ์ธ์ ์œผ๋กœ v'w ๋˜๋Š” v '* w๋ณด๋‹ค dot (v, w)๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.)

Jutho-๋ฐ˜๋ฉด์—, ๋‚˜๋Š” ๋‹น์‹ ์ด ์ข…์ด๋‚˜ ํ™”์ดํŠธ ๋ณด๋“œ์— | ฯˆ> โ‹… | ฯˆ>๋ฅผ ์“ฐ์ง€ ์•Š๊ณ  ์˜คํžˆ๋ ค <ฯˆ | ฯˆ>๋ฅผ ์“ฐ์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ํ™•์‹  ํ•ฉ๋‹ˆ๋‹ค ํ…์„œ ๋„คํŠธ์›Œํฌ ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ).

๋ฌผ๋ก  ์ €๋Š” Dirac์˜ ์ œ๋™ ํ‘œ๊ธฐ๋ฒ•์„ ๋ชจ๋“  ์ˆ˜ํ•™ ๋˜๋Š” ๊ณผํ•™์—์„œ ์„ ํ˜• ๋Œ€์ˆ˜์˜ ํ‘œ์ค€ ๊ณต์‹ํ™”๋กœ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ค„๋ฆฌ์•„์—์„œ ํ™•์žฅํ•˜๋ฉด ์•„๋งˆ ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์ œ ๋‹น์‹ ์€ ๋” ์ด์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‚ด์ ์— ๋Œ€ํ•ด <ฯˆ | ฯˆ>๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ์— ํ™•์‹คํžˆ ๋™์˜ํ•˜์ง€๋งŒ, ๊ทธ๊ฒƒ์€ ๋‚ด๊ฐ€ ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š” <ฯˆ | | ฯˆ>์˜ Hermitian conjugate๋กœ. Hermitian ํ™œ์šฉ์€ ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด ์ •์˜๋ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์™€ ๊ด€๋ จ ์ด์ค‘ ๋ฒกํ„ฐ (์ฝ” ๋ฒกํ„ฐ, ์„ ํ˜• ํ•จ์ˆ˜ ๋“ฑ) ๊ฐ„์˜ ์ž์—ฐ ๋™ํ˜•์€ Riesz ํ‘œํ˜„ ์ •๋ฆฌ ๋กœ ์•Œ๋ ค์ ธ ์žˆ์ง€๋งŒ ์ „์ž๋Š” ๊ธธ์ด n ๋ฒกํ„ฐ๋ฅผ ์„ ํ˜• ๋งต์œผ๋กœ ํ•ด์„ ํ•  ๋•Œ ๋‹น์—ฐํžˆ Hermitian conjugating๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. C์—์„œ C ^ n, ์ฆ‰ (n,1) ํฌ๊ธฐ์˜ ํ–‰๋ ฌ๋กœ.

๋ฌผ๋ก  ์ €๋Š” Dirac์˜ ์ œ๋™ ํ‘œ๊ธฐ๋ฒ•์„ ๋ชจ๋“  ์ˆ˜ํ•™ ๋˜๋Š” ๊ณผํ•™์—์„œ ์„ ํ˜• ๋Œ€์ˆ˜์˜ ํ‘œ์ค€ ๊ณต์‹ํ™”๋กœ๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ค„๋ฆฌ์•„์—์„œ ํ™•์žฅํ•˜๋ฉด ์•„๋งˆ ์ผ์–ด๋‚˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Lol

์ด์ œ ๋‹น์‹ ์€ ๋” ์ด์ƒํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฏธ์•ˆ ํ•ด์š” ... ๋งํ•˜์ง€ ๋ง์•˜์–ด์•ผํ–ˆ๋Š”๋ฐ ... :)

๋‚˜๋Š” <ฯˆ | | ฯˆ>์˜ Hermitian conjugate๋กœ. Hermitian ํ™œ์šฉ์€ ์—ฐ์‚ฐ์ž์— ๋Œ€ํ•ด ์ •์˜๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์‹ค, ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๋ฒกํ„ฐ์™€ ๊ด€๋ จ ์ด์ค‘ ๋ฒกํ„ฐ (์ฝ” ๋ฒกํ„ฐ, ์„ ํ˜• ํ•จ์ˆ˜ ๋“ฑ) ๊ฐ„์˜ ์ž์—ฐ ๋™ํ˜•์€ Riesz ํ‘œํ˜„ ์ •๋ฆฌ๋กœ ์•Œ๋ ค์ ธ ์žˆ์ง€๋งŒ ์ „์ž๋Š” ๊ธธ์ด n ๋ฒกํ„ฐ๋ฅผ C์—์„œ C๊นŒ์ง€์˜ ์„ ํ˜• ๋งต์œผ๋กœ ํ•ด์„ ํ•  ๋•Œ Hermitian conjugating๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. n, ์ฆ‰ ํฌ๊ธฐ (n, 1)์˜ ํ–‰๋ ฌ๋กœ.

๋‚˜๋Š” ํƒˆ์„ ํ•˜์ง€ ์•Š์œผ๋ ค ๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์ง€๋งŒ (ํ•˜์ง€๋งŒ ๋‚˜๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋‚˜์˜๋‹ค) AbstractVector ๊ณผ 1D Array ์—ฐ๊ฒฐํ•˜๊ธฐ ๋•Œ๋ฌธ์—์ด ๋งˆ์ง€๋ง‰ ๋น„ํŠธ๋ฅผ ์•ฝ๊ฐ„ ์–ป๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ฆ‰, AbstractVector ๋Š” ์ˆ˜ํ•™์  ์˜๋ฏธ์—์„œ "์ถ”์ƒ ๋ฒกํ„ฐ"๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ "๋ฏธ๋ฆฌ ์ •์˜ ๋œ ๊ธฐ์ €์— ๋Œ€ํ•œ ๋ฒกํ„ฐ์˜ ์ˆซ์ž ์š”์†Œ"๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ (n,1) ์˜€๊ธฐ ๋•Œ๋ฌธ์— MATLAB์€์ด ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ƒ๊ฐ์„์œ„ํ•œ ์Œ์‹์œผ๋กœ, ๋‹น์‹ ์€ ๋ฌด์—‡ ํ˜•ํƒœ์˜ ๋ชจ๋“  ํ…์„œ ์†Œ์š” (antilinear) ์—ฐ์‚ฐ์ž๋ฅผ ํ˜ธ์ถœ ํ•  |a>|b><c| ํ•˜๊ณ ๋Š” ๋งคํ•‘ |c><a|<b| ? ๋‚˜๋Š” ํ•ญ์ƒ ์ด๊ฒƒ์„ "Hermitian conjugation"๊ณผ ๊ฐ™์ด vector dual ๋ฐ standard operator conjugation๊ณผ ํ•จ๊ป˜ ๋ฌถ์–ด ๋†“์•˜์ง€๋งŒ ์•„๋งˆ๋„ ๊ทธ๊ฒƒ์€ ๋„ˆ๋ฌด ๋ป”๋ป” ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.

@alanedelman ๊ณผ ๋Œ€ํ™”ํ•˜์—ฌ # 4774์— ๋Œ€ํ•œ ๋‚ด ์ž…์žฅ์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ์‚ฌํ•ญ์„ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • Covector ๋˜๋Š” RowVector ์œ ํ˜• ์†Œ๊ฐœ
  • ์„ ํ˜• ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์˜ ๊ฒฝ์šฐ ( * , ' , .' , / , \ , ์–ด์ฉŒ๋ฉด norm ? ๊ธฐํƒ€? )์ด ์œ ํ˜•์€ ์„ ํ˜• ๋Œ€์ˆ˜์—์„œ ์ฝ” ๋ฒกํ„ฐ ์—ญํ• ์„ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ฐฐ์—ด ์—ฐ์‚ฐ (๊ธฐํƒ€ ๋ชจ๋“  ๊ฒƒ)์˜ ๊ฒฝ์šฐ์ด ์œ ํ˜•์€ 2 ์ฐจ์› 1xn ๋ฐฐ์—ด๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
  • ํŠนํžˆ, ์ฝ” ๋ฒกํ„ฐ์˜ size(v') ๋Š” (1, length(v)) ์ž…๋‹ˆ๋‹ค.

์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด Base์˜ ๋ชจ๋“  ์ผ๋ฐ˜ ํ•จ์ˆ˜๋ฅผ ์„ ํ˜• ๋Œ€์ˆ˜๋กœ ๋ถ„๋ฅ˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ size ๋Š” ๋ฐฐ์—ด ํ•จ์ˆ˜์ด๋ฉฐ ๋ณธ์งˆ์ ์œผ๋กœ ๋ฒกํ„ฐ ( "๋ชจ์–‘"์ด์—†๊ณ  ์ฐจ์›์˜ ์นด๋””๋„๋ฆฌํ‹ฐ ๋งŒ ์žˆ์Œ) ๋งŒ์žˆ๋Š” ์„ ํ˜• ๋Œ€์ˆ˜ ์˜์—ญ์—์„œ๋Š” ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. 2 ์ฐจ์› ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ ๋  ์ˆ˜ ์žˆ์Œ) ๋ฐ ์Šค์นผ๋ผ. ๋“ฑ์žฅํ•œ ํ•œ ๊ฐ€์ง€ ํŠน์ • ์˜ˆ๋Š” cumsum ์ด๋ฉฐ, ์ด๋Š” ํ˜„์žฌ ์ฐจ์› ์ธ์ˆ˜ 1์ด ์ œ๊ณต๋œ ๊ฒƒ์ฒ˜๋Ÿผ 2 ์ฐจ์› ๋ฐฐ์—ด์—์„œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ sum ๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉฐ, 1์˜ ์ฐจ์› ์ธ์ˆ˜๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜์ง€ ์•Š๊ณ  ์ „์ฒด ๋ฐฐ์—ด์˜ ํ•ฉ๊ณ„๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ cumsum ์—์„œ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์— ์ƒ์‘ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฝ” ๋ฒกํ„ฐ์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” cumsum ๊ฐ€ N ์ฐจ์› ์—ด์ฃผ ์ˆœ์„œ๋กœ ๋ˆ„์  ํ•ฉ์‚ฐํ•˜์—ฌ ์ผ๋ฐ˜ ๋ฐฐ์—ด์—์„œ ์ž‘๋™ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ณด๋‹ค ์ผ๋ฐ˜์ ์œผ๋กœ ์ฐจ์› ์ธ์ˆ˜์˜ ๊ธฐ๋ณธ๊ฐ’์€ 1์ด ์•„๋‹™๋‹ˆ๋‹ค.

covector๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์—†๋‹ค๋ฉด ์•ฝ๊ฐ„ ๊ฑฑ์ •์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด size ๋ฐ ndims์™€ ๊ฐ™์€ ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์€ ๋‹ค๋ฅธ 2d ๋˜๋Š” 1d ๋ฐฐ์—ด๊ณผ ๊ฐ™๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด์ ์„ ์‹œ๋„ํ•ด์•ผ๋งŒ ์ฐจ์ด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AFAICT๋Š” ๊ฐ์ฒด๊ฐ€ RowVector์ธ์ง€ ํ™•์ธํ•ด์•ผํ•˜์ง€๋งŒ ํŠน์ • ์ผ๋ฐ˜ ์†์„ฑ์„ ๊ฐ–๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด๊ฐ€ ํŠน์ • ์œ ํ˜•์„ ๊ฐ–๋„๋ก ์š”๊ตฌํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๋งค์šฐ ๋“œ๋ญ…๋‹ˆ๋‹ค.

@StefanKarpinski ๋‚˜๋Š” ๊ทธ ๋ชจ๋“  ๊ฒƒ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๊ทธ ํ•จ์ˆ˜๋Š” "๋ฐฐ์—ด"์—ฐ์‚ฐ ๋˜๋Š” "์„ ํ˜• ๋Œ€์ˆ˜"์—ฐ์‚ฐ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด ๋งํ•œ ๊ฒƒ๊ณผ ๋˜‘๊ฐ™์€ ํฌ๊ธฐ = (1, n) TransposedVector ์—์„œ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค . ๊ฐ€๋Šฅํ•œ ๊ฐ c ๋ฐ t ์— ๋Œ€ํ•ด * , \ , / ํ…Œ์ŠคํŠธ ๋ฐ ๋ชจ๋“  ์กฐํ•ฉ์— ๋Œ€ํ•œ ์ข‹์€ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ์–ป๋Š” ๋ฐ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค

๊ทธ๊ฒƒ๋“ค์€ Covector ์™€ ๊ตฌ๋ณ„๋˜๋ฉฐ, ์—ฌ๊ธฐ์„œ ๊ทธ๊ฒƒ์ด ์‹ค์ œ๋กœ ์ผค๋ ˆ ์ „์น˜ (๋˜๋Š” ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์—๋Š” ํ›จ์”ฌ ๋” ์ผ๋ฐ˜์ ์ธ ๋ณ€ํ™˜)์ด์–ด์•ผํ•˜๋ฉฐ RowVector ๋˜๋Š” TransposedVector ๊ฐœ๋…์ ์œผ๋กœ ๋” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

@JeffBezanson "๋‹จ์ผ"์ฐจ์›์„ ๊ฐ–๊ธฐ ์œ„ํ•ด indices() ํ•  ์ˆ˜์žˆ๋Š” ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๊ทธ๋Ÿฌ๋‚˜ ํŠน์ • ์ผ๋ฐ˜ ์†์„ฑ์„ ๊ฐ–๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด๊ฐ€ ํŠน์ • ์œ ํ˜•์„ ๊ฐ–๋„๋ก ์š”๊ตฌํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๋“œ๋ญ…๋‹ˆ๋‹ค.

๋งž์•„์š”,์ด๊ฒŒ ํŠน์ง•์ด๋ผ๋ฉด ๋ฉ‹์ง€ ๊ฒ ๋„ค์š”. ์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฐ์—ด์—์„œ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ๋ถ„๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž์ง€๋งŒ ์ด๊ฒƒ์€ ํฐ ๋ณ€ํ™”์ž…๋‹ˆ๋‹ค. Julia์—์„œ ๊ตฌํ˜„ ๋œ ๋ฉ‹์ง„ ํŠน์„ฑ ๊ตฌ๋ฌธ ์—†์ด๋Š” ๊น”๋” ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” ์„ธ ๊ฐ€์ง€ (๋ฒกํ„ฐ, ์ฝ” ๋ฒกํ„ฐ ๋ฐ ํ–‰๋ ฌ)๋ฅผ ๋‘ ๊ฐ€์ง€ ์œ ํ˜• ( AbstractArray{1} ๋ฐ AbstractArray{2} )์— ๋งคํ•‘ํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ ๊ทธ์ค‘ ํ•˜๋‚˜ (์ฝ” ๋ฒกํ„ฐ)๊ฐ€ ํŠน์ˆ˜ ํ•˜์œ„ ์œ ํ˜•์ด๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒƒ.

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

@JeffBezanson : ๋‚˜๋Š” ๋‹น์‹ ์˜ ๊ฑฑ์ •์„ ์–ป์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ์•„์ด๋””์–ด๋Š” ์„ ํ˜• ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์„ ์ œ์™ธํ•˜๊ณ ๋Š” 1xn 2d ์ถ”์ƒ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฝ” ๋ฒกํ„ฐ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด ๋””์ŠคํŒจ์น˜ ๋“ฑ์„ ํ†ตํ•ด ์œ ํ˜•์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ์‹œ๋„์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ :

TransposedVectors.jl ์€ ์ด์ œ "๊ธฐ๋Šฅ ์™„๋ฃŒ"๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” @StefanKarpinski ๊ฐ€ ์—ฌ๊ธฐ์—์„œ ๋งํ•œ ๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ธฐ๊ณ„๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์˜ ์ „์น˜๋Š” 2 ์ฐจ์›, 1xn ํฌ๊ธฐ์˜ ์ถ”์ƒ ๋ฐฐ์—ด๋กœ ๋™์ž‘ํ•˜๋Š” ๋ฒกํ„ฐ์˜ ๋ž˜ํผ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์„ ํ˜• ๋Œ€์ˆ˜ ์—ฐ์‚ฐ ( * , / , \ , ' , .' ๋ฐ norm ) ํ–‰ ๋ฒกํ„ฐ (๋˜๋Š” ์ด์ค‘ ๋ฒกํ„ฐ)๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

julia> Pkg.clone("https://github.com/andyferris/TransposedVectors.jl")
...

julia> using TransposedVectors
WARNING: Method definition transpose(AbstractArray{T<:Any, 1}) in module Base at arraymath.jl:416 overwritten in module TransposedVectors at /home/ferris/.julia/v0.5/TransposedVectors/src/TransposedVector.jl:28.
WARNING: Method definition ctranspose(AbstractArray{#T<:Any, 1}) in module Base at arraymath.jl:417 overwritten in module TransposedVectors at /home/ferris/.julia/v0.5/TransposedVectors/src/TransposedVector.jl:29.
WARNING: Method definition *(AbstractArray{T<:Any, 1}, AbstractArray{T<:Any, 2}) in module LinAlg at linalg/matmul.jl:86 overwritten in module TransposedVectors at /home/ferris/.julia/v0.5/TransposedVectors/src/mul.jl:9.
WARNING: Method definition At_mul_B(AbstractArray{#T<:Real, 1}, AbstractArray{#T<:Real, 1}) in module LinAlg at linalg/matmul.jl:74 overwritten in module TransposedVectors at /home/ferris/.julia/v0.5/TransposedVectors/src/mul.jl:37.
WARNING: Method definition Ac_mul_B(AbstractArray{T<:Any, 1}, AbstractArray{T<:Any, 1}) in module LinAlg at linalg/matmul.jl:73 overwritten in module TransposedVectors at /home/ferris/.julia/v0.5/TransposedVectors/src/mul.jl:64.

julia> v = [1,2,3]
3-element Array{Int64,1}:
 1
 2
 3

julia> vt = v'
1ร—3 TransposedVectors.TransposedVector{Int64,Array{Int64,1}}:
 1  2  3

julia> vt*v
14

julia> vt*eye(3)
1ร—3 TransposedVectors.TransposedVector{Float64,Array{Float64,1}}:
 1.0  2.0  3.0

์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒค์น˜๋งˆํ‚น์ด ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๋” ์ ์€ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ค๊ณ  (์ „์น˜๊ฐ€ ๊ฒŒ์œผ๋ฅธ ๊ฒฝ์šฐ) ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ๋” ๋งŽ์€ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค (๋•Œ๋กœ๋Š” ๋ฒกํ„ฐ์˜ ๊ณต์•ก ๋ณต์‚ฌ๋ณธ (๋งคํŠธ๋ฆญ์Šค๊ฐ€ ์•„๋‹˜)์ด ์˜ˆ๋ฅผ ๋“ค์–ด Ac_mul_Bc ์—์„œ ์ƒ์„ฑ๋จ). ๊ทธ๋ฆฌ๊ณ  ๋ž˜ํผ ์ž์ฒด๋Š” ๋ถˆ๋ณ€์˜ ๊ฐ€๋ณ€ ํ•„๋“œ๋ฅผ ์ธ๋ผ์ธ ํ•  ๋•Œ๊นŒ์ง€ ์•ฝ๊ฐ„์˜ ๋น„์šฉ์ด ๋“ญ๋‹ˆ๋‹ค . ์ ์ ˆํ•œ ๊ฒฝ์šฐ StridedArray ์ข…๋ฅ˜์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฌธ์ œ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์ด์ด ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ข‹์•„ํ•œ๋‹ค๋ฉด ๊ณง PR์„ ๋งŒ๋“ค์–ด ์ฝ”๋“œ๋ฅผ Base ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (ํŒจํ‚ค์ง€์—๋Š” ์ด๋ฏธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ๊ณ  ๋ชจ๋“  ๋ชจํ˜ธ์„ฑ์ด ํ•ด๊ฒฐ๋จ). (๋˜ํ•œ @jiahao ๋Š” ์ด์ค‘ ๋ฒกํ„ฐ์˜ 1 ์ฐจ์› ์ถ”์ƒ ๋ฐฐ์—ด ๋ฒ„์ „์„ ์‹คํ—˜ํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ์–ธ๊ธ‰

์‚ฌ๋žŒ๋“ค์€ ์ด๋Ÿฌํ•œ PR์ด ์ „์น˜ ํ–‰๋ ฌ์— ๋Œ€ํ•œ ๋ž˜ํผ ์œ ํ˜•์—†์ด v0.6์—์„œ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๊นŒ? ์ „์น˜ ๋œ ๋ฒกํ„ฐ๋Š” ์˜๋ฏธ ๋ก ์  ๋ณ€๊ฒฝ์ด์ง€๋งŒ ์ „์น˜ ๋œ ํ–‰๋ ฌ์€ ์ตœ์ ํ™”์— ๊ฐ€๊น๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ณ„์ ์œผ๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก , ์ผ๋ถ€ ์ „์น˜๊ฐ€ ๋ทฐ์ด๊ณ  ์ผ๋ถ€๊ฐ€ ์‚ฌ๋ณธ ์ธ ๊ฒฝ์šฐ "์ด์ƒํ•˜๊ฒŒ"๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.-์˜๊ฒฌ? ๊ณ ๋ คํ•ด์•ผ ํ•  ๋˜ ๋‹ค๋ฅธ ์ ์€ ์ „์น˜ ํ–‰๋ ฌ๊ณผ ๋ฒกํ„ฐ ๋ชจ๋‘์— ํ•œ ๋ฒˆ, ๋งŽ์€ ์ž‘์—…์ด ๋ชจ๋‘ ์ œ๊ฑฐ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค At_mul_Bt ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋Œ€์ฒด ๊ธฐ๋Šฅ, * ์˜๋ฅผ ์™„๋ฃŒ ์ „ํ™˜ (๋‹จ์ˆœํ™”๋Š” ๋ณด๋žŒ์ด์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค!)-๋ˆ„๊ตฌ๋“ ์ง€ ์ด๋ฒˆ ๋‹ฌ ๋ง๊นŒ์ง€ ๋ชจ๋“  ๊ฒƒ์„ ํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ํ•  ์˜ํ–ฅ์ด ์žˆ๋Š”์ง€ ์˜์‹ฌ๋ฉ๋‹ˆ๋‹ค ...

@andyferris ๋‹˜, ์ž˜ํ•˜์…จ์Šต๋‹ˆ๋‹ค! ์ผ๋ฐ˜์ ์ธ ๊ฒŒ์œผ๋ฅธ Conjugate ๋ž˜ํผ๋กœ ์‹คํ—˜ ํ–ˆ์Šต๋‹ˆ๊นŒ?

@andyferris ๋‚˜๋Š” ํƒ€์ด์–ด๋ฅผ ๊ฑท์–ด ์ฐผ๊ณ , ์ด๊ฒƒ์„ ๊ฝค ์ข‹์•„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—„๊ฒฉํ•˜๊ฒŒ ๊ฐœ์„  ๋œ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ ์„ฑ๋Šฅ ๋ฌธ์ œ๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ โ€‹โ€‹์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋ฌด์Šจ ๋ง์„ํ•˜๋Š”์ง€ ๋ด…์‹œ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, ์—ฌ๋Ÿฌ๋ถ„ :)

์ผ๋ฐ˜์ ์ธ ๊ฒŒ์œผ๋ฅธ Conjugate ๋ž˜ํผ๋กœ ์‹คํ—˜ ํ–ˆ์Šต๋‹ˆ๊นŒ?

์•„์ง์€ ๋ฌด๋ฆฌํ•œ ๋…ธ๋ ฅ ์—†์ด๋Š” ๊ฐ€๋Šฅํ• ์ง€ ๋ชฐ๋ผ๋„ ์†”์งํžˆ ๋งํ•ด์„œ 12 ์›” ๋ง๊นŒ์ง€์ด ์ •๋„๊นŒ์ง€ ๋๋‚ด์ง€ ๋ชปํ• ๊นŒ ๋ด ๊ฑฑ์ •์ด๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฏธ๋ž˜๋ฅผ ๋‚ด๋‹ค ๋ณด๋ฉด์„œ, ๊ฒฐ๊ตญ์—๋Š” ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ์œ„ํ•ด ํŒŒ๊ฒฌ ํ•  ๋‹ค์Œ๊ณผ ๊ฐ™์€ "unionall"์œ ํ˜•์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

  • AbstractVector
  • Conjugate{V where V <: AbstractVector} (๋˜๋Š” Conj{V} , ์–ด์ฉŒ๋ฉด ConjArray ? ๋ฌผ๋ก  ๋ชจ๋“  ์ฐจ์›์˜ ๋ฐฐ์—ด์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค)
  • TransposedVector (๋˜๋Š” RowVector ?)
  • TransposedVector{Conjugate{V where V <: AbstractVector}}
  • AbstractMatrix
  • Conjugate{M where M <: AbstractMatrix}
  • TransposedMatrix (๋˜๋Š” ๊ฐ„๋‹จํžˆ Transpose{M} ?)
  • TransposedMatrix{Conjugate{M where M<:AbstractMatrix}}

(๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์ง€๊ธˆ DenseArray ๋ฐ StridedArray ๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ์Šคํ† ๋ฆฌ์ง€์˜ ๋ชจ๋“  ์ฃผ์–ด์ง„ ํŠน์„ฑ-# 18457์ด ์ด๊ฒƒ๋“ค์„ ์•ฝ๊ฐ„ ๋” ์‰ฝ๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค).

์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ํ•ฉ๋ฆฌ์ ์ธ ๊ณ„ํš์ฒ˜๋Ÿผ ๋“ค๋ฆฌ๋‚˜์š”?

์ฆ‰๊ฐ์ ์ธ ์ž์ „๊ฑฐ ํ˜๋ฆฌ๊ธฐ์™€ ๊ด€๋ จํ•˜์—ฌ ํ˜„์žฌ ํŒจํ‚ค์ง€์—์žˆ๋Š” Base์— ๋Œ€ํ•œ PR์˜ ๊ฒฝ์šฐ ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ ๋ชจ๋‘์— ๋Œ€ํ•ด TransposedVector , RowVector , ์ผ๋ฐ˜ Transpose ๋ž˜ํผ๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๊นŒ? , ๋˜๋Š” ๋‹ค๋ฅธ ๊ฒƒ?

@andyferris ์˜ ๊ตฌํ˜„์ด ์ œ๊ณตํ•˜๋Š” ๋™์ž‘์ด ๊ฝค ์ข‹๊ณ  ๊ฐœ์„ ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ œ ๊ฑฑ์ •์„ ์ข€ ๋” ์ž˜ ํ‘œํ˜„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ์œ ํ˜•์„ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด DArray ๋Š” AbstractArray ์˜ ํ•˜์œ„ ์œ ํ˜•์ด๋ฏ€๋กœ DArray ๋Š” AbstractVector ๋˜๋Š” AbstractMatrix ๋„ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ƒ์ ์œผ๋กœ๋Š” Vector / Matrix ๊ตฌ๋ถ„์„ Row / Column / Matrix๋กœ ํ™•์žฅํ•˜์—ฌ DArray ๋Š” AbstractRow , AbstractCol ๋˜๋Š” AbstractMatrix . ์œ ํ˜• ๊ณ„์ธต ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    AbstractVector
        AbstractRowVector
        AbstractColumnVector
    AbstractMatrix
    ...

์–ด์ œ @jiahao ์™€ ์ด์•ผ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  AbstractVector ๋ฅผ ์—ด๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์—์„œ ์šฐ์„  ์ˆœ์œ„๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ :

julia> isa(1.0:10.0, AbstractVector)
true

julia> randn(10,10) * 1.0:10.0
ERROR: MethodError: no method matching colon(::Array{Float64,2}, ::Float64)

https://github.com/JuliaLang/julia/issues/4774#issuecomment -59428215์—์„œ ๋‚ด๊ฐ€ ๊ฐ€์ง„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒ”์œ„ ์ฃผ๋ณ€์— ๊ด„ํ˜ธ๊ฐ€ ๋ˆ„๋ฝ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ด๋Š” ์šฐ์„  ์ˆœ์œ„ ๋ฌธ์ œ ์ผ๋ฟ์ž…๋‹ˆ๋‹ค.

julia> randn(10,10) * (1.0:10.0)
10-element Array{Float64,1}:
 -22.4311
  โ‹ฎ

์—ฌ๊ธฐ์—์„œ ์ตœ์ ์˜ ์†”๋ฃจ์…˜์ด ํŠน์„ฑ์„ ํ•„์š”๋กœํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜์ง€๋งŒ @andyferris ์˜ ์ž‘์—…์„ ์œ ์ง€ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์•„, ์ข‹์€ ์ง€์ ์ž…๋‹ˆ๋‹ค. Fortress์™€ ์œ ์‚ฌํ•œ ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๊ฐ€ ์ž˜๋ชป๋œ ๊ณต๋ฐฑ ์šฐ์„  ์ˆœ์œ„๋ฅผ ๊ฐ–๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

MIT ๊ทธ๋ฃน์€ ์œ„์—์„œ ์„ค๋ช…ํ•œ ์œ ํ˜• ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ๋ฐฐ์—ด ๊ณ„์ธต ๊ตฌ์กฐ์— ์œ ํ˜• ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ง€์ ํ–ˆ์Šต๋‹ˆ๋‹ค.

abstract AbstractArray{T,N,row}

type Array{T,N,row} <: AbstractArray{T,N,row}
end

typealias AbstractVector{T} AbstractArray{T,1}
typealias AbstractRowVector{T} AbstractArray{T,1,true}
typealias AbstractColVector{T} AbstractArray{T,1,false}
typealias AbstractMatrix{T} AbstractMatrix{T,2}

typealias Vector{T} Array{T,1,false}
typealias Matrix{T} Array{T,2,false}

๋‚˜๋Š” ์ด๊ฒƒ์˜ ๋ชจ๋“  ์˜๋ฏธ๋ฅผ ์•Œ์•„ ๋‚ด์ง€ ๋ชปํ–ˆ๋‹ค --- ์•„๋งˆ๋„ ์ตœ์•…์˜ ๊ฒฝ์šฐ Array{Int,1} ๊ฐ€ ์ถ”์ƒ ์œ ํ˜•์ด๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค ---ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ์œ ํ˜• ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์–ป๊ณ  ๊ฑฐ์˜ ์ •ํ™•ํ•˜๊ฒŒ ์ถ”์ƒํ™”๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋งŒํ•œ ๊ฐ€์น˜๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฒƒ์€ ๋ถˆ์™„์ „ํ•˜๊ฒŒ ๋งค๊ฐœ ๋ณ€์ˆ˜ํ™” ๋œ ์ƒ์œ„ ์œ ํ˜•์— ๋Œ€ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค. ์•”์‹œ ์  ๊ธฐ๋ณธ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

abstract AbstractArray{T,N,row}

type Array{T,N} <: AbstractArray{T,N}
end

isrow{T,N,row}(::AbstractArray{T,N,row}) = row
isrow{T,N}(::AbstractArray{T,N}) = false

julia> isrow(Array{Int,2}())
false

๋ฌผ๋ก  ํŒŒ๊ฒฌ์ด ์กฐ๊ธˆ ์ง€์ €๋ถ„ ํ•ด์ง€๊ณ  ์ง€์›ํ•  ๊ฐ€์น˜๊ฐ€ ์—†์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ์Šคํ•๋ณผ ์ผ๋ฟ์ž…๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ ๊ทธ๊ฒƒ์€ ์ •์˜์™€ ๋™๋“ฑ ํ•ด ๋ณด์ด๋Š”

type Array{T,N} <: AbstractArray{T,N,false}
end

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์€ ์ผ์ข…์˜ "๊ธฐ๋ณธ ์œ ํ˜• ๋งค๊ฐœ ๋ณ€์ˆ˜"์ž…๋‹ˆ๋‹ค. X์™€ Y์— ์ž์œ  ๋ณ€์ˆ˜๊ฐ€์—†๋Š” Array{X,Y} ์œ ํ˜•์„ ๋งŒ๋“ค๋ฉด ์‹ค์ œ๋กœ Array{X,Y,false} ๋ฉ๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์•„์ด๋””์–ด : v'*v ๋ฐ v'*A ๋กœ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๋Œ€์‹  ์ค‘์œ„ ' ๋ฅผ ์ž์ฒด ์—ฐ์‚ฐ์ž๋กœ ๋งŒ๋“ค์–ด ๋‚ด์  v'v ๊ฐ€์ •๋ถ€ ํ‘œ๊ธฐ๋ฒ•์„ ๋ณด์กดํ•˜๊ณ  ์™ผ์ชฝ ์ฝ” ๋ฒกํ„ฐ์— v'A ๋ฅผ ๊ณฑํ•ฉ๋‹ˆ๋‹ค. v'*A . v' ID๋ฅผ ๋งŒ๋“ค๊ณ  v*v ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋“ค๊ณ  v*A ์˜ค๋ฅ˜๋ฅผ ๋งŒ๋“ค๋ฉด ์›ํ•˜๋Š” ๊ฒƒ์„ ๋งŽ์ด ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ ์ œํ’ˆ์„ outer(v,v) ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ฒด๊ณ„์—์„œ v' ๋Š” noop ๋˜๋Š” ์˜ค๋ฅ˜ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฒด๊ณ„์—์„œ ๋ฒกํ„ฐ๋ฅผ ์ „์น˜ ํ•  ์ด์œ ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ–‰๋ ฌ์— ๋Œ€ํ•ด์„œ๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@JeffBezanson ๋‚˜๋Š” AbstractRowVector ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์„ ๊ฒƒ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค (ํ•˜์ง€๋งŒ ์†”์งํžˆ ์œ ์Šค ์ผ€์ด์Šค๋ฅผ ์ƒ๊ฐํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํŒจํ‚ค์ง€์— ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค). ๋‚˜๋Š” ๋˜ํ•œ ์ด๊ฒƒ์ด AbstractMatrix ์˜ ํ•˜์œ„ ์œ ํ˜•์œผ๋กœ ์‚ด ์ˆ˜ ์žˆ์Œ์„ ์ง€์ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€์ด ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ ํ•œ ์ด์œ ๋Š” broadcast ๊ฐ€ ์„ ํ˜• ๋Œ€์ˆ˜๋ณด๋‹ค Julia์—๊ฒŒ ๋” ํ•ต์‹ฌ ๊ฐœ๋… ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ ์‚ฌ๋žŒ๋“ค์€ ํ–‰ ๋ฒกํ„ฐ๊ฐ€ ํ–‰์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ๊ธฐ๋Œ€ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค!

๋ฌผ๋ก  RowVector <: AbstractMatrix ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ๋ถˆํ–‰ํ•œ ์šฉ์–ด ์‚ฌ์šฉ์ž…๋‹ˆ๋‹ค! ๋‚˜๋Š” ์ด๊ฒƒ์ด 2D ๋ฐฐ์—ด๊ณผ ์ถ”์ƒ ํ–‰๋ ฌ์— ๊ฐ™์€ ์ด๋ฆ„์„ ๋ถ€์—ฌํ•œ ๊ฒฐ๊ณผ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด์ „์— ์ด๊ฒƒ์„ ํ›จ์”ฌ ์•ž์„œ ๋งํ–ˆ์ง€๋งŒ,์ด ๋ฌธ์ œ๋Š” ๋„ˆ๋ฌด ๊ธธ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ๋งํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. Julia์™€ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ์–ธ์–ด์—์„œ๋Š” "๋ฐ์ดํ„ฐ ๋ฐฐ์—ด"์†์„ฑ์ด AbstractArray ์˜ ์ฃผ์š” ๊ณ ๋ ค ์‚ฌํ•ญ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค broadcast ๋™์ž‘ ๋ฐฉ์‹์— ๋‹ตํ•˜๋ฉด 1D์ธ์ง€ 2D์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๊ณผ ์—ด๋กœ ์ƒ๊ฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด 1 x n ํ–‰ ๋ฒกํ„ฐ๊ฐ€ ๊ฐ€์žฅ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด์ค‘ ๋ฒกํ„ฐ๋ฅผ ๊ณ ๋ คํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด 1D๊ฐ€ ๊ฐ€์žฅ ํ•ฉ๋ฆฌ์ ์ด๋ฉฐ ์ €๋„ ๋งŒ์กฑํ•ฉ๋‹ˆ๋‹ค! ๊ทธ๋Ÿฌ๋‚˜ ๋ฒกํ„ฐ์˜ ์ด์ค‘์„ ์ทจํ•˜๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค (์˜ˆ : ์ ์–ด๋„ ์ ‘ํ•ฉ์„ ์ง€์›ํ•ด์•ผ ํ•จ).

๋‚˜๋Š” "ํ–‰"๊ทธ๋ฆผ์ด "์ „ํ˜•์ ์ธ"ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ๊ธฐ๋Œ€์™€ ์ผ์น˜ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ๊ณ ๊ธ‰ ์ˆ˜ํ•™์  ํ›ˆ๋ จ์„๋ฐ›์€ ์‚ฌ๋žŒ๋“ค์€ ๋” ๋‚˜์€ ์ถ”์ƒํ™”์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด์ค‘ ๋ฒกํ„ฐ๋ฅผ ๋” ์ž˜ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ์„ ํ˜• ๋Œ€์ˆ˜ ์ง€์‹ ๋งŒ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค๊ณผ ๊ณต๊ฐํ•˜์‹ญ์‹œ์˜ค). ๊ทธ๋ ‡๋‹ค๋ฉด Julia๋Š” ์ผ๋ฐ˜์ ์ธ MATLAB ์‚ฌ์šฉ์ž๋ณด๋‹ค ์ˆ˜ํ•™์  ๊ธฐ๊ต๊ฐ€ ๋” ๋งŽ์€ ์‚ฌ๋žŒ์„ ๋Œ€์ƒ์œผ๋กœํ•ฉ๋‹ˆ๊นŒ?

(์ œ ์ƒ๊ฐ์€ Julia๊ฐ€ "์ผ๋ฐ˜์ ์ธ"ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ๋ชฉํ‘œ๋กœํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ›„์ž์˜ ์ฒญ์ค‘์ด ๋Œ€์ƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค).

๊ฐ€๋Šฅํ•œ ์œ ํ˜• ํŠธ๋ฆฌ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—-๋ฏธ๋ž˜์—๋Š” Buffer ๋ฐ ํฌ๊ธฐ ์กฐ์ • ๊ฐ€๋Šฅํ•œ "๋ชฉ๋ก"์„ ์‚ฌ์šฉํ•˜์—ฌ

AbstractArray{T,N} # interface includes broadcast, Cartesian, getindex, setindex!, etc.
    AbstractArray{T,1}
        AbstractList{T} # resizeable, overloaded with `push!` and so-on
        AbstractVector{T} # non-resizeable, overloaded for *, /, \, ', .', etc
    AbstractArray{T,2}
        AbstractRowVector{T} # non-resizeable, overloaded for *, /, \, ', .', etc
        AbstractMatrix{T} # non-resizeable, overloaded for *, /, \, ', .', etc

๋ฌผ๋ก  AbstractDualVector{T} <: AbstractArray{T,1} ๋Œ€์‹  AbstractRowVector ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋“ค ๋ชจ๋‘์— ๋งž๋„๋ก ์œ ์—ฐํ•˜๊ณ  ๊ตฌ์ฒด์ ์ธ Array ์œ ํ˜•์„ ๊ฐ–๋Š” ๊ฒƒ์€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์•„๋งˆ๋„ ๋ถˆํ•„์š” ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠน์„ฑ์„ ํ†ตํ•ด ์ง€์›๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ด๋Ÿฌํ•œ ์ฐจ์ด์ ์„๋ณด๋‹ค ์‰ฝ๊ฒŒ โ€‹โ€‹ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AbstractVector ๊ฐ€ C ++ std::vector ์ด๊ณ  ์„ ํ˜• ๋Œ€์ˆ˜ ๋ฒกํ„ฐ๊ฐ€ ๋‚˜์—๊ฒŒ ์•ฝ๊ฐ„ ๊ฑด๋ฐฉ์ง„ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€์Šต๋‹ˆ๋‹ค. :) ์„ ํ˜• ๋Œ€์ˆ˜ ๊ฐ๊ฐ (์˜ˆ : ๊ธฐ์ € ์—†์Œ)

์˜ˆ, ํฌ๊ธฐ ์กฐ์ • ๋™์ž‘์„ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์œ„ํ•ด ์Šน์„ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์œ ํ˜• ๊ณ„์ธต์€ Base์— ๋ณ„๋„์˜ "matrix"๋ฐ "2-d array"์ฝ˜ํฌ๋ฆฌํŠธ ์œ ํ˜•์ด ์žˆ์Œ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Array{T,2} ๋Œ€ํ•œ ์ƒ์„ฑ์ž๊ฐ€ ์‹ค์ œ๋กœ ๋‹ค๋ฅธ ํ–‰๋ ฌ ์œ ํ˜•์„ ๋ฐ˜ํ™˜ํ•˜๋„๋กํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋งค์šฐ๋ณด๊ธฐ ํ‰ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๋‚˜๋Š” ์˜คํ•ดํ•˜๊ณ  ์žˆ์„์ง€๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.

์ด ์œ ํ˜• ๊ณ„์ธต์€ Base์— ๋ณ„๋„์˜ "matrix"๋ฐ "2-d array"์ฝ˜ํฌ๋ฆฌํŠธ ์œ ํ˜•์ด ์žˆ์Œ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋งž์•„์š” ... ์ž˜ํ•˜๋ ค๋ฉด ํŠน์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ "์ธํ„ฐํŽ˜์ด์Šค์˜ ์ถ”์ƒ ํŠธ๋ฆฌ"๋ผ๊ณ  ๋ถˆ๋ €๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•˜์‹ญ์‹œ์˜ค. ์ง€๊ธˆ ์ด๊ฒƒ์„ ์‹œ๋„ํ•˜๋Š” ๊ฒƒ์€ ๋‹น์‹ ์ด ๋งํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ถ”์•…ํ•œ ๊ฒƒ์„ ํ•„์š”๋กœ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Buffer ๊ฐ€ ์™„๋ฃŒ ๋˜ ์ž๋งˆ์ž AbstractList <: AbstractVector ์‚ฝ์ž…ํ•˜๊ณ  ๊ด€๋ จ ๋ฉ”์„œ๋“œ๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ง€์›๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค์™€ ์œ ํ˜• ํŠธ๋ฆฌ ๊ฐ„์˜ ์—ฐ๊ฒฐ์€ ์ƒ๋‹นํžˆ ๋Š์Šจํ•ฉ๋‹ˆ๋‹ค. (์ถ”์ƒ) ๋ฐฐ์—ด์ด ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ์ง€ (์ฆ‰, setindex! ), ํฌ๊ธฐ ์กฐ์ •์ด ๊ฐ€๋Šฅํ•œ์ง€, strided๊ฐ€ Base ์ •์˜ ๋œ ์œ ํ˜•์— ๋Œ€ํ•ด์„œ๋งŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์—ฌ๋ถ€ ๋“ฑ์„ ์ฆ‰์‹œ ํŒŒ์•…ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์–‘ํ•œ ์ž…๋ ฅ์œผ๋กœ ์ž‘๋™ํ•˜๊ณ  ํšจ์œจ์ ์ธ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค (์ด๋Š” StaticArrays ๊ฒฝํ—˜์ž…๋‹ˆ๋‹ค).

์œ ํ˜• ๊ณ„์ธต ๊ตฌ์กฐ์˜ ์ˆ˜ํ•™์  ์˜์—ญ๊ณผ ๋งค๊ฐœ ๋ณ€์ˆ˜ํ™” ๋œ ์ถ”์ƒํ™”๋ฅผ์œ„ํ•œ ํ•ฉ๋ฆฌ์ ์ธ ์—ญํ• ์— ๋Œ€ํ•œ ๋Œ€ํ™”์— ๋Œ€ํ•œ ์ƒ๊ฐ. ์–ป์„ ์ˆ˜์žˆ์„ ๋•Œ Julia๊ฐ€ ์ „๋ฌธ์ ์œผ๋กœ ํ‘œํ˜„ ๋œ ์˜๋„์—์„œ ์ „๋ฌธ ์ง€์‹์ด ์˜๋„ ํ•œ ๊ฒƒ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์ฝ”๋“œ๊ฐ€ ์ž‘์„ฑ๋˜๋Š” ๋ฐฉ์‹์„ ๋‹จ์ˆœํ™”ํ•˜๊ณ  ๊ฐ€๋ณ๊ฒŒํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์ •์ฑ…์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ์„ ํƒํ•  ์ˆ˜์žˆ๋Š” ํ•œ ๊ฐ€์ง€ ๊ทœ์น™์€ Any ์ด์™ธ์˜ ์ถ”์ƒ ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋ฐ˜๋˜๋Š” ๊ตฌ์ฒด์ ์ธ ์œ ํ˜•์ด ๊ณต์œ  ๋œ ์•ˆ์‹์ฒ˜๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ๋Š” ๊ฐ€์šด๋ฐ ์กด์žฌ ํ† ํด๋กœ์ง€ ์˜์—ญ์„ ํ˜•์„ฑํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๊ด€ํ–‰์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ์•„์ฃผ ์ ์€ ๋น„์šฉ์œผ๋กœ ๋” ํฐ ๋‹ค์ค‘ ๋ฌธ๋งฅ ๊ฐ๊ฐ์„ ๊ฐ€์ ธ๋‹ค ์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค-์œ ํ˜• ๊ณ„์ธต ๊ตฌ์กฐ์˜ ์ผ๋ถ€๋ฅผ ์ดํ•ดํ•˜๋ฉด ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ์ ‘๊ทผํ•˜๋Š” ๋ฐ ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค.

๋‚ด๊ฐ€๋ณด๊ธฐ์—, ๊ทธ๊ฒƒ์€ ์ผ๋ฐ˜ํ™” ๋œ ๊ต๊ฐ์˜ ์›์ธ์ด๋‹ค. ํ•ด๋ช…์ ์ธ ์ถ”์ƒํ™”๋Š” ์ƒ์„ฑํ•˜๋Š” ์œ ์‚ฌ์„ฑ ์ธ ์ƒ์„ฑ ์  ์œ ์‚ฌ์„ฑ์„ ๊ฒฐํ•ฉํ•˜๋Š” ์ด์›ƒ์œผ๋กœ ์กฐ๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ง๊ด€์˜ ๋‹จ์ˆœํ•œ ๋ช…ํ™•์„ฑ์„ ์ „๋‹ฌํ•˜๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜ํ™”๋ฅผ ํ†ตํ•ด Julia๋Š” ๋ง๋„ ์•ˆ๋˜๋Š” ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ๋” ๋งŽ์€ ์„ฑ๊ณผ๋ฅผ ๊ฑฐ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ข‹์•„, TransposedVectors ์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์˜๊ฒฌ์„ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฝค ๊ฒฌ๊ณ  ํ•ด์ง€๊ณ  PR๋กœ ์ „ํ™˜ ๋  ์ค€๋น„๊ฐ€๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์— ๋‚˜์—ดํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ด€๋ จ ๋ฌธ์ œ

(์˜ˆ : RowVector ๊ฐ€ TransposedVector ๋ณด๋‹ค ๋” ๋‚˜์€ ์ด๋ฆ„์ž…๋‹ˆ๊นŒ? [1 2 3] ๊ฐ€ RowVector ์ž…๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด Matrix ์ž…๋‹ˆ๊นŒ? indices(row, 1) ?)

RowVector์˜ ๊ฒฝ์šฐ +1

2016 ๋…„ 12 ์›” 20 ์ผ ์˜ค์ „ 7:01์— "Andy Ferris" [email protected]์ด ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ข‹์•„, TransposedVectors ์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ์˜๊ฒฌ์„ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋Š๋‚€๋‹ค
๊ฝค ๊ฒฌ๊ณ  ํ•ด์ง€๊ณ  PR๋กœ ๋ฐ”๋€” ์ค€๋น„๊ฐ€๋˜์—ˆ์ง€๋งŒ
์—ฌ๊ธฐ์— ๋‚˜์—ดํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ด€๋ จ ๋ฌธ์ œ
https://github.com/andyferris/TransposedVectors.jl/issues

(์˜ˆ : RowVector๊ฐ€ TransposedVector๋ณด๋‹ค ๋‚˜์€ ์ด๋ฆ„์ž…๋‹ˆ๊นŒ? Is [1 2
3] RowVector ๋˜๋Š” Matrix? ์ธ๋ฑ์Šค (ํ–‰, 1) ๋ž€?)

โ€”
๋Œ“๊ธ€์„ ๋‹ฌ์•˜ ๊ธฐ ๋•Œ๋ฌธ์— ์ˆ˜์‹  ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ณ  GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.
https://github.com/JuliaLang/julia/issues/4774#issuecomment-268170323 ,
๋˜๋Š” ์Šค๋ ˆ๋“œ ์Œ์†Œ๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAm20YYqsXmprI23GgI5PYyWStpTOq5qks5rJ309gaJpZM4BMOXs
.

ํ–‰ / ์—ด ๊ทœ์น™์„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. Vector ๋ฐ RowVector (๋˜๋Š” ColVector ๋ฐ RowVector ). TransposedVector ๋˜๋Š” DualVector +1

@felixrehren ์ €๋Š” DualVector ์ด ์ œ๊ฐ€ ๊ตฌํ˜„ ํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ์˜๋ฏธ๋ฅผ ๊ฐ€์ ธ์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ 1 ์ฐจ์› (์ˆ˜ํ•™์ ์œผ๋กœ ๋ฒกํ„ฐ์˜ ์ด์ค‘์€ ๋ฒกํ„ฐ)์ด๊ณ  ๋‹ค๋ฅธ ์ด์ค‘์„ฑ ์†์„ฑ (์˜ˆ : ๋ณต์žกํ•œ ํ™œ์šฉ)์„ ๊ฐ€์ ธ์•ผํ•ฉ๋‹ˆ๋‹ค. . ๊ดœ์ฐฎ์ง€ ๋งŒ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์กฐ๊ธˆ ๋” ์–ด๋ ต๊ณ  ์ด์ „ ๋ฒ„์ „๊ณผ์˜ ํ˜ธํ™˜์„ฑ์ด ์•ฝ๊ฐ„ ๋–จ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

TransposedVector ์ด๋ฆ„์€ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์กฐ๊ธˆ ๊น๋‹ˆ๋‹ค. ๋˜ํ•œ ํ•ด๋‹น ์œ ํ˜•์˜ ๊ฐ์ฒด๋Š” Vector ๋ฅผ ์ „์น˜ํ•ด์•ผ๋งŒ ์–ป์„ ์ˆ˜ ์žˆ์Œ์„ ์•”์‹œํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋„ TransposedVector ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ–‰๋ ฌ์˜ ํ•œ ํ–‰์„ ์ถ”์ถœํ•˜์—ฌ?

RowVector ๊ฐ€ ์ข‹์€ ์ด๋ฆ„์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๊ฒฐํ•˜๊ณ  ์ •ํ™•ํ•˜๋ฉฐ ์ง๊ด€์ ์ž…๋‹ˆ๋‹ค. @felixrehren , ํ–‰ / ์—ด ๊ทธ๋ฆผ์ด ๋„์›€์ด๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ์ด๋‚˜ ๋‹ค๋ฅธ ์ผ๋ฐ˜์ ์ธ ๋ฐฐ์—ด ์—ฐ์‚ฐ (๊ณฑํ•˜๊ธฐ ์ œ์™ธ)์„ ํ•  ๋•Œ๋งˆ๋‹ค ๋ฒกํ„ฐ์˜ ๋ฐฉํ–ฅ์„ ์ƒ๊ฐํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”ผํ•  ์ˆ˜ ์—†์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

DualVector ๋„ ๋‚˜์˜์ง€๋Š” ์•Š์ง€๋งŒ CoVector ์€ ๋œ ํ˜•์‹์ ์œผ๋กœ ๋“ค๋ฆด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์•ž์„œ ํ˜‘๋ฐ• ํ•œ PR์€ ์ด์ œ # 19670์— ์ œ์ถœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ RowVector ๋กœ๊ฐ”์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋„ TransposedVector๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ–‰๋ ฌ์˜ ํ•œ ํ–‰์„ ์ถ”์ถœํ•˜์—ฌ?

์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ํ•˜๋‚˜์˜ ๊ณ ์ง‘ ํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค. ์•„์ง ์ด์— ๋Œ€ํ•œ ํ›Œ๋ฅญํ•œ ๊ตฌ๋ฌธ์„ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์•„์ด๋””์–ด?

ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ๋„ TransposedVector๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ–‰๋ ฌ์˜ ํ•œ ํ–‰์„ ์ถ”์ถœํ•˜์—ฌ?

์ด๊ฒƒ์€ ์‹ค์ œ๋กœ ํ•˜๋‚˜์˜ ๊ณ ์ง‘ ํฌ์ธํŠธ์ž…๋‹ˆ๋‹ค. ์•„์ง ์ด์— ๋Œ€ํ•œ ํ›Œ๋ฅญํ•œ ๊ตฌ๋ฌธ์„ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋–ค ์•„์ด๋””์–ด?

์ฒ˜์Œ์—๋Š” matrix[scalar,range] (๋ฐ ๊ธฐํƒ€ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ)๊ฐ€ ํ–‰ ๋ฒกํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋งค๋ ฅ์ ์œผ๋กœ ๋ณด์˜€์ง€๋งŒ, ์ด๋Š” ๋‹ค์ฐจ์› ๋ฐฐ์—ด์— ๋Œ€ํ•œ ํ˜„์žฌ ์ธ๋ฑ์‹ฑ ์˜๋ฏธ ์ฒด๊ณ„์—์„œ ํฌ๊ฒŒ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒƒ์ด๋ฉฐ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์—๋Š” ์ €๋ฅผ ๊ฑฑ์ •์Šค๋Ÿฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋Œ€์‹ ์— RowVector (๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋Š” Vector )๊ฐ€ ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ์œ ํ˜•์„ ์ ์ ˆํ•œ ์ข…๋ฅ˜์˜ ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„๋ณด๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ RowVector(matrix[scalar,range]) ์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋งค์šฐ ๋ช…ํ™•ํ•˜๊ณ  ๋ฐฐ์—ด ์ธ๋ฑ์‹ฑ์˜ ํ˜„์žฌ ๋™์ž‘์„ ๋ฐฉํ•ดํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋งž์Šต๋‹ˆ๋‹ค, i ๋ฒˆ์งธ ํ–‰์€ A[i,:].' ์˜ํ•ด ํ–‰ ๋ชจ์–‘์œผ๋กœ ์ถ”์ถœ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ v0.5์—์„œ๋Š” ๊ณ„์†ํ•ด์„œ ๊ทธ๋ ‡๊ฒŒ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค ( RowVector ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด Transpose{V<:AbstractVector} ๋˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ฒฐ๊ตญ ๊ฒฐ์ •ํ•˜๋Š” ๋ชจ๋“  ๊ฒƒ (์ง„ํ–‰์ค‘์ธ ํ† ๋ก ์€ ์—ฌ๊ธฐ ์ฐธ์กฐ)). ์•„๋งˆ๋„ ๊ทธ๊ฒŒ ๋‹ต์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Base์— ๋‘ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?
row(A,i) ๋ฐ col(A,i)
ํ›„์ž๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์ง€๋งŒ ๋Œ€์นญ์„ ์œ„ํ•ด์„œ๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ„๊ฒฐํ•˜๊ณ  ๋ช…ํ™•ํ•˜๋ฉฐ A[i,:].' ๋งŒํผ ๋งŽ์€ ๋ฌธ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

@benninkrs ์˜๋ฏธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ๋‚ด ์ง๊ด€์  ์ธ ํ•ด์„์€ ๋ฒกํ„ฐ๊ฐ€ ์ „ํ˜€ ๋ฐฉํ–ฅ์ด์—†๋Š” ์„ ํ˜• ๋Œ€์ˆ˜ ํ•ด์„์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์— ๋Œ€ํ•œ ๋ชจ๋“  ๊ด€์ ์€ ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ์ €๋Š” Vector ์™€ RowVector ํ•จ๊ป˜ ์ข‹์•„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋„ค์ด๋ฐ์ด ์ถ”์ƒ๊ณผ ๊ตฌ์ฒด์ ์ธ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ํ˜ผํ•ฉ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ ์ €๋Š” @andyferris ์˜ ๊ตฌํ˜„์„ ๊ธฐ๋ฐ˜์œผ๋กœํ•˜๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฒกํ„ฐ ์ „์น˜๋ฅผ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์•ˆ์˜ ์˜ˆ๋กœ, ๋‹ค์Œ์€ ์ตœ์•…์˜ ์ฆ์ƒ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ ‘๊ทผ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. v' ์„ ํ˜„์žฌ ์ƒํƒœ ๊ทธ๋Œ€๋กœ ๋‘์‹ญ์‹œ์˜ค (์˜ˆ : ํ–‰ ํ–‰๋ ฌ ์ƒ์„ฑ). a'b ๋ฅผ ๋ฐ”๋กœ ์•„๋ž˜์— ์šฐ์„  ์ˆœ์œ„๊ฐ€์žˆ๋Š” ์ค‘์œ„ ์—ฐ์‚ฐ์ž๋กœ ๊ตฌ๋ฌธ ๋ถ„์„ ๊ณฑ์…ˆ. ์ฆ‰, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ž‘์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  1. v' ๋Š” ํ–‰ ํ–‰๋ ฌ (ctranspose)์ž…๋‹ˆ๋‹ค.
  2. v'v ๋Š” ์Šค์นผ๋ผ (๋‚ด์ )์ž…๋‹ˆ๋‹ค.
  3. v'*v ๋Š” ์š”์†Œ๋ฅผ 1 ๊ฐœ ๊ฐ€์ง„ ๋ฒกํ„ฐ (ํ–‰ ํ–‰๋ ฌ * ๋ฒกํ„ฐ)์ž…๋‹ˆ๋‹ค.
  4. v*v' ๋Š” ์™ธ์  ํ–‰๋ ฌ (๋ฒกํ„ฐ * ํ–‰ ํ–‰๋ ฌ)์ž…๋‹ˆ๋‹ค.
  5. v'A ๋Š” ํ–‰ ํ–‰๋ ฌ ( "vecmat")์ž…๋‹ˆ๋‹ค.
  6. v'*A ๋Š” ํ–‰ ํ–‰๋ ฌ (matmat)์ž…๋‹ˆ๋‹ค.
  7. v'A*v ๋Š” ์Šค์นผ๋ผ์ž…๋‹ˆ๋‹ค (matvec A * v ๋‹ค์Œ์— ๋‚ด์ )
  8. (v'A)*v ๋Š” ์š”์†Œ๋ฅผ 1 ๊ฐœ ๊ฐ€์ง„ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค (vecmat ๋‹ค์Œ์— matvec).
  9. v'*A*v ๋Š” ์š”์†Œ๋ฅผ 1 ๊ฐœ ๊ฐ€์ง„ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค (matmat ๋‹ค์Œ์— matvec).
  10. v'' ๋Š” ์—ด ํ–‰๋ ฌ (๋ฒกํ„ฐ ctranspose, ๋‹ค์Œ ํ–‰๋ ฌ ctranspose)์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ์„ค์ •์—์„œ 2์™€ 3์€ ๋™์ผํ•˜๊ณ  7, 8 ๋ฐ 9๋Š” ๋™์ผํ•˜๋ฏ€๋กœ์ด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฒฐ์ •์ ์œผ๋กœ, ๊ตต์€ ํ•ญ๋ชฉ์€ ์œ ์‚ฌํ•œ ํ˜•ํƒœ ์ค‘ ๊ฐ€์žฅ ์งง๊ณ  ๊ฐ€์žฅ ํŽธ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ๋žŒ๋“ค์ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋„๋‹ฌ ํ•  ์ˆ˜์žˆ๋Š” ํ•ญ๋ชฉ์ด๋ฉฐ ๋ชจ๋‘ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š”๋Œ€๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์œ ํ˜•์ด ์—†์œผ๋ฉฐ ํ•˜๋‚˜์˜ ์ƒˆ๋กœ์šด ์ค‘์œ„ ์—ฐ์‚ฐ์ž ๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ํฐ ๋‹จ์ ์€ 10 โ€“ v'' ๋Š” ์—ฌ์ „ํžˆ ์—ด ํ–‰๋ ฌ์ž…๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์ด๊ฒƒ์€ ์ ‘๋ฏธ์‚ฌ '' ๊ฐ€ ๋ฒกํ„ฐ๋ฅผ ์—ด ํ–‰๋ ฌ๋กœ ๋ฐ”๊พธ๋Š” ์—ฐ์‚ฐ์ž์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด์ ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•œ ๊ฑธ์Œ ๋ฌผ๋Ÿฌ์„œ์„œ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šด ๊ฒƒ์€ ์ถ”๊ฐ€์ ์ธ ์—…๋‹ค์šด ๋˜๋Š” ์ฐจ์› ๋ ˆ์ด๋ธ”๋ง ๊ธฐ๋Šฅ์ด ์—†๊ฑฐ๋‚˜ 2 ์ฐจ์› ์ดํ•˜๋ฅผ Matlab์ฒ˜๋Ÿผ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์ฐจ์› ๋ฐฐ์—ด์ด ์‹ค์ œ๋กœ ์„ ํ˜• ๋Œ€์ˆ˜๋กœ ์›ํ™œํ•˜๊ฒŒ ๋„๋ธŒํ…Œ์ผ๋˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ์—๊ฒŒ ๋‚จ์€ ๊ฒƒ์€ ํŽธ๋ฆฌํ•จ์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ๋ฐฐ์—ด์„ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค์ง€ ์•Š๊ณ ๋„ ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์„ ํ˜• ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ์ €๋Š”์ด ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ •์งํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ฐฐ์—ด ์œ ํ˜• ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ๋ง๊ฐ€ ๋œจ๋ฆฌ์ง€ ์•Š๊ณ  ๊ตฌ๋ฌธ์ƒ์˜ ํŽธ์˜๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”์ด ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ง„์ง€ํ•˜๊ฒŒ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋˜ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ค‘์œ„ a'b ํŠน๋ณ„ํžˆ ( * ๋ฐ”๋กœ ์•„๋ž˜) ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  v' ๊ฐ€ ์ผค๋ ˆ ๋ฒกํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋กํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋” ์ผ๋ฐ˜์ ์œผ๋กœ ์ ‘๋ฏธ์‚ฌ A' ๋Š” ๋ฐฐ์—ด์„ ๊ฒฐํ•ฉํ•˜๊ณ  ๊ทธ ์ฐจ์›์„ ๋Š๋ฆฌ๊ฒŒ ๋ฐ˜์ „ ํ•  ์ˆ˜์žˆ๋Š” ๋ฐ˜๋ฉด A.' ๋Š” ๋ฐฐ์—ด์˜ ์ฐจ์›์„ ๋Š๋ฆฌ๊ฒŒ ๋ฐ˜์ „ํ•˜์—ฌ ๋ฒกํ„ฐ์˜ ID ์—ญํ• ์„ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฒด๊ณ„์—์„œ ์†์„ฑ ๋ชฉ๋ก์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. v' ๋Š” ๋ฒกํ„ฐ (๊ณต์•ก)์ž…๋‹ˆ๋‹ค.
  2. v'v ๋Š” ์Šค์นผ๋ผ (๋‚ด์ )์ž…๋‹ˆ๋‹ค.
  3. v'*v (์ถ”์ฒœ ์˜ค๋ฅ˜๊ฐ€ v'v ๋‚ด์ ๊ณผ outer(v,v) ์™ธ์ธก ์ œํ’ˆ) โ€ 
  4. v*v' (์ถ”์ฒœ ์˜ค๋ฅ˜๊ฐ€ v'v ๋‚ด์ ๊ณผ outer(v,v) ์™ธ์ธก ์ œํ’ˆ) โ€ 
  5. v'A ๋Š” ๋ฒกํ„ฐ (vecmat)์ž…๋‹ˆ๋‹ค.
  6. v'*A ์€ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค (vecmat์˜ ๊ฒฝ์šฐ v'A ๊ถŒ์žฅ).
  7. v'A*v ๋Š” ์Šค์นผ๋ผ์ž…๋‹ˆ๋‹ค (matvec A * v ๋‹ค์Œ์— ๋‚ด์ )
  8. (v'A)*v (์ถ”์ฒœ ์˜ค๋ฅ˜๊ฐ€ v'v ๋‚ด์ ๊ณผ outer(v,v) ์™ธ์ธก ์ œํ’ˆ) โ€ 
  9. v'A'v ๋Š” ์Šค์นผ๋ผ์ž…๋‹ˆ๋‹ค ( v'(A'v) โ€“ matvec ์ผค๋ ˆ์™€ ๋‚ด๋ถ€ ๊ณฑ)
  10. v'' ๋Š” ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค ( v'' === v ๋ฐ v.' === v )

์ด์ œ ์ด๋Ÿฌํ•œ ์†์„ฑ์„ ๋ชจ๋‘ ์ž‘์„ฑ ํ–ˆ์œผ๋ฏ€๋กœ ์ด๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•œ ์˜ต์…˜์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์˜ค๋ฅ˜ ์‚ฌ๋ก€๋Š” ์‹ค์ œ๋กœ ์‚ฌ๋žŒ๋“ค์ด perfered ๊ตฌ๋ฌธ์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋„์›€์ด๋˜๋ฉฐ, ๋ฌผ๋ก  ๋ฐ”๋žŒ์งํ•œ v'' === v ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. .' ๋Š” ์ผ๋ฐ˜ ์ฐจ์› ๋ฐ˜์ „ ์—ฐ์‚ฐ์ž ์ž„). ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ๋งŒ ๋‹ค๋ฅธ ๋งค์šฐ ์œ ์‚ฌํ•œ ๊ตฌ๋ฌธ์„ ๊ฐ–๋Š” ๊ฒƒ์€ ์•„๋งˆ๋„ ๋” ํ˜ผ๋ž€ ์Šค๋Ÿฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

โ€  ์‚ฌ์šฉ์ž ์ฝ”๋“œ๊ฐ€ ' ๋ฐ * ์˜ค๋ฒ„๋กœ๋“œ๋˜์–ด ์ด๋Ÿฌํ•œ ์ž‘์—…์ด ์ž‘๋™ํ•˜๋Š” ๊ฒฝ์šฐ ์˜ค๋ฅ˜๋ฅผ ์ œ๊ณต ํ•  ์œ„ํ—˜์ด์žˆ๋Š”๋ณด๋‹ค ์ •ํ™•ํ•œ ์˜ค๋ฅ˜๋ฅผ ์œ„ํ•ด ๊ตฌ๋ฌธ ๋ถ„์„์‹œ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋ฅผ ์ž ์žฌ์ ์œผ๋กœ ํฌ์ฐฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ถŒ์žฅ ์‚ฌํ•ญ์„ ์ˆ˜์ •ํ•˜๋ ค๋ฉด lazy conjugate wrapper๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ ์–ด์จŒ๋“  # 5332์— ๋Œ€ํ•ด์„œ๋Š” ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํ•œ ๊ฑธ์Œ ๋ฌผ๋Ÿฌ์„œ์„œ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฐ์šด ๊ฒƒ์€ ์ถ”๊ฐ€์ ์ธ ์—…๋‹ค์šด ๋˜๋Š” ์ฐจ์› ๋ ˆ์ด๋ธ”๋ง ๊ธฐ๋Šฅ์ด ์—†๊ฑฐ๋‚˜ 2 ์ฐจ์› ์ดํ•˜๋ฅผ Matlab์ฒ˜๋Ÿผ ๋Œ€์ฒด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š์œผ๋ฉด ๋‹ค์ฐจ์› ๋ฐฐ์—ด์ด ์‹ค์ œ๋กœ ์„ ํ˜• ๋Œ€์ˆ˜๋กœ ์›ํ™œํ•˜๊ฒŒ ๋„๋ธŒํ…Œ์ผ๋˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ์—๊ฒŒ ๋‚จ์€ ๊ฒƒ์€ ํŽธ๋ฆฌํ•จ์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ๋ฐฐ์—ด์„ ์ง€๋‚˜์น˜๊ฒŒ ๋ณต์žกํ•˜๊ฒŒ ๋งŒ๋“ค์ง€ ์•Š๊ณ ๋„ ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ์— ๋Œ€ํ•œ ์ผ๋ฐ˜์ ์ธ ์„ ํ˜• ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ์ €๋Š”์ด ์ ‘๊ทผ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์ •์งํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ฐฐ์—ด ์œ ํ˜• ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ๋ง๊ฐ€ ๋œจ๋ฆฌ์ง€ ์•Š๊ณ  ๊ตฌ๋ฌธ์ƒ์˜ ํŽธ์˜๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”์ด ์ ‘๊ทผ ๋ฐฉ์‹๊ณผ ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์ง„์ง€ํ•˜๊ฒŒ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

: 100 :

๋ช…์‹œ ์ ์œผ๋กœ ์ ‘๋ฏธ์‚ฌ ' ๋ฐ .' ์ผ๋ฐ˜ ๋ฐฐ์—ด (์„ ํ˜• ๋Œ€์ˆ˜ ๋Œ€์‹ ) ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์Šคํ† ๋ฆฌ์ง€ ๋ฐ ์„ ํ˜• ๋Œ€์ˆ˜ ์œ ํ˜•์˜ ์œตํ•ฉ์„ ๋‘ ๋ฐฐ๋กœ ์ค„์ด๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ ์†์ƒ์ด ์ ์€ ํ”„๋ ˆ์ž„ ์›Œํฌ์— ๋Œ€ํ•œ ๋ฌธ์„ ์—ด์–ด ๋‘ก๋‹ˆ๋‹ค. ๊ทธ ๋™์•ˆ์—๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ์—์„œ ๊ฐ€์ •๋ถ€ ํ‘œ๊ธฐ๋ฒ•์„ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” ์ด๋Ÿฌํ•œ ์ž‘์—…์˜ ๊ธฐ๋Šฅ์ด ์›ํ•˜๋Š” ํŽธ์˜์„ฑ์„ ๋Œ€๋ถ€๋ถ„ ์ œ๊ณตํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์ฝ”๋“œ์™€ ๋ณต์žก์„ฑ์ด ์ค„์–ด ๋“ญ๋‹ˆ๋‹ค. ๋ฒ ์ŠคํŠธ!

ํ•œ๊ฐ€์ง€ ๋ฌธ์ œ v.' ๋ฌด ์กฐ์ž‘ ๋˜๋˜์ง€๋Š”์ด๋‹ค A .+ v.' ๊ฐ’ ์ถ”๊ฐ€ํ•˜๋Š” ์˜๋ฏธ ๋ณ€๊ฒฝํ•  ๊ฒƒ์ด๋‹ค v ๊ฐ ์—ด์— A ๊ฐ’์„ ์ถ”๊ฐ€๋กœ A ์˜ ํ–‰์—. ์ด๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฒกํ„ฐ๋กœ ํ–‰๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋” ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค๊ณ  ์ฝ”๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์ž˜๋ชป๋œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ „์ฒด ํ๊ธฐ์ฃผ๊ธฐ๊ฐ€ ํ™•์‹คํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค ( A ๊ฐ€ ์ •์‚ฌ๊ฐํ˜• ์ธ ๊ฒฝ์šฐ).

์ด ์‹œ์ ์—์„œ ์ €๋Š” @andyferris ์˜ ๊ตฌํ˜„์„ ๊ธฐ๋ฐ˜์œผ๋กœํ•˜๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฒกํ„ฐ ์ „์น˜๋ฅผ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด์ง€ ์•Š๊ธฐ๋กœ ๊ฒฐ์ •ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

v0.6์˜ ๋งˆ๊ฐ์ผ์ด ๊ฑฐ์˜ ๋‹ค๊ฐ€์˜ค๊ณ  ์žˆ์Œ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์•„๊ธฐ๋ฅผ ๋ชฉ์š•๋ฌผ์— ๋ฒ„๋ฆฌ์ง€ ์•Š๋„๋ก์ฃผ์˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ ์–ธ๊ธ‰ ๋œ RowVector + ํ–‰๋ ฌ ์ „์น˜ ๋ฐ ๋ฐฐ์—ด ํ™œ์šฉ์— ๋Œ€ํ•œ ๋ทฐ๋ฅผ ํ†ตํ•ด ๋‹ค์Œ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • IMO, ๋‹ค์†Œ ํ•ฉ๋ฆฌ์ ์ธ ์„ ํ˜• ๋Œ€์ˆ˜ ์œ ํ˜• (ํ–‰ ๋ฒกํ„ฐ๊ฐ€ ์ด์ค‘ ๋ฒกํ„ฐ์˜ ํŠน์ˆ˜ํ•œ ๊ฒฝ์šฐ๋กœ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ์ง€๊ธˆ๊ณผ ๊ฐ™์ด ์ด์ค‘ ๋ฒกํ„ฐ์˜ ์กด์žฌ๋ฅผ ๋ถ€์ •ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค)
  • v'' === v
  • v1'v2 ์™€ ๊ฐ™์€ Stefan์˜ ๋ชฉ๋ก์—์žˆ๋Š” ๊ฒƒ ์ค‘ ์ผ๋ถ€๋Š” ๋‚ด์ ์ž…๋‹ˆ๋‹ค.
  • ๊ฑฐ์˜ ์ด์ „ ๋ฒ„์ „๊ณผ ํ˜ธํ™˜๋˜๋Š” ๋ฐฐ์—ด ์˜๋ฏธ-์˜ˆ๋ฅผ ๋“ค์–ด size(v') ์˜ ๊ฒฐ๊ณผ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์ง€๋งŒ v'' ๋Š” 1 ์ฐจ์›์œผ๋กœ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Lazy conj ๋ฐ transpose ๋ž˜ํผ๋Š” ํŠน์ • ์ƒํ™ฉ์—์„œ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์–ด์จŒ๋“  ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • * ๋ฐ A_mul_B! ๋งŒ ์„ ํ˜ธํ•˜๋Š” ๋ชจ๋“  Ac_mul_Bc ํ•จ์ˆ˜ ์ œ๊ฑฐ (๋ฐ ์œ ์‚ฌํ•˜๊ฒŒ \ , / ).

์ด ๋ชจ๋“  ๊ฒƒ์„ Array ์ •์งํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋„ˆ๋ฌด ๋งŽ์€ ๋…ธ๋ ฅ์„ ๊ธฐ์šธ์ด์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค (์ €์—๊ฒŒ ๋ฌธ์ œ๋Š”์ด์‹œ๊ธฐ์— ์‹œ๊ฐ„์„ ์ฐพ๊ณ  ์„ ํ˜• ๋Œ€์ˆ˜ ๋ชจ์Œ์—์žˆ๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ์œ ํ˜•์„ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค). ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰ ์š”์ ์€ ์•ˆ๋„์˜ ํ•œ์ˆจ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐ˜๋Œ€๋กœ IMHO ์ด๋Ÿฌํ•œ ๊ทœ์น™์€ ๊ตฌ๋ฌธ ๋ถ„์„์ด ์•ฝ๊ฐ„ ๋ณต์žกํ•ด ๋ณด์ด๋ฉฐ ' ๋กœ * ' ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์•ฝ๊ฐ„ ํ˜ผ๋ž€ ์Šค๋Ÿฝ๊ฑฐ๋‚˜ ๋†€๋ผ ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (3, 4, 6 ๋ฐ 8์€ RowVector ).

๊ทธ๋ฆฌ๊ณ  ์˜ˆ, ์ž ์žฌ์  ์ธ ๋ฒ„๊ทธ๋ฅผ ๊ฐ•์กฐํ•˜๊ธฐ ์œ„ํ•ด v.' ๋˜๋Š” ๋ฌด์–ธ๊ฐ€๋ฅผ ํ๊ธฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.์ด ์‹œ์ ์—์„œ v.' ๋ฅผ ๋ˆ„๋ฝ ๋œ ๋ฉ”์„œ๋“œ ์˜ค๋ฅ˜๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๊ฑฐ์˜ ๋‚ซ์Šต๋‹ˆ๋‹ค (๋‹จ์ˆœํžˆ ํ–‰์„ ์ง€์›ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค) / ์ด์ค‘ ๋ฒกํ„ฐ, ๊ทธ๋Ÿฌ๋‚˜ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ํŒจํ‚ค์ง€๋ฅผ ์ค‘์ง€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค)

19670์€ v0.6์— ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ชฐ๋ž˜ ๋„ฃ๊ณ  ์‹ถ์€ ์š•๊ตฌ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ค€๋น„๊ฐ€๋˜์–ด ์žˆ๊ฑฐ๋‚˜ ๊ฐ€๊นŒ์ด์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.

BAM

์šฐ์™€.

์ด๊ฒƒ์ด ์šฐ๋ฆฌ์˜ ๊ฐ€์žฅ ๊ธด ์ด์Šˆ ์Šค๋ ˆ๋“œ์˜€์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, # 11004์—๋Š” ๋” ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹  ๋ง์ด ๋งž์•„์š”, ์ œ๊ฐ€ ๊ณต๊ฐœ ์ด์Šˆ ์Šค๋ ˆ๋“œ๋ฅผ ์ง€์ • ํ–ˆ์–ด์•ผ ํ–ˆ์–ด์š”.

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