@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}
์ ํ์ ๋์
ํ๋ ์ ์ผํ ์ด์ ๋ ๋ฐ ๋ณ์ฑ ๋ฒกํฐ์ ๊ณต ๋ณ์ฑ ๋ฒกํฐ์ ์ฐจ์ด๋ฅผ ๋ํ ๋ด๊ธฐ์ํ ๊ฒ์
๋๋ค.
์๋ฅผ ๋ค์ด 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)
์ ๋์์ด๊ฐ ๋ ์ ์์ต๋๋ค.
์์ฝํ์๋ฉด ํ์ฌ ํ ๋ก ์ฃผ์ ๋
A[i,:]
๋ A[:,i,j]
๊ทธ๋๋ก ๋ฒกํฐ์
๋๋ค.A[ i:i , : ]
๋๋ A[ [i], : ]
๋ ํ์ด ํ๋ ์ธ ํ๋ ฌ์ ๋ฐํํฉ๋๋ค.v'w
๋๋ v'*w
๋ ๋ฒกํฐ์ ๋ด์ (์ธ์ ์ ๊ฒฝ์ฐ v*w'
๊ณผ ์ ์ฌ ํจ)์
๋๋ค.v'
๋ ๋ฒกํฐ์ ๋ํด ์ ์๋์ง ์์์ต๋๋ค (์ฌ์ฉ์๋ฅผ permutedims(v,1)
????๋ก ๊ฐ๋ฆฌํด).v*A
๋ A๊ฐ ํ๋ ฌ์ด๋ฉด ๋ฒกํฐ๋ฅผ ๋ฐํํฉ๋๋ค.vโ
w
๋ ๋ด์ ์ ๋ฐํํฉ๋๋ค (๊ทธ๋ฌ๋ ํ๋ ฌ ์์
์ ํตํด mathematica์ .
๋งํผ ๋ฉ๋ฆฌ ๊ฐ์ง ์์ต๋๋ค.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์ ๋ง์ ์ธ๋ฑ์ค, ์ฆ ํฌ๊ธฐ (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
: ๋ฒกํฐ๋ ํ๋์ ์ต๋ ๊ธฐ๋ณธ ๊ฒ, ์ฒซ ๋ฒ์งธ ์ ๋ ๋ฒ์งธ ์๋์ ๋งคํธ๋ฆญ์ค; ๊ทธ๋ฌ๋ฉด ์ด๋ป๊ฒ ํฉ๋ฆฌ์ ์ผ๋ก ๊ณ์ ๋ ์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์์์ ์๊ฐ :
์, ์ด๊ฒ์ ํ์คํ 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 (์ค๋ ์ ์ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์์)์์ ๋ชจํธํ๊ฒ ์ ์ฌํ ๊ฒ์ ๊ตฌํํ์ต๋๋ค.
๊ทธ๋ ์ ๊ฐ๋ฐ์ ๊ฐ์ฅ ํฐ ๋ถ๋ง์ (๊ทธ๋ฆฌ๊ณ ์๋๋ฌ ์ ์ต๋๋ค) 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}
๋ณ์นญ์ ์ง์ ํฉ๋๋ค. ์ ์ฌ์ ์ผ๋ก ์ฌ๊ธฐ์์ ๋ค๋ฅธ ์ด๋ฆ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.)
์ฌ๊ธฐ์์ ๋ค์ ๊ตฌํ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ณด์ ๋๋ค.
transpose
๋ฉ์๋๋ ์ฐจ์๊ณผ ํด๋น UPMASK ๋ฐ DOWNMASK ์ธ๋ฑ์ค๋ฅผ ๋ค์ ์ ๋ ฌ ํ ํ UPMASK์ DOWNMASK๋ฅผ ๊ตํํฉ๋๋ค. ์ค๋ฆฝ ์น์๋ ์ํฅ์๋ฐ์ง ์์ต๋๋ค.AbstractArray{T, N}
ํ์ ์ ํ์ ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก ํ
์ ์์
์์ ํด๋นํ๋ ๋์ฒด AbstractTensorArray{T, N, [..., false, true, false, true], [..., true, false, true, false]}
ํ์ ์ ํ์ผ๋ก ๋ณํ๋ฉ๋๋ค. ์ด๊ฒ์ ๋ฒกํฐ์ ํ๋ ฌ์ ๋ํ Julia์ ํน๋ณํ ๋ฐฐ์ด ๊ตฌ๋ฌธ์ ๊ธฐ์กด ์๋ฏธ๋ฅผ ๋ณด์กดํฉ๋๋ค.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
์ด ์ ์์ด ํ์ฌ ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ชจ๋ ์ฃผ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค๊ณ ์๊ฐํฉ๋๋ค
v'' === v
v' == v
v'w
๋ v
๋ฐ w
์ ๋ด์ ์
๋๋ค. ํนํ, ์์๊ฐ ํ๋ ์ธ ๋ฒกํฐ๊ฐ ์๋๋ผ ์ค์นผ๋ผ์
๋๋ค.v*w'
๋ v
๋ฐ w
์ ์ธ๋ถ ๊ณฑ์
๋๋ค.M*v
๋ ๋ฒกํฐ์
๋๋ค.M*v'
์ ์ค๋ฅ์
๋๋ค.v'*M
๋ ์ ์น ๋ฒกํฐ์
๋๋ค.v*M
์ ์ค๋ฅ์
๋๋ค.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์ ๊ณ์ฐํ๋ ๋ฐ ๊ฝค ์ข์ ์๊ฐ ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
๋์ํ. ๋ช ๊ฐ์ง ๋ฌธ์ :
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]
๋งํผ์ด๋ ํธ๋ฆฌํ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.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
์ ๋ ํญ์ ํํ ๋ณ๊ฒฝ, ์์ด, ์๋ง๋ ๋ณต์กํ ๊ฒ์ผ๋ก ์ผ๋ฐ์ ์ธ ์์ถ์ ํ ์์์์ต๋๋ค.
์์ ๊ฐ์ด ๋ค์ ํ์ํ ๋ ์ ํฉ์ฒด
ํ
์์ ํฐ ๋ฌธ์ ๊ฐ ์ค์ ๋ก ๋ฌด์์ธ์ง ํ์คํ์ง ์์ต๋๋ค. ์์ด ์ค ๋ช ๊ฐ์ง๋ง ๊ตฌํํ๋ฉด ์๋ฉ๋๋ค.
๊ธฐ๋ฅ?
๋ค, ๋ง์ต๋๋ค. ์ด๋ฒ ํธ์์ ์ฐ๋ฆฌ๊ฐ ์์ผ๋ก ๋์๊ฐ๊ณ ์ํ๋ ๊ฒ์
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)
๋ฑ์ ๊ตฌ๋ณ๋์ง ์์ ๊ฒ์
๋๋ค. ๋ค๋ฅธ. ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ๋ค์ด _ ๋น์ทํ๊ฒ _ ๋์ํ๋๋ก ๊ตฌํํ๊ธฐ ์ํด ์ฝ๊ฐ์ ๋
ธ๋ ฅ์ ๊ธฐ์ธ์ด์ง ๋ง, ๊ทธ๊ฒ์ ๋ฐฐ์ด์ด ์ค์ ๋ก ๋ฌดํ ์ฐจ์ ์ธ ๊ฒ๊ณผ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ๋ค.
ํ์ฌ ๊ท์ฐฎ์ ๊ฒ๋ค์ ๋ชฉ๋ก์ ์์ ์ ์์ ์ข์ ์์ฑ์ ํฌ๊ฒ ๋ฐ์ํฉ๋๋ค. ์ฆ:
v'' !== v
โ ์ค์ ๋ก v'' != v
; ๊ฐ์ ๊ณ๊ธ์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค.v' != v
โ ๋์ผํ ๊ฑฐ๋.v'w
๋ ์ค์นผ๋ผ๊ฐ ์๋๋ผ ์์๋ฅผ 1 ๊ฐ ๊ฐ์ง ๋ฒกํฐ์
๋๋ค.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
์์ ์ณ์ ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๋ ๊ฒ์
๋๋ค.
ํ์ฌ ์ฝ ๋ฒกํฐ์ ๋ํ ์ต์ํ์ ์ง์์ +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 '๋ฅผ ์ด๋ค๋ ๊ฒ์
๋๋ค. ๋ด์ ๊ณผ ๊ฐ์ด ๋ฒกํฐ์ ์ ์ ๋ ํํ์์ ์์ฑํ๋ ค๊ณ ํฉ๋๋ค.
์ ์ณ๋๊ณ , ์คํ
ํ์ ์๋ ์ ์์์์ ๊ฐ์ด 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์์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ ์ฅ.
์ด ์ค๋ ๋๋ ์ ๋จธ๋ฌ์ค ํ ์ด๋ฏธ์ง๊ฐ์๋ ๊ฒ์๋ฌผ์ ๋ํด ๊ธฐํ์ด ์ง๋ฌ์ต๋๋ค.
@Jutho ๋๋ ๋ด๊ฐ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํํ์ ์ด์ค ๊ณต๊ฐ์ ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ์ธ์ ํ์ง๋ง, Banach ๊ณต๊ฐ์ ํ์ ์ฌ์ฉํ์ฌ ์ด์ค ๊ณต๊ฐ์ ์ ์ํ๋ ์ ํ์ ๊ฐ์ํ ๋ ๋ด ์ค๋ช ์ด ์ด๋ป๊ฒ ์ํ์ธ์ง ์ ํ ์์ง ๋ชปํฉ๋๋ค. Banach ๊ณต๊ฐ ํ์์ฃผ์๋ ์ด์จ๋ ์ ํ ์ฐจ์ ๋ฒกํฐ ๊ณต๊ฐ์ ๋ํด ์ด๋ฏธ ๊ณผ์์ ๋๋ค.
์ํ์ ์ค์ ๋ก ์ฌ๋ฐ๋ฅธ ์ฉ์ด๊ฐ ์๋๋๋ค. ์ด ๋จ๋ฝ์์ ์ ๊ฐ ๋งํ๊ณ ์ํ๋ ๊ฒ์ ํญ๋ชฉ์ ํจ์จ์ ์ธ ํ๊ฐ์ ๊ดํ์ด ์ถ๋ก ์ ๋ค์ง์ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด ๊ณก์ ๋งค๋ ํด๋์ (๊ณต์ก) ๊ทธ๋๋์ธํธ์ ๊ฒฝ์ฐ ๊ทธ๋๋์ธํธ (์ฝ ๋ฒกํฐ) g_i
๋ ํจ์จ์ ์ผ๋ก ๊ณ์ฐํ ์ ์์ง๋ง x ^ i (์ญ ๋ฉํธ๋ฆญ ์ธ A ^ {i, j} ์ฌ์ฉ)์ ์ถ๊ฐ ๋ ํด๋น ๋ฒกํฐ A ^ {i, j} g_ {j}๋ ํจ์จ์ ์ด์ง ์์ ์ ์์ต๋๋ค. ๋ฐฉ๊ธ Github์ ๋ด ์ด์ ๋ฉ์์ง๊ฐ ์ผ๋ง๋ ์๋ชป ์ค๋ช
๋์ด ์๋์ง ํ์ธํ์ต๋๋ค. ์ด๋ฉ์ผ์ ์ผ์ ๋๋ ๊ด์ฐฎ ์์ต๋๋ค. ๋๋ ์ง๊ธ ๊ทธ๊ฒ์ ๊ณ ์น๋ ค๊ณ ๋
ธ๋ ฅํ๋ค. ๊ณ์ ๋ฐ๋ณตํ๊ณ ์ถ์ง ์์ผ๋ฉฐ, ํ์ฌ ์ ์์ ๋์ํ์ง ์๋ ๊ฒ์ฒ๋ผ (์๋ชป๋) ์ธ์์์ฃผ๊ณ ์ถ์ง๋ ์์ต๋๋ค. ๋ด๊ฐ ๋ง๋ค๋ ค๊ณ ํ๋ ์ ์ผํ ์์ .
AbstractVector
์ ํ์ ์ ํ์ด๋๊ฑฐ๋ AbstractVector
ํ์ ์ ํ ์ธ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์ ์ ํ ์ํ์ ํน์ฑ์ ๊ฐ๋ ๊ฒ์ ์๋๋๋ค. ๋ฒกํฐ ๊ทธ๋ฐ ์๋ฏธ์์ Matrix
๋ผ๋ ์ด๋ฆ์ด Vector
๋ผ๋ ์ด๋ฆ๋ณด๋ค ํจ์ฌ ๋ ์ข์ํฉ๋๋ค. ๋ฐ๋ผ์์ด ์ ์์ ์ผ๋ถ๋ก Covector
์ ํ์ด ๋์
๋๋ ๊ฒ์ด ๋ฌด์์ด๋ ๊ฐ์ AbstractVector
๋๋ AbstractArray
์ ํ์ ์ ํ์ด๋์ด์๋ ์๋๋ค๋ ์ฌ์ค์ ๋์ ํ ์ ์์ต๋๋ค. , V *๊ฐ ์์ฐ์ ์ผ๋ก V (์ ํ๋ฆฌ์ผ์ด์
์ ์ ๋ฐ์ ๊ตฌ์ฑํ๋ ๋ฐ์นด๋ฅดํธ ๊ณต๊ฐ)์ ๋ํ ์ธ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.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
์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ฌ๋ฌผ์ "์ ํ ๋์"์ธก๋ฉด์ ๋ฒกํฐ์ ์ฝ ๋ฒกํฐ๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ค์ํ ์ ํ์ผ๋ก ์ถ๊ฐ๋ก ํด์ ๋ ์ ์์ต๋๋ค.
"์ง์ง ๋ฒกํฐ๊ฐ์๋"์ธ๊ณ์์ ๋ณํฉ (์ค์นผ๋ผ, 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 ...)
์์ฝํ์๋ฉด, ์ฌ๊ธฐ์์ ๊ฑฐ์ ์์ ํ ๋ค๋ฅธ ๋ค ๊ฐ์ง ์ผ์ด ๋ฐ์ํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
Array
์ฌ๋ผ์ด์ฑ์ ๊ฐ์ ํฉ๋๋ค.transpose
, conj
๋ฑ์ ๋ํ ์ง์ฐ ํ๊ฐ๋ฅผ ๊ตฌํํฉ๋๋ค.์๋ง๋ ์ฒซ ๋ฒ์งธ ๋ง์ด ๋ธ๋ ์ดํน ์ฒด์ธ์ง์ผ๊น์? ๋๋จธ์ง๋ ํ์ฌ ๊ธฐ๋ฅ์ ๊ฐ์ ํ๊ฑฐ๋ ์ถ๊ฐํฉ๋๋ค. ๊ทธ๊ฒ๋ค์ ๋ชจ๋ ์ด๋ ์ ๋ ๋ ๋ฆฝ์ ์ผ๋ก ๊ตฌํ ๋ ์ ์์ผ๋ฉฐ ์๋ง๋ ๋ชจ๋ ํ ๊ฐ์น๊ฐ์์ ๊ฒ์ ๋๋ค. (์ถ์ : 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 ๋ ๋๋ถ๋ถ ๋ฐํฅํฉ๋๋ค. ํนํ
๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ ์ธ๋ถ ์ฌํญ์
๋๋ค. row(M,i)
๋ฐ col(M,i)
ํจ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํ์ ์ฝ ๋ฒกํฐ๋ก ์ถ์ถํ๋ ค๋ฉด M[i,:].'
๊ฐ ํ์ํ ๊น์? IIUC, M[i,:]'
๋์ด ๊ฒฝ์ฐ์ ์ํ์ง ์๋ conj
ํ ๊น์?
์, ์ ๊ฐ ๋ง์ง๋ง์ผ๋ก ์์ฑํ APL ์คํ์ผ ์ธ๋ฑ์ฑ์ ์ข์ ์ ์ ์ถฉ๋ถํ ์ธ์ํ์ง ๋ชปํ์ง๋ง ์ง๊ธ์ ๊ทธ ๋ณ๊ฒฝ์ ์ ์ ์ผ๋ก ์ง์ํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ์ฐจ๋ก๋ก ์ด์ค ๋ฒกํฐ๋ฅผ ๋์ฑ ๋งค๋ ฅ์ ์ผ๋ก ๋ง๋ค๊ณ row
/ col
ํจ์๋ฅผ ๋ง๋ญ๋๋ค.
๊ทธ ์ดํ๋ก ๋๋ ๊ตฌํ์ ๊ฐ์ง๊ณ ๋์ ๋ณด์๊ณ ๊ฐ์ฅ ํผ๋์ค๋ฌ์ด ๊ฒ์ ํ๋ ฌ์์ ์ถ์ถ ๋ covector๊ฐ ๊ณต์ก์ธ์ง ์๋์ง์์ต๋๋ค.
๋๋ ๋น์ ์ด ํ๋ ฌ์ ๋ฆฌํฐ๋ด ๊ฐ์ ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. Dirac ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ (๋ชจ๋ ) ํ๋ ฌ ํ์ฅ M = sum_i | i>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)
์ผ๋ก ์๋ ๋ณ๊ฒฝํ์ง ์๋ ํ.(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๋ก ์ด์ด์ง๋ ๊ฐ๋ฐ์ ๋ํ ํ๋ฅญํ ์ค๋ฌธ ์กฐ์ฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์์ธ ๊ท์น์ ๋ํ์ฃผ์๋ฅผ ๊ธฐ์ธ์ธ ๋ฌธํ์์ ์ฃผ๋ชฉํ ๋งํ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ํ "ํํ ๋จ์ผ ์น์ ์ถ๊ฐ ๊ฐ๋ฅ"๊ท์น์ด ์์ผ๋ฉด ์ฐ๋ฆฌ๋
์ผ์ชฝ์ ์ค์นผ๋ผ (ํธ๋ ์ด์ค ์ ์์ ๋ฐ๋ผ)์ด๊ณ ์ค๋ฅธ์ชฝ์ (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 ์ฐธ์กฐ)์ ๋ถ๋ฆฌํ๊ณ ํผํฉ ๋ ์ฅ์๋ฅผ ์ฐพ๋ ๊ฒ์ ๊ดํ ๊ฒ์์ด ๋ถ๋ช ํด์ก์ต๋๋ค.
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์ผ๋ก ์ ํ๋๋ ํ๋ ฌ์ด๋ผ๊ณ ์ฃผ์ฅ ํ ๊ฒ์ ๋๋ค.)์ด ๊ด์ ์์ ์ฐ๋ฆฌ๋ ๋ ๊ฐ์ง ๊ณต๋ฆฌ๋ฅผ ์ ๊ณต ํ ์ ์์ต๋๋ค. (์๋์์ ๋งค์ฐ ๊ณต์์ ์ผ๋ก ์ค๋ช ํ์ง ์์)
์์ ๋ด์ฉ์ ๋์ํ๋ฉด ๋ฒกํฐ์ ์ ์น๊ฐ ์์ ์ค๋ช ๋ ์ฝ ๋ฒกํฐ ์ ํ์ด์ด์ผํฉ๋๋ค. 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 ์ธ๋ฑ์ฑ์ ์ ํธํ๋ค๋ฉด (๊ทธ๋ฆฌ๊ณ ๋๋ ๊ทธ๊ฒ์ ์ข์ํฉ๋๋ค) ๊ทธ ์ธ๊ณ์ ์ฝ ๋ฒกํฐ๊ฐ ์ฌ๋ ์ธ๊ณ ์ฌ์ด์ ์ ์ ๊ทธ๋ฆด ์์น๊ฐ ๋ฌธ์ ๊ฐ๋ฉ๋๋ค. (๋๋ ๋์ ํํด์ํฌ ์ ์๊ธฐ๋ฅผ ๋ฐ๋ฌ๋๋ฐ, ์๋ง๋ ๋๋จธ์ง๋ ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ํฌ๊ธฐํด์ผํ๋ค๋ ๊ฒ์ ์ด๋ฏธ ๊นจ๋ฌ์์ ๊ฒ์
๋๊น?)
์ด ๊ฐ๋ฑ์ ๋น์ ์ด ๊ทธ๊ฒ์ ๋ํด ์๊ฐํ๋ค๋ฉด ๊ทธ๋ฆฌ ๋๋ผ์ด ์ผ์ด ์๋ ๊ฒ์ ๋๋ค.
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
์ํค๋ ๊ฒ์ด ์ ๋ง ์ด๋ ต๋ค๋ ๊ฒ์
๋๋ค.
๋ ๊ฐ์ง ๊ฐ๋ฅํ ์ต์ :
Transpose <: AbstractMatrix
CoVector <: Any
Factorization
๊ฐ์ฒด์ ๋ํ ์ผ์ข
์ ์ ์น.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๊ณผ ๋์ผํ ํํ ์ฑ๊ธ ํค ๊ท์น์ ๋ฐ๋ฅด๊ณ ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ๋ฐ๋ฅด์ง ์๋ ์์ ๋๋ค.
julia> (1:5)[5,1,1,1,1,1,1]
5
julia> (1:5)[5,:]
ERROR: BoundsError()
in getindex at abstractarray.jl:451
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
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
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
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
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> 1/[1.0,] #In MATLAB, interpreted as the inverse of a 1x1 matrix
ERROR: `/` has no method matching /(::Int64, ::Array{Float64,1})
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์ด ์ธ๊ธ ํ ๋ ๊ฐ์ง ๋ณ๊ฒฝ / ์ค๋ช ์์ง์งํ์ง๋ง ํ ๊ฐ์ง ๊ท์ ์ด ์์ต๋๋ค.
transpose
๋ ์ผ๋ฐ ํ
์๊ฐ ์๋ ๋ฒกํฐ ๋ฐ 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 ๋ฌธ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋์ ๋ณํ์ด ์ ํ๋๋ ์ํฉ์ด์์์ต๋๋ค.
์ ์ฒญ:
timesfast
๋ฐ๊พธ๊ณ ํ์ฌ ์ ์น ๋์์ ์ด๋ฆ์ transposefast
๋ฐ๊ฟ๋๋ค.(*)
๋ฐ 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 ๊ฐ์ ์ผํ๋ก๊ฐ๋ ๊ฒฝ๋ก์์ ์ค์ํ๊ธฐ ๋๋ฌธ์ ...
๊ทธ๋ฌ๋ ์ง์งํ๊ฒ. ๋๋ ํ ๋ก ์ ์์ ํ ์ฝ์ผ๋ ค๊ณ ๋ ธ๋ ฅํ์ง๋ง ์ด๊ฒ์ด ์ด์ ์ ์ ์๋์ง ์์๋ค๋ ๊ฒ์ ๋ณด์ฅ ํ ์ ์์ต๋๋ค.
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[1,:]
๊ฐ ์ฝ ๋ฒกํฐ๋ฅผ ๋ฐํํ๋๋ก ํ ์ ์์ง๋ง ์ ์ผ๋ฐํ๋์ง ์๊ณ ์ฌ๋ผ์ด์ค์์ ๋น AbstractArray๋ฅผ ๋ฐํํ๋ ๊ฒ์ ์๋นํ ์ด์ ํ ๊ฒ์
๋๋ค. ์ฌ๋๋ค์ด # 13612๋ฅผ ์๋ํด๋ณด๊ณ ํน๋ณํ ๋ฒกํฐ์ ์ผค๋ ์ ์น๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ๋ฅผ ์ฐพ์ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์
๋๋ค. ํ์ฌ ๋ฒกํฐ ์ ์น ์๋ฏธ๋ก ์์๋ ๋๊ฐ์ด ๋์๊ณ Covector๋ฅผ ๋
ธ์ถ ํ ํ์๊ฐ ์์ต๋๋ค.Ax_mul_Bx
์ ๋ํ ํน์ ๊ตฌ๋ฌธ ๋ถ์ ๋์ ์ง์ dispatch๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํฐ ์น๋ฆฌ์
๋๋ค. BLAS์ API๋ก ๋งค์ฐ ์ ๊ตฌ์ฑ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์ฅ ์์ชฝ ์์ค์์ ํ์ฉ์ ์ํ๋ฏ๋ก์ด ์ ๋ณด๋ฅผ ์ธ์์ ํจ๊ป ์ ์งํ๋ ๊ฒ์ด ํจ์ฌ ๋ ํฉ๋ฆฌ์ ์
๋๋ค. BLAS ํธ์ถ์ ๊ฒฝ์ฐ ๊ฐ๋จํ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ์น ๋ฌธ์ ( ntc
)๋ฅผ ์กฐํ ํ ์ ์์ต๋๋ค.v'v
๊ฐ ์ค์นผ๋ผ๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ๋ฒกํฐ์ ์ฝ ๋ฒกํฐ ๊ฐ์ ๊ณฑ์
์ ์ด์ ์ฐ๊ด์ฑ์ด ์์ต๋๋ค. ์ด์ v'v*v
๋ฅผ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํ๊ฐํ๊ณ ํ๋ ฌ ํ์ฑ์ ํผํ ์ ์์ต๋๋ค.T
๋ฐ C
๋ฅผ) ์ ํํ๊ฑฐ๋ ์บก์ฒํ๋ ค๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์์ต๋๋ค. ์ ์ํด์ผ ํ ์๋ฆฌ ํ์ ์ ์ ํ ๋ณ์์ ์ ์ธก๋ฉด์์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ๋ ๋์์ง ํ์คํ์ง ์์ง๋ง ์ ์ด๋ AbstractArray{T}
์ ์ผ์นํฉ๋๋ค.*
๋ํ ๋ฉ์๋ ํ
์ด๋ธ์ ์ฝ๋ ๊ฒ์ ::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
๋ฑ).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'
๋ ๋๋ฌด ๋๋ฆฌ ํผ์ ธ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.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
๋ก ๊ตฌ์ฑ ์์ ์ดํ์ ํ์์์ ์๋ฏธํฉ๋๋ค. ๊ตํ๋ฉ๋๋ค. ๋ง์ฝ ์๋ค๋ฉด, ๋๋ ์ด๊ฒ์ ๋งํฌ ๋ ํ
์ด๋ธ์ ๋ ๋ฒ์งธ์์ ๋ง์ง๋ง ํ๊ณผ ๊ฐ์ด ๋ถ์์ ํ ๋ด๋ถ ๊ณฑ์ผ๋ก ํด์ ํ ์ ์์ต๋๋ค.
๊ทํ์ ์์ฝ์ ๊น๊ณ ์ค๋๋ ฅ์ด ์์ต๋๋ค.
์ ์ค๋ช
ํด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
๋จ์ ์ง๋ฌธ์ ๋ ๊ฐ์ง์ ๋๋ค.
v*mx
์ matmul
v*mx
์ ๊ตฌํ ํ ์ด์ ๋ ๋ฌด์์
๋๊น?์ด ๋ฌธ์ ๋ก ์ธํด ๋ ธ์ถ๋๋ ๋ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
A. ์์ฉ ์ํ์๋ค์ ๋ค์๊ณผ ๊ฐ์ ๋ ๊ฐ์ง ์์ฐ์ ์ธ ๋ ํ์ฌ์์ ์๋ฌต์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฐ์ ์ฉ ํ๊ธฐ๋ฒ์ ๊ฒฐํฉ๋ฉ๋๋ค.
๋ฌธ์ ๋ ์ด๋ฌํ ๋ํ์ด 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))
u โ v = columnify(u)*columnify(v)'
A(u, v) = scalarize(columnify(u)'*A*columnify(v))
, ์ ์ ํ ํ์์ ๋ํ ์ค๋๋ ํ๊ธฐ๋ฒ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
๋ชฉํ๊ฐ ์์ ์ ๋ํ์ ์์กดํ์ง ์๊ณ ๋ฒกํฐ ์ฐ์ฐ๊ณผ ๋ ์ถ์์ ์ธ ์ ํ์์ ํ๋ ฌ ์ฐ์ฐ์ ๋ช ํํ๊ฒ ๋ถ๋ฆฌํ๋ ๊ฒ์ด๋ผ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ์คํจํ๋ค๊ณ ์๊ฐํฉ๋๋ค (๋ค์ ์ํ์ ์ ์์ ๋ํ ๋ณดํธ์ ์ธ ํฉ์์ ๋ํด ํ์ ํ ์ ์์ต๋๋ค).
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์ ์ผ๋ฐ ๋ฐฐ์ด์ ํ ์๋ฅผ ๋ํ๋ด๋ ๋ฐ ์ถฉ๋ถํฉ๋๋ค. ๋ฐ๋ผ์ ์ ์ด๋ ์ค์์ ๊ฒฝ์ฐ ๋ค์ ๋ ์ฐ์ฐ์ ํตํด ์์ ํ๊ณ ์ผ๊ด๋ ํ ์ ๋์๋ฅผ ๊ตฌ์ฑ ํ ์ ์์ต๋๋ค.
โ
, ๋ค์ ๊ท์น์ ์ฌ์ฉํ์ฌ N
์์์ ์์ ๋ฐฐ์ด๋ก ์ผ๋ฐํ ํ ์ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋ฐฐ์ด์ ๋ง์ง๋ง ์ธ๋ฑ์ค๋ฅผ ๋ ๋ฒ์งธ ์ธ๋ฑ์ค (๋๋ numpy์ dot
๊ท์น, ๋น๋ก ๋ ์ง๊ด์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค), A
๋ฐ B
์ ์์๊ฐ M
๊ฒฝ์ฐ A
A โ B
๋ ์์ ๋ฐฐ์ด M+N-2
๋ฐํํฉ๋๋ค. M
๋ฐ ์์ N
.โ
: 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
? ๊ธฐํ? )์ด ์ ํ์ ์ ํ ๋์์์ ์ฝ ๋ฒกํฐ ์ญํ ์ํฉ๋๋ค.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
๋ฅผ ๋ฐ๋ก ์๋์ ์ฐ์ ์์๊ฐ์๋ ์ค์ ์ฐ์ฐ์๋ก ๊ตฌ๋ฌธ ๋ถ์ ๊ณฑ์
. ์ฆ, ๋ค์๊ณผ ๊ฐ์ ๋์์ด ๋ฐ์ํฉ๋๋ค.
v'
๋ ํ ํ๋ ฌ (ctranspose)์
๋๋ค.v'v
๋ ์ค์นผ๋ผ (๋ด์ )์
๋๋ค.v'*v
๋ ์์๋ฅผ 1 ๊ฐ ๊ฐ์ง ๋ฒกํฐ (ํ ํ๋ ฌ * ๋ฒกํฐ)์
๋๋ค.v*v'
๋ ์ธ์ ํ๋ ฌ (๋ฒกํฐ * ํ ํ๋ ฌ)์
๋๋ค.v'A
๋ ํ ํ๋ ฌ ( "vecmat")์
๋๋ค.v'*A
๋ ํ ํ๋ ฌ (matmat)์
๋๋ค.v'A*v
๋ ์ค์นผ๋ผ์
๋๋ค (matvec A * v ๋ค์์ ๋ด์ )(v'A)*v
๋ ์์๋ฅผ 1 ๊ฐ ๊ฐ์ง ๋ฒกํฐ์
๋๋ค (vecmat ๋ค์์ matvec).v'*A*v
๋ ์์๋ฅผ 1 ๊ฐ ๊ฐ์ง ๋ฒกํฐ์
๋๋ค (matmat ๋ค์์ matvec).v''
๋ ์ด ํ๋ ฌ (๋ฒกํฐ ctranspose, ๋ค์ ํ๋ ฌ ctranspose)์
๋๋ค.ํ์ฌ ์ค์ ์์ 2์ 3์ ๋์ผํ๊ณ 7, 8 ๋ฐ 9๋ ๋์ผํ๋ฏ๋ก์ด ๋ณ๊ฒฝ ์ฌํญ์ด ์ค๋จ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ฒฐ์ ์ ์ผ๋ก, ๊ตต์ ํญ๋ชฉ์ ์ ์ฌํ ํํ ์ค ๊ฐ์ฅ ์งง๊ณ ๊ฐ์ฅ ํธ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ฌ๋๋ค์ด ์ผ๋ฐ์ ์ผ๋ก ๋๋ฌ ํ ์์๋ ํญ๋ชฉ์ด๋ฉฐ ๋ชจ๋ ์ฐ๋ฆฌ๊ฐ ์ํ๋๋๋ก ์ํํฉ๋๋ค. ์๋ก์ด ์ ํ์ด ์์ผ๋ฉฐ ํ๋์ ์๋ก์ด ์ค์ ์ฐ์ฐ์ ๋ง ์์ต๋๋ค. ๊ฐ์ฅ ํฐ ๋จ์ ์ 10 โ v''
๋ ์ฌ์ ํ ์ด ํ๋ ฌ์
๋๋ค. ์๋ง๋ ์ด๊ฒ์ ์ ๋ฏธ์ฌ ''
๊ฐ ๋ฒกํฐ๋ฅผ ์ด ํ๋ ฌ๋ก ๋ฐ๊พธ๋ ์ฐ์ฐ์์ด๊ธฐ ๋๋ฌธ์ ์ด์ ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค.
ํ ๊ฑธ์ ๋ฌผ๋ฌ์์ ์ฐ๋ฆฌ๊ฐ ๋ฐฐ์ด ๊ฒ์ ์ถ๊ฐ์ ์ธ ์ ๋ค์ด ๋๋ ์ฐจ์ ๋ ์ด๋ธ๋ง ๊ธฐ๋ฅ์ด ์๊ฑฐ๋ 2 ์ฐจ์ ์ดํ๋ฅผ Matlab์ฒ๋ผ ๋์ฒด ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ์ทจ๊ธํ์ง ์์ผ๋ฉด ๋ค์ฐจ์ ๋ฐฐ์ด์ด ์ค์ ๋ก ์ ํ ๋์๋ก ์ํํ๊ฒ ๋๋ธํ ์ผ๋๋๋ก ๋ง๋ค ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ์๊ฒ ๋จ์ ๊ฒ์ ํธ๋ฆฌํจ์ ๋ฌธ์ ์ ๋๋ค. ์ฌ๋๋ค์ด ๋ฐฐ์ด์ ์ง๋์น๊ฒ ๋ณต์กํ๊ฒ ๋ง๋ค์ง ์๊ณ ๋ ๋ฒกํฐ์ ํ๋ ฌ์ ๋ํ ์ผ๋ฐ์ ์ธ ์ ํ ๋์ ์ฐ์ฐ์ ํธ๋ฆฌํ๊ฒ ํํํ ์ ์๋๋ก ํ ์ ์์๊น์? ์ ๋์ด ์ ๊ทผ ๋ฐฉ์์ ๋ํด ์ ์งํ์ง ์์์ง๋ง ๋ฐฐ์ด ์ ํ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋๋ฌด ๋ง์ด ๋ง๊ฐ ๋จ๋ฆฌ์ง ์๊ณ ๊ตฌ๋ฌธ์์ ํธ์๋ฅผ ํด๊ฒฐํ๋์ด ์ ๊ทผ ๋ฐฉ์๊ณผ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ง์งํ๊ฒ ๊ณ ๋ คํด์ผํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ์ค์ a'b
ํน๋ณํ ( *
๋ฐ๋ก ์๋) ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ v'
๊ฐ ์ผค๋ ๋ฒกํฐ๋ฅผ ๋ฐํํ๋๋กํ๋ ๊ฒ์
๋๋ค. ๋ ์ผ๋ฐ์ ์ผ๋ก ์ ๋ฏธ์ฌ A'
๋ ๋ฐฐ์ด์ ๊ฒฐํฉํ๊ณ ๊ทธ ์ฐจ์์ ๋๋ฆฌ๊ฒ ๋ฐ์ ํ ์์๋ ๋ฐ๋ฉด A.'
๋ ๋ฐฐ์ด์ ์ฐจ์์ ๋๋ฆฌ๊ฒ ๋ฐ์ ํ์ฌ ๋ฒกํฐ์ ID ์ญํ ์ํฉ๋๋ค. ์ด ์ฒด๊ณ์์ ์์ฑ ๋ชฉ๋ก์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
v'
๋ ๋ฒกํฐ (๊ณต์ก)์
๋๋ค.v'v
๋ ์ค์นผ๋ผ (๋ด์ )์
๋๋ค.v'*v
(์ถ์ฒ ์ค๋ฅ๊ฐ v'v
๋ด์ ๊ณผ outer(v,v)
์ธ์ธก ์ ํ) โ v*v'
(์ถ์ฒ ์ค๋ฅ๊ฐ v'v
๋ด์ ๊ณผ outer(v,v)
์ธ์ธก ์ ํ) โ v'A
๋ ๋ฒกํฐ (vecmat)์
๋๋ค.v'*A
์ ์ค๋ฅ์
๋๋ค (vecmat์ ๊ฒฝ์ฐ v'A
๊ถ์ฅ).v'A*v
๋ ์ค์นผ๋ผ์
๋๋ค (matvec A * v ๋ค์์ ๋ด์ )(v'A)*v
(์ถ์ฒ ์ค๋ฅ๊ฐ v'v
๋ด์ ๊ณผ outer(v,v)
์ธ์ธก ์ ํ) โ v'A'v
๋ ์ค์นผ๋ผ์
๋๋ค ( v'(A'v)
โ matvec ์ผค๋ ์ ๋ด๋ถ ๊ณฑ)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
+ ํ๋ ฌ ์ ์น ๋ฐ ๋ฐฐ์ด ํ์ฉ์ ๋ํ ๋ทฐ๋ฅผ ํตํด ๋ค์์ ์ป์ ์ ์์ต๋๋ค.
v'' === v
v1'v2
์ ๊ฐ์ Stefan์ ๋ชฉ๋ก์์๋ ๊ฒ ์ค ์ผ๋ถ๋ ๋ด์ ์
๋๋ค.size(v')
์ ๊ฒฐ๊ณผ๋ ๋ณ๊ฒฝ๋์ง ์์์ง๋ง v''
๋ 1 ์ฐจ์์ผ๋ก ์์ต๋๋ค.*
๋ฐ A_mul_B!
๋ง ์ ํธํ๋ ๋ชจ๋ Ac_mul_Bc
ํจ์ ์ ๊ฑฐ (๋ฐ ์ ์ฌํ๊ฒ \
, /
).์ด ๋ชจ๋ ๊ฒ์ Array
์ ์งํ๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋๋ฌด ๋ง์ ๋
ธ๋ ฅ์ ๊ธฐ์ธ์ด์ง ์์ ๊ฒ์
๋๋ค (์ ์๊ฒ ๋ฌธ์ ๋์ด์๊ธฐ์ ์๊ฐ์ ์ฐพ๊ณ ์ ํ ๋์ ๋ชจ์์์๋ ๋ค๋ฅธ ๋ชจ๋ ์ ํ์ ์ถ์ ํ๋ ๊ฒ์
๋๋ค). ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง ์์ ์ ์๋์ ํ์จ์ด ๋ ๊ฒ์
๋๋ค.
๋ฐ๋๋ก IMHO ์ด๋ฌํ ๊ท์น์ ๊ตฌ๋ฌธ ๋ถ์์ด ์ฝ๊ฐ ๋ณต์กํด ๋ณด์ด๋ฉฐ '
๋ก *
'
๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ด ์ฝ๊ฐ ํผ๋ ์ค๋ฝ๊ฑฐ๋ ๋๋ผ ์ธ ์ ์์ต๋๋ค (3, 4, 6 ๋ฐ 8์ RowVector
).
๊ทธ๋ฆฌ๊ณ ์, ์ ์ฌ์ ์ธ ๋ฒ๊ทธ๋ฅผ ๊ฐ์กฐํ๊ธฐ ์ํด v.'
๋๋ ๋ฌด์ธ๊ฐ๋ฅผ ํ๊ธฐํด์ผํฉ๋๋ค.์ด ์์ ์์ v.'
๋ฅผ ๋๋ฝ ๋ ๋ฉ์๋ ์ค๋ฅ๋ก ๋ง๋๋ ๊ฒ์ด ๊ฑฐ์ ๋ซ์ต๋๋ค (๋จ์ํ ํ์ ์ง์ํ์ง ์์ ๊ฒ์
๋๋ค) / ์ด์ค ๋ฒกํฐ, ๊ทธ๋ฌ๋ ์ํ๋ ๊ฒฝ์ฐ ํจํค์ง๋ฅผ ์ค์งํ์ง ์์ต๋๋ค)
BAM
์ฐ์.
์ด๊ฒ์ด ์ฐ๋ฆฌ์ ๊ฐ์ฅ ๊ธด ์ด์ ์ค๋ ๋์์ต๋๊น?
์๋์, # 11004์๋ ๋ ์์ต๋๋ค.
์ฃ์กํฉ๋๋ค. ๋น์ ๋ง์ด ๋ง์์, ์ ๊ฐ ๊ณต๊ฐ ์ด์ ์ค๋ ๋๋ฅผ ์ง์ ํ์ด์ผ ํ์ด์.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
BAM