Julia: ํ–‰๋ ฌ ์ „์น˜๋ฅผ ์ง„์ง€ํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด ๊ธฐ

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

ํ˜„์žฌ transpose ์€ ์žฌ๊ท€ ์ ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งค์šฐ ์ง๊ด€์ ์ด์ง€ ์•Š์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ๋ถˆํ–‰์œผ๋กœ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

julia> A = [randstring(3) for i=1:3, j=1:4]
3ร—4 Array{String,2}:
 "J00"  "oaT"  "JGS"  "Gjs"
 "Ad9"  "vkM"  "QAF"  "UBF"
 "RSa"  "znD"  "WxF"  "0kV"

julia> A.'
ERROR: MethodError: no method matching transpose(::String)
Closest candidates are:
  transpose(::BitArray{2}) at linalg/bitarray.jl:265
  transpose(::Number) at number.jl:100
  transpose(::RowVector{T,CV} where CV<:(ConjArray{T,1,V} where V<:(AbstractArray{T,1} where T) where T) where T) at linalg/rowvector.jl:80
  ...
Stacktrace:
 [1] transpose_f!(::Base.#transpose, ::Array{String,2}, ::Array{String,2}) at ./linalg/transpose.jl:54
 [2] transpose(::Array{String,2}) at ./linalg/transpose.jl:121

ํ•œ๋™์•ˆ ์šฐ๋ฆฌ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋Œ€์‹  permutedims(A, (2,1)) ๋ฅผํ•˜๋ผ๊ณ  ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ ๋ชจ๋‘๋Š” ๊ทธ๊ฒŒ ๋”์ฐํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ์—ฌ๊ธฐ๊นŒ์ง€ ์™”์–ด? ์ž, ํ–‰๋ ฌ ํ–‰๋ ฌ์˜ ctranspose ๋˜๋Š” "adjoint"๊ฐ€ ์žฌ๊ท€ ์ ์ด๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ฝค ์ž˜ ์ดํ•ด๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋™๊ธฐ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ์˜ˆ๋Š” 2x2 ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์†Œ์ˆ˜ ๋ฅผ

๊ทธ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ctranspose ์€ ์žฌ๊ท€ ์ ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  2. ctranspose == conj โˆ˜ transpose == conj โˆ˜ transpose
  3. transpose ๋„ ์žฌ๊ท€ ์ ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

  • ์ด๋ฆ„์ด ๊ฑฐ์˜ ํ”ผํ•  ์ˆ˜์—†๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด ๊ธดํ•˜์ง€๋งŒ, ctranspose == conj โˆ˜ transpose == conj โˆ˜ transpose ์ด ์žˆ์–ด์•ผ ํ•  ์ด์œ ๋Š” ์—†์Šต๋‹ˆ๋‹ค.
  • ๋ฐฐ์—ด์—์„œ ์š”์†Œ๋ณ„๋กœ ์ž‘๋™ํ•˜๋Š” conj ๋™์ž‘์€ Matlab์˜ ์œ ๊ฐ์Šค๋Ÿฌ์šด ์ž‘์—…์ด๋ฉฐ ์‹ค์ œ๋กœ๋Š” ์ˆ˜ํ•™์ ์œผ๋กœ ์ •๋‹นํ•œ ์—ฐ์‚ฐ์ด ์•„๋‹™๋‹ˆ๋‹ค. exp ์š”์†Œ ๋ณ„ ์ž‘๋™์€ ์‹ค์ œ๋กœ ์ˆ˜ํ•™์ ์œผ๋กœ ๊ฑด์ „ํ•˜์ง€ ์•Š๊ณ  expm ๊ฐ€ ๋” ๋‚˜์€ ์ •์˜ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ์‹ค์ œ๋กœ ctranspose ์ด ์žฌ๊ท€ ์ ์ด์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•˜๋Š” ๊ฐ ์š”์†Œ์˜ ์ผค๋ ˆ (์ฆ‰, ์ธ์ ‘)๋ฅผ ์ทจํ•ฉ๋‹ˆ๋‹ค. ํ™œ์šฉ์ด ์—†์œผ๋ฉด ์กฐ์˜ฎ๊น€์ด ์žฌ๊ท€์ ์ผ ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ƒํ™ฉ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ณ€๊ฒฝ์„ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค.

  1. ctranspose (์ผ๋ช… ' )์˜ ์ด๋ฆ„์„ adjoint ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.์ด ์ž‘์—…์ด ์‹ค์ œ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์ด๋ฉฐ conj โˆ˜ transpose ์™€ ๋™์ผํ•ด์•ผํ•œ๋‹ค๋Š” ์˜๋ฏธ์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  2. conj.(A) ๋Œ€์‹  ๋ฐฐ์—ด์—์„œ ๋ฒกํ„ฐํ™” ๋œ conj(A) ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  3. recur::Bool=true ํ‚ค์›Œ๋“œ ์ธ์ˆ˜๋ฅผ adjoint (nรฉe ctranspose )์— ์ถ”๊ฐ€ํ•˜์—ฌ ์ž์‹ ์„ ์žฌ๊ท€ ์ ์œผ๋กœ ํ˜ธ์ถœํ•ด์•ผํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.
  4. ์ž์‹ ์„ ์žฌ๊ท€ ์ ์œผ๋กœ ํ˜ธ์ถœํ•ด์•ผํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” recur::Bool=false ํ‚ค์›Œ๋“œ ์ธ์ˆ˜๋ฅผ transpose ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ตœ์†Œํ•œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

julia> A.'
4ร—3 Array{String,2}:
 "J00"  "Ad9"  "RSa"
 "oaT"  "vkM"  "znD"
 "JGS"  "QAF"  "WxF"
 "Gjs"  "UBF"  "0kV"

A' ๋” ์ค„์ผ ์ˆ˜ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” conj ๋ฐ adjoint ์˜ ๋น„ ์ˆซ์ž (๋˜๋Š” ๋” ๊ตฌ์ฒด์ ์œผ๋กœ๋Š” ๋น„ ์‹ค์ œ, ๋น„ -๋ณต์žกํ•œ ๊ฐ’).

[์ด๋ฒˆ ํ˜ธ๋Š” ฯ‰โ‚ ํŽธ ์‹œ๋ฆฌ์ฆˆ์˜ ๋‘ ๋ฒˆ์งธ์ž…๋‹ˆ๋‹ค.]

breaking decision linear algebra

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

(OT : ์ €๋Š” ์ด๋ฏธ ์„ฑ๊ณตํ•œ 6 ๋ถ€์ž‘ ๋ฏธ๋‹ˆ ์‹œ๋ฆฌ์ฆˆ์˜ ๋‹ค์Œ ํŽธ์ธ "7- ํ…์„œ ์ง„์ง€ํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด ๊ธฐ"๋ฅผ ๊ณ ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ...)

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

์ด์ „ ํ˜ธ์˜ ๋…ผ๋ฆฌ์  ํ›„๊ณ„์ž ... ๐Ÿ‘

๋ฐฐ์—ด์—์„œ ์š”์†Œ ๋‹จ์œ„๋กœ ์ž‘๋™ํ•˜๋Š” conj์˜ ๋™์ž‘์€ Matlab์˜ ๋ถˆํ–‰ํ•œ ๋ณด๋ฅ˜์ด๋ฉฐ ์‹ค์ œ๋กœ ์ˆ˜ํ•™์ ์œผ๋กœ ์ •๋‹นํ•œ ์ž‘์—…์ด ์•„๋‹™๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ „ํ˜€ ์‚ฌ์‹ค์ด ์•„๋‹ˆ๋ฉฐ exp ์™€ ์ „ํ˜€ ์œ ์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณต์žกํ•œ ๋ฒกํ„ฐ ๊ณต๊ฐ„๊ณผ ๊ทธ ํ™œ์šฉ์€ ์™„๋ฒฝํ•˜๊ฒŒ ํ™•๋ฆฝ ๋œ ์ˆ˜ํ•™์  ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. https://github.com/JuliaLang/julia/pull/19996#issuecomment -272312876๋„

๋ณต์žกํ•œ ๋ฒกํ„ฐ ๊ณต๊ฐ„๊ณผ ๊ทธ ํ™œ์šฉ์€ ์™„๋ฒฝํ•˜๊ฒŒ ํ™•๋ฆฝ ๋œ ์ˆ˜ํ•™์  ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์ฐฉ๊ฐํ•˜์ง€ ์•Š๋Š” ํ•œ, ๊ทธ ๋งฅ๋ฝ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ์ˆ˜ํ•™์  ํ™œ์šฉ ์—ฐ์‚ฐ์€ ctranspose ์•„๋‹ˆ๋ผ conj (์ •ํ™•ํžˆ ๋‚ด ์š”์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค).

julia> v = rand(3) + rand(3)*im
3-element Array{Complex{Float64},1}:
 0.0647959+0.289528im
  0.420534+0.338313im
  0.690841+0.150667im

julia> v'v
0.879291582684847 + 0.0im

julia> conj(v)*v
ERROR: DimensionMismatch("Cannot multiply two vectors")
Stacktrace:
 [1] *(::Array{Complex{Float64},1}, ::Array{Complex{Float64},1}) at ./linalg/rowvector.jl:180

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

์–ด์จŒ๋“  1.0์—์„œ ํ‚ค์›Œ๋“œ ์‹ค์  ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

@StefanKarpinski , ๋‹น์‹ ์€ ์ฐฉ๊ฐ์ž…๋‹ˆ๋‹ค. adjoint์—†์ด ๋ฒกํ„ฐ ๊ณต๊ฐ„์—์„œ ๋ณต์žกํ•œ conjugation์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. adjoint๋Š” ๋ณต์žกํ•œ ๋ฒกํ„ฐ ๊ณต๊ฐ„์ด ์•„๋‹Œ ํž๋ฒ ๋ฅดํŠธ ๊ณต๊ฐ„ ๋“ฑ์„ ํ•„์š”๋กœํ•˜๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ Hilbert ๊ณต๊ฐ„์ด ์žˆ๋”๋ผ๋„ ๋ณตํ•ฉ ์ผค๋ ˆ๋Š” ์ธ์ ‘๊ณผ ๊ตฌ๋ณ„๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด โ„‚โฟ์—์žˆ๋Š” ๋ณต์†Œ ์—ด ๋ฒกํ„ฐ์˜ ์ผค๋ ˆ๋Š” ๋˜ ๋‹ค๋ฅธ ๋ณต์†Œ ๋ฒกํ„ฐ์ด์ง€๋งŒ adjoint๋Š” ์„ ํ˜• ์—ฐ์‚ฐ์ž ( "ํ–‰ ๋ฒกํ„ฐ")์ž…๋‹ˆ๋‹ค.

(๋ณต์žกํ•œ ํ™œ์šฉ์€ conj(v)*v ๊ณฑํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค !)

๋ฒกํ„ฐํ™” ๋œ conj ์ค‘๋‹จ์€ ๋‚˜๋จธ์ง€ ์ œ์•ˆ๊ณผ ๋ฌด๊ด€ํ•ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ ๊ณต๊ฐ„์—์„œ ๋ณต์žกํ•œ ์ผค๋ ˆ์˜ ์ •์˜์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ฐธ์กฐ๋ฅผ ์ œ๊ณต ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

https://en.wikipedia.org/wiki/Complexification#Complex_conjugation

(์ด ์น˜๋ฃŒ๋ฒ•์€ ๋‹ค์†Œ ๊ณต์‹์ ์ด์ง€๋งŒ "๋ณตํ•ฉ ์ผค๋ ˆ ํ–‰๋ ฌ"๋˜๋Š” "๋ณตํ•ฉ ์ผค๋ ˆ ๋ฒกํ„ฐ"๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด ์ˆ˜๋งŽ์€ ์šฉ๋„๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

๋ณตํ•ฉ ๋ฒกํ„ฐ๋ฅผ ์ผค๋ ˆ ๋ฒกํ„ฐ์— ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์ด (์ง€๊ธˆ conj ๊ฐ€ํ•˜๋Š” ์ผ) ์ผค๋ ˆ ์ฝ” ๋ฒกํ„ฐ ( ' ๊ฐ€ํ•˜๋Š” ์ผ)์™€ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ์ž‘์—…์ด๋ผ๋ฉด ํ™•์‹คํžˆ conj ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค conj ์™€ adjoint ๋Š” ์Šค์นผ๋ผ์—์„œ๋Š” ๋™์˜ํ•˜์ง€๋งŒ ๋ฐฐ์—ด์—์„œ๋Š” ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ๋ณ„๋ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ conj(A) conj ๋Š” ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด adjoint ํ˜ธ์ถœํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ๋ณต์†Œ์ˆ˜๋ฅผ 2x2 ํ–‰๋ ฌ ์˜ˆ์ œ๋กœ ํ‘œํ˜„ํ•˜๋ฉด conj(A) ๋Š” conj ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์‹  ์‹ค์ œ๋กœ ๊ฐ ์š”์†Œ์—์„œ adjoint ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•จ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด adjoint , conj ๋ฐ conj. ๋ชจ๋“  ๋‹ค๋ฅธ ์ž‘์—…์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

  1. adjoint : i ๋ฐ j ์ธ๋ฑ์Šค๋ฅผ ๊ต์ฒดํ•˜๊ณ  ์š”์†Œ์— ๋Œ€ํ•ด adjoint ์„ ์žฌ๊ท€ ์ ์œผ๋กœ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.
  2. conj : ์š”์†Œ ์œ„์— adjoint ๋งคํ•‘.
  3. conj. : ์š”์†Œ ์œ„์— conj ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.

conj(A) ๋Š” ๊ฐ ์š”์†Œ์—์„œ conj ๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. 2x2 ํ–‰๋ ฌ๋กœ ๋ณต์†Œ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ ๋ณต์žกํ•œ ๋ฒกํ„ฐ ๊ณต๊ฐ„์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฒกํ„ฐ ์ ‘ํ•ฉ์˜ ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์€ ์‹ค์ˆ˜ ํ–‰๋ ฌ์˜ ๊ณ ์œ  ๊ฐ’ ๋ถ„์„์— ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ ์œ  ๊ฐ’ ๊ณผ ๊ณ ์œ  ๋ฒกํ„ฐ ๋Š” ๋ณต์†Œ ์ ‘ํ•ฉ ์Œ์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ์ด์ œ 2 ์ฐจ์› ๋ฐฐ์—ด๋กœ ํ‘œํ˜„๋˜๋Š” ๋ธ”๋ก ํ–‰๋ ฌ์ด A ์ด๊ณ , 2 ์„ฑ๋ถ„ ๋ฒกํ„ฐ์˜ 1 ์ฐจ์› ๋ฐฐ์—ด๋กœ ํ‘œํ˜„๋˜๋Š” ์ฐจ๋‹จ ๋ฒกํ„ฐ v ์— ์ž‘์šฉํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. ์— ๋Œ€ํ•œ ๊ณ ์œ  ฮป ์˜ A ๊ณ ์œ  ๋ฒกํ„ฐ์™€ v , ์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๋‘ ๋ฒˆ์งธ ๊ณ ์œ ์น˜ conj(ฮป) ๊ณ ์œ  ๋ฒกํ„ฐ์™€ conj(v) . conj adjoint ์žฌ๊ท€ ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๋ฉด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

(ํ–‰๋ ฌ์˜ ๊ฒฝ์šฐ์—๋„ adjoint๋Š” conjugate-transpose์™€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ •์˜ ๋œ ์„ ํ˜• ์—ฐ์‚ฐ์ž ์˜ Matrix ๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฃผ์–ด์ง„ ํ‘œ์ค€ ๋‚ด๋ถ€ ๊ณฑ์— ํ•ด๋‹นํ•˜๋Š” adjoint๋ฅผ ์ทจํ•ด์•ผํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. dot(::Vector,::Vector) . ๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ถ€ AbstractMatrix (๋˜๋Š” ๊ธฐํƒ€ ์„ ํ˜• ์—ฐ์‚ฐ์ž) ์œ ํ˜•์ด adjoint ๋ฅผ ์žฌ์ • ์˜ํ•˜์—ฌ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.)

๋”ฐ๋ผ์„œ 3d ๋ฐฐ์—ด์„ ์„ ํ˜• ์—ฐ์‚ฐ์ž๋กœ ์ •์˜ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€์ˆ˜์ ์œผ๋กœ ํ•ฉ๋ฆฌ์ ์ธ adjoint(A) ๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐ ์–ด๋ ค์›€์ด ์žˆ์Šต๋‹ˆ๋‹ค (์˜ˆ : ๋‚ด์žฅ ๋œ array3d * array2d ์—ฐ์‚ฐ์ด ์—†์Œ). . adjoint ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์Šค์นผ๋ผ, 1d ๋ฐ 2d ๋ฐฐ์—ด์—๋งŒ ์ •์˜๋˜์–ด์•ผํ•ฉ๋‹ˆ๊นŒ?

์—…๋ฐ์ดํŠธ : ์˜ค, ์ข‹์•„์š” : 3D ๋ฐฐ์—ด์— ๋Œ€ํ•ด์„œ๋„ ctranspose ์ •์˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ณ„์†ํ•ด.

(OT : ์ €๋Š” ์ด๋ฏธ ์„ฑ๊ณตํ•œ 6 ๋ถ€์ž‘ ๋ฏธ๋‹ˆ ์‹œ๋ฆฌ์ฆˆ์˜ ๋‹ค์Œ ํŽธ์ธ "7- ํ…์„œ ์ง„์ง€ํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด ๊ธฐ"๋ฅผ ๊ณ ๋Œ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค ...)

2x2 ํ–‰๋ ฌ๋กœ ๋ณต์†Œ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ ๋ณต์žกํ•œ ๋ฒกํ„ฐ ๊ณต๊ฐ„์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋”ฐ๋ฅด์ง€ ์•Š๋Š”๋‹ค โ€“ ๋ณต์†Œ์ˆ˜์˜ 2x2 ํ–‰๋ ฌ ํ‘œํ˜„์€ ๋ณต์žกํ•œ ์Šค์นผ๋ผ๋ฅผ ์š”์†Œ๋กœ ๊ฐ–๋Š” ๊ฒƒ๊ณผ ๋˜‘๊ฐ™์ด ๋™์ž‘ํ•ด์•ผํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์šฐ๋ฆฌ๊ฐ€ ์ •์˜ํ•œ๋‹ค๋ฉด

m(z::Complex) = [z.re -z.im; z.im z.re]

๊ทธ๋ฆฌ๊ณ  ์šฐ๋ฆฌ๋Š” ์ž„์˜์˜ ๋ณต์žกํ•œ ๋ฒกํ„ฐ v ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด์ด ์‹ ์›์ด ์œ ์ง€๋˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค :

conj(m.(v)) == m.(conj(v))

์˜ˆ๋ฅผ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๊ณ  ์ด๋ฏธ m ์™€ (๊ณผ) ํ†ต๊ทผ ํ•ด์•ผํ•˜๋Š” ' ์™€ (๊ณผ) ๋น„๊ตํ•˜์ง€๋งŒ https://github.com/JuliaLang/julia/ ๋•Œ๋ฌธ์— ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. m.(v)' == m.(v') ๊ฐ€ ์œ ์ง€๋˜์ง€๋งŒ @stevengj ๋ผ๊ณ  ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ดํ•ดํ•œ๋‹ค๋ฉด conj(m.(v)) == m.(conj(v)) ๋Š” ์•ˆ๋˜๋‚˜์š” ?

conj(m(z)) ๋Š” == m(z) ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

m(z) ๋Š” ๋ง์…ˆ๊ณผ ๊ณฑ์…ˆ์—์„œ ๋ณต์†Œ์ˆ˜์— ๋Œ€ํ•œ ๋™ํ˜•์ด์ง€๋งŒ ์„ ํ˜• ๋Œ€์ˆ˜์—์„œ๋Š” ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๋™์ผํ•œ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ conj ์ฒ™ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด z ์ด ๋ณต์†Œ์ˆ˜ ์Šค์นผ๋ผ ์ธ ๊ฒฝ์šฐ eigvals(z) == [z] ์ด์ง€๋งŒ eigvals(m(z)) == [z, conj(z)] ์ž…๋‹ˆ๋‹ค. m(z) ํŠธ๋ฆญ์ด ๋ณต์žกํ•œ ํ–‰๋ ฌ๋กœ ํ™•์žฅ ๋  ๋•Œ, ์ŠคํŽ™ํŠธ๋Ÿผ์˜ ๋ฐฐ๊ฐ€๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฐ˜๋ณต์  ์ธ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊นŒ๋‹ค๋กœ์šด ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค (์˜ˆ : ์ด ๋ฌธ์„œ ์ฐธ์กฐ).

๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ z ์€ ์ด๋ฏธ ๋ณต์†Œ์ˆ˜ ๋ฒกํ„ฐ ๊ณต๊ฐ„ (๋ณต์†Œ์ˆ˜ ์œ„์˜ ๋ฒกํ„ฐ ๊ณต๊ฐ„)์ด์ง€๋งŒ 2x2 ์‹ค์ˆ˜ ํ–‰๋ ฌ m(z) ๋Š” ์‹ค์ˆ˜ ์œ„์˜ ๋ฒกํ„ฐ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค ( ๊ณฑ์…ˆ ์ˆ˜ m(z) ์‹ค์ˆ˜๋กœ) ... ๋‹น์‹ ์€ "complexify"๊ฒฝ์šฐ m(z) ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณต์†Œ์ˆ˜ ๊ณฑํ•˜์—ฌ m(z) * (2+3im) (์•ˆ m(z) * m(2+3im) ) ๋‹ค์Œ์„ ๋” ์ด์ƒ ์›๋ž˜์˜ ๋ณต์žกํ•œ ๋ฒกํ„ฐ ๊ณต๊ฐ„ z ๋™ํ˜•์ด ์•„๋‹Œ ๋‹ค๋ฅธ ๋ณต์žกํ•œ ๋ฒกํ„ฐ ๊ณต๊ฐ„์„ ์–ป์Šต๋‹ˆ๋‹ค.

์ด ์ œ์•ˆ์€ ์‹ค์ œ์ ์ธ ๊ฐœ์„ ์„ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. + 1 : ์ˆ˜ํ•™์  ์ธก๋ฉด์— ๋Œ€ํ•ด ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋‚ด๊ฐ€ ์ดํ•ดํ–ˆ๋“ฏ์ด ํ™œ์šฉ์€ ๋ฒกํ„ฐ ๊ณต๊ฐ„ / ๋ฒกํ„ฐ์— ๋Œ€ํ•œ ๊ณ„์ˆ˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ง (์ˆซ์ž ์ฝ๊ธฐ)์— ๋Œ€ํ•œ ์ž‘์—…์ž…๋‹ˆ๋‹ค. ์ด ๋™์ž‘์€ ๋ฒกํ„ฐ ๊ณต๊ฐ„์— ๋Œ€ํ•œ ๋ฒกํ„ฐ ๊ณต๊ฐ„ ๊ตฌ์„ฑ์˜ ์„ ํ˜•์„ฑ์— ์˜ํ•ด ๊ฒฐํ•ฉ์ด๋ผ๊ณ ๋„ํ•˜๋Š” ๋ฒกํ„ฐ ๊ณต๊ฐ„ (๋ฐ ๋งคํ•‘, ์ฝ๊ธฐ : ํ–‰๋ ฌ)์— ๋Œ€ํ•œ ๋˜ ๋‹ค๋ฅธ ๋™์ž‘์„ ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ผค๋ ˆ๋Š” ๋ฐ˜๋“œ์‹œ ๊ณ„์ˆ˜์— ์š”์†Œ๋ณ„๋กœ ์ ์šฉํ•˜์—ฌ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Julia์—๊ฒŒ ์ด๋Š” v , conj(v) = conj.(v) ๋ฒกํ„ฐ์— ๋Œ€ํ•œ ํ•ต์‹ฌ์„ ์˜๋ฏธํ•˜๋ฉฐ, conj ์— ๋ฐฐ์—ด์— ๋Œ€ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ๋˜๋Š” ์Šค์นผ๋ผ์— ๋Œ€ํ•ด์„œ๋งŒ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋Š” ๋””์ž์ธ ์„ ํƒ์ž…๋‹ˆ๋‹ค. ๊ดœ์ฐฎ์•„ ๋ณด์—ฌ? (๋ณต์†Œ์ˆ˜ -as-2x2- ํ–‰๋ ฌ ์˜ˆ์ œ์— ๋Œ€ํ•œ ์Šคํ‹ฐ๋ธ์˜ ์š”์ ์€ ์ด๊ฒƒ์ด ๊ณ„์ˆ˜๊ฐ€ ๊ณต์‹์ ์œผ๋กœ / ์‹ค์ œ๋กœ ์‹ค์ˆ˜ ์ธ ๋ฒกํ„ฐ ๊ณต๊ฐ„์ด๋ฏ€๋กœ ์—ฌ๊ธฐ์—์„œ๋Š” ์ผค๋ ˆ๊ฐ€ ํšจ๊ณผ๊ฐ€ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.)
  • adjoint ์€ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ๋ฐ€์ ‘ํ•˜๊ฒŒ ํฌํ•จํ•˜๋Š” ๋งŽ์€ ์ค‘์š”ํ•œ ์˜์—ญ์—์„œ ๊ธฐ๋ณธ์ด๋˜๋Š” ๋Œ€์ˆ˜์  ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค (๋ฌผ๋ฆฌํ•™์—์„œ ํฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ ํ•จ๊ป˜ ๋ชจ๋‘ 1 ๊ณผ 2 ๋ฐ 3 ์ฐธ์กฐ). adjoint ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ๊ณ ๋ ค์ค‘์ธ ์ž‘์—… ์— ๋Œ€ํ•œ ํ‚ค์›Œ๋“œ ์ธ์ˆ˜๋ฅผ ํ—ˆ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ ๊ณต๊ฐ„ / ๊ธฐ๋Šฅ ๋ถ„์„์—์„œ์ด ์ž‘์—…์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚ด๋ถ€ ๊ณฑ์— ์˜ํ•ด ์œ ๋„๋˜๋ฏ€๋กœ ๋Œ€์‹  ํ‚ค์›Œ๋“œ ์ธ์ˆ˜๊ฐ€ ํ˜•์‹์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Julia์˜ ์กฐ์˜ฎ๊น€์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ๊ฒƒ์ด ๋ฌด์—‡์ด๋“  ์ด๋Ÿฌํ•œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ๊ณผ์˜ ์ถฉ๋Œ์„ ํ”ผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ adjoint ๋Š” ์•ฝ๊ฐ„ ๋†’์€

@felixrehren , ํ‚ค์›Œ๋“œ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ adjoint๋ฅผ ์œ ๋„ํ•˜๋Š” ๋‚ด๋ถ€ ์ œํ’ˆ์„ ์ง€์ •ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์— ๋Œ€ํ•ด dot ์˜ ์˜๋ฏธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹ค๋ฅธ ์œ ํ˜•์„ ๋Œ€์‹  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‚ด ์„ ํ˜ธ๋„๋Š” ์กฐ๊ธˆ ๋” ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

  • conj ๊ทธ๋Œ€๋กœ (์š”์†Œ ๋ณ„) ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • a' ๋ฅผ adjoint(a) a' ํ•ด๋‹นํ•˜๋„๋ก ๋งŒ๋“ค๊ณ  ํ•ญ์ƒ ์žฌ๊ท€ ์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค (๋”ฐ๋ผ์„œ adjoint ๊ฐ€ ์š”์†Œ์— ๋Œ€ํ•ด ์ •์˜๋˜์ง€ ์•Š์€ ๋ฌธ์ž์—ด ๋ฐฐ์—ด ๋“ฑ์—์„œ๋Š” ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค).
  • a.' ๋ฅผ transpose(a) ์— ๋Œ€์‘์‹œํ‚ค๊ณ  ์ ˆ๋Œ€ ์žฌ๊ท€ ์ ์ด ์ง€ ์•Š๊ฒŒ ๋งŒ๋“ค๊ณ  (๋‹จ์ง€ permutedims ), ๋”ฐ๋ผ์„œ ์š”์†Œ์˜ ์œ ํ˜•์„ ๋ฌด์‹œํ•˜์‹ญ์‹œ์˜ค.

๋น„ ์žฌ๊ท€ adjoint ๋Œ€ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์‹ค์ œ๋กœ ๋ณด์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ŠคํŠธ๋ ˆ์นญ์œผ๋กœ ์žฌ๊ท€ transpose ๋Œ€ํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ƒ์ƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ a.' ์„ transpose(a, recur=true) ๋กœ ๋ณ€๊ฒฝํ•ด์•ผํ•˜๋Š” ๋ชจ๋“  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋‹ค๋ฅธ ํ•จ์ˆ˜ transposerecursive(a) ํ˜ธ์ถœํ•˜์‹ญ์‹œ์˜ค. ์šฐ๋ฆฌ๋Š” Base์—์„œ transposerecursive ๋ฅผ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๊ฒƒ์ด ์‹ค์ œ๋กœ ํ•„์š”ํ•œ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•  ์ •๋„๋กœ ๋“œ๋ฌผ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

์ง€๊ธˆ๊นŒ์ง€ (๋Œ€๋ถ€๋ถ„์˜) ์„ ํ˜• ๋Œ€์ˆ˜ ๋ฃจํ‹ด์€ ํ‘œ์ค€ ๋ฐฐ์—ด ๊ตฌ์กฐ์™€ ํ‘œ์ค€ ๋‚ด๋ถ€ ๊ณฑ์— ์ƒ๋‹นํžˆ ๋ฟŒ๋ฆฌ๋ฅผ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋ ฌ์ด๋‚˜ ๋ฒกํ„ฐ์˜ ๊ฐ ์Šฌ๋กฏ์— "ํ•„๋“œ"์˜ ์š”์†Œ๋ฅผ ๋„ฃ์Šต๋‹ˆ๋‹ค. ํ•„๋“œ ์š”์†Œ์˜ ๊ฒฝ์šฐ + , * ๋“ฑ ๋ฐ conj ์—๋Š” ์‹ ๊ฒฝ ์“ฐ์ง€๋งŒ transpose ๋Š” ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค . ๋‹น์‹ ์˜ ํ•„๋“œ๋Š” 2 ร— ์‹ค์ œ ๋งคํŠธ๋ฆญ์Šค์ฒ˜๋Ÿผ ์กฐ๊ธˆ ๋ณด์ด์ง€๋งŒ์—์„œ ๋ณ€๊ฒฝํ•˜๋Š” ํŠน๋ณ„ํ•œ ๋ณต์žกํ•œ ํ‘œํ˜„ ์ธ ๊ฒฝ์šฐ conj ๊ฐ€์˜ ์†์„ฑ์ด๋‹ค -์˜ OK ๊ฒƒ์„ ๋‹ค์Œ, conj . conj ์•„๋ž˜์—์„œ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” 2x2 ์‹ค์ œ AbstractMatrix ์ผ ๊ฒฝ์šฐ, ํ–‰๋ ฌ์˜ ๊ทธ๋Ÿฌํ•œ ์š”์†Œ๋Š” adjoint ์•„๋ž˜์—์„œ ๋ณ€๊ฒฝ ๋˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค ( @stevengj ๋Š” ์„ค๋ช… ํ•  ์ˆ˜์žˆ๋Š” ๊ฒƒ๋ณด๋‹ค

์–ด์จŒ๋“ , 2x2 ๋ณต์žกํ•œ ์˜ˆ์ œ๋Š” ๋‚˜์—๊ฒŒ ์•ฝ๊ฐ„์˜ ๋ถ‰์€ ์ฒญ์–ด๋ฅผ ๋Š๋‚๋‹ˆ๋‹ค. ์žฌ๊ท€ ํ–‰๋ ฌ ๋™์ž‘์˜ ์‹ค์ œ ์›์ธ์€ ๋ธ”๋ก ํ–‰๋ ฌ์—์„œ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ง€๋ฆ„๊ธธ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ณ  ๊ธฐ๋ณธ ์‹œ์Šคํ…œ์„ ๋‹จ์ˆœํ™”ํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ทธ๋ž˜์„œ ๋‚ด "๊ฐ„๋‹จํ•œ"์ œ์•ˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • conj ๊ทธ๋Œ€๋กœ ์œ ์ง€ (๋˜๋Š” AbstractArray s์— ๋Œ€ํ•œ๋ณด๊ธฐ๋กœ ์„ค์ •)
  • a' ๋ฅผ (a')[i,j] == conj(a[j,i]) ์™€ ๊ฐ™์€ ๋น„์žฌ ๊ท€์  ๋ทฐ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • a.' ๋ฅผ (a.')[i,j] == a[j,i] ์™€ ๊ฐ™์€ ๋น„์žฌ ๊ท€์  ๋ทฐ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  • ๋ธ”๋ก ํ–‰๋ ฌ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด BlockArray ์œ ํ˜•์„ ๋„์ž…ํ•˜์‹ญ์‹œ์˜ค ( Base ์—์„œ ๋˜๋Š” ์ž˜ ์ง€์›๋˜๋Š” ํŒจํ‚ค์ง€์—์„œ). ์ด ๋ชฉ์ ์„ ์œ„ํ•ด Matrix{Matrix} ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ•๋ ฅํ•˜๊ณ  ์œ ์—ฐํ•˜์ง€๋งŒ ๋˜‘๊ฐ™์ด ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๊ทœ์น™์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ˆ˜์šฉํ•˜๊ณ  ๊ตฌ์ถ• ํ•  ์ˆ˜์žˆ์„๋งŒํผ ๊ฐ„๋‹จ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ถ”์‹ - @StefanKarpinski ์‹ค์šฉ์ ์ธ ์ด์œ ๋กœ ์žฌ๊ท€์— ๋Œ€ํ•œ ๋ถ€์šธ ํ‚ค์›Œ๋“œ ์ธ์ˆ˜๋Š” ์ „์น˜์— ๋Œ€ํ•œ ๋ทฐ์™€ ํ•จ๊ป˜ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ทฐ ์œ ํ˜•์€ ๋ถ€์šธ ๊ฐ’์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‹ค๋ฅธ ๊ณณ์—์„œ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ์™„์ „์„ฑ์„ ์œ„ํ•ด ์—ฌ๊ธฐ์— ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์žฌ๊ท€ ์ „์น˜ ๋ทฐ์—๋Š” ๋ž˜ํ•‘ํ•˜๋Š” ๋ฐฐ์—ด๊ณผ ๋น„๊ตํ•˜์—ฌ ์š”์†Œ ์œ ํ˜•์ด ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์„ฑ๊ฐ€์‹  ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ : transpose(Vector{Vector}) -> RowVector{RowVector} . ๋Ÿฐํƒ€์ž„ ํŒจ๋„ํ‹ฐ์—†์ด RowVector ๋Œ€ํ•ด์ด ์š”์†Œ ์œ ํ˜•์„ ๊ฐ€์ ธ ์˜ค๊ฑฐ๋‚˜ ์ถ”๋ก ์„ ํ˜ธ์ถœํ•˜์—ฌ ์ถœ๋ ฅ ์œ ํ˜•์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ƒ๊ฐํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ๋™์ž‘ (์ถ”๋ก  ํ˜ธ์ถœ)์ด ์–ธ์–ด ๊ด€์ ์—์„œ ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์˜ : ์‚ฌ์šฉ์ž๊ฐ€ conj ๋ฅผ ์ •์˜ํ•˜์—ฌ ๋‹ค๋ฅธ ์œ ํ˜•์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•๋„ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ConjArray ๋ทฐ๋Š” ์ „์น˜๊ฐ€ ์žฌ๊ท€ ์ ์ด๋“  ์•„๋‹ˆ๋“ ์ด ๋ฌธ์ œ๋ฅผ ๊ฒช์Šต๋‹ˆ๋‹ค.

@stevengj โ€“ "๋ณต์žกํ•œ"2x2 ํ–‰๋ ฌ์ด ๋ณต์žกํ•œ ๋ฒกํ„ฐ ๊ณต๊ฐ„์ด ์•„๋‹ˆ๋ผ ๊ณต์‹์ ์œผ๋กœ ์‹ค์ œ ๋ฒกํ„ฐ ๊ณต๊ฐ„์ด๋ผ๋Š” ์ ์„ ์ง€์ ํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์—๊ฒŒ ์˜๋ฏธ๊ฐ€ ์žˆ์ง€๋งŒ, ๊ทธ ์ ์€ ์žฌ๊ท€ ์  ์ธ์ ‘์— ๋Œ€ํ•œ ์›๋ž˜์˜ ๋™๊ธฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์˜๋ฌธ์„ ๋ถˆ๋Ÿฌ @andyferris ์˜ ์ œ์•ˆ์€ ๋” ์ข‹์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋น„ ์žฌ๊ท€ ์ „์น˜ ๋ฐ ์ธ์ ‘). ๋ณต์žกํ•œ 2x2 ์˜ˆ์ œ์™€ ๋ธ”๋ก ํ–‰๋ ฌ ํ‘œํ˜„ "์›ํ•œ๋‹ค"๊ฐ€ ์žฌ๊ท€ ์ ์ด๊ธฐ๋ฅผ ์›ํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์€ ์•”์‹œ ์ ์ด์ง€๋งŒ ์ฒซ ๋ฒˆ์งธ ์˜ˆ์ œ์— ๋Œ€ํ•œ ๊ท€ํ•˜์˜ ์˜๊ฒฌ์„ ๊ฐ์•ˆํ•  ๋•Œ ๋น„์žฌ ๊ท€์  ์ธ์ ‘ํ•˜๋Š” ๋‹ค๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ์—†๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋” ์ •ํ™•ํ•˜๊ณ  ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

adjoint๊ฐ€ ์žฌ๊ท€ ์ ์ด ์ง€ ์•Š์œผ๋ฉด adjoint๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๊ฑด ํ‹€๋ ธ์–ด์š”.

์ž ์‹œ ์‹œ๊ฐ„์„๋‚ด์–ด ์ด์— ๋Œ€ํ•œ ์ •๋‹น์„ฑ์„ ์กฐ๊ธˆ ๋” ๋ง์”€ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

๋ฒกํ„ฐ์˜ adjoint๋Š” ๋ฒกํ„ฐ๋ฅผ ์Šค์นผ๋ผ์— ๋งคํ•‘ํ•˜๋Š” ์„ ํ˜• ์—ฐ์‚ฐ์ž ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, a'*a a ๊ฐ€ ๋ฒกํ„ฐ ์ธ ๊ฒฝ์šฐ a'*a ๋Š” ์Šค์นผ๋ผ ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์€ ์ •์˜ ์†์„ฑ์ด a'*A*a == (A'*a)'*a ์ด๋ฏ€๋กœ ํ–‰๋ ฌ์— ๋Œ€์‘ํ•˜๋Š” adjoint๋ฅผ ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค.

a ์ด ๋ฒกํ„ฐ๋กœ ๊ตฌ์„ฑ๋œ ๋ฒกํ„ฐ ์ธ ๊ฒฝ์šฐ ์ด๋Š” a' == adjoint(a) ์ด ์žฌ๊ท€ ์ ์ด์–ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ข‹์•„, ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

์žฌ๊ท€ ์  ๋‚ด๋ถ€ ์ œํ’ˆ๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

julia> norm([[3,4]])
5.0

julia> dot([[3,4]], [[3,4]])
25

๋ถ„๋ช…ํžˆ "adjoint"๋˜๋Š” "dual"๋˜๋Š” ์œ ์‚ฌํ•˜๊ฒŒ ์žฌ๊ท€ ์ ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ํ•ด์•ผ ํ• , ์ค‘์•™ ๋ฌธ์ œ๋Š” ๋‹ค์Œ ์ƒ๊ฐ a' * b == dot(a,b) ๋ชจ๋“  ๋ฒกํ„ฐ์— ๋Œ€ํ•œ a , b ?

๋Œ€์•ˆ์€ ' ๊ฐ€ ๋ฐ˜๋“œ์‹œ adjoint๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์š”์†Œ๋ฅผ ์ „์น˜ํ•˜๊ณ  conj ํ†ตํ•ด ์ „๋‹ฌํ•˜๋Š” ๋ฐฐ์—ด ์—ฐ์‚ฐ ์ผ ๋ฟ์ด๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹ค์ œ ๋˜๋Š” ๋ณต์žกํ•œ ์š”์†Œ์— ๋Œ€ํ•œ ์ธ์ ‘ ์š”์†Œ ์ผ๋ฟ์ž…๋‹ˆ๋‹ค.

์„ ํ˜• ๋Œ€์ˆ˜์—์„œ adjoint์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ์ด๋ฆ„๊ณผ ํŠน์ˆ˜ ๊ธฐํ˜ธ๊ฐ€์žˆ๋Š” ์œ ์ผํ•œ ์ด์œ ๋Š” ๋‚ด์ ๊ณผ์˜ ๊ด€๊ณ„์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด "conjugate transpose"๊ฐ€ ์ค‘์š”ํ•œ ์ž‘์—…์ด๊ณ  "conjugate rotation of matrix by 90๋„"๊ฐ€ ์•„๋‹Œ ์ด์œ ์ž…๋‹ˆ๋‹ค. ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ฐ€์ง„ ์•„๋ฌด ์†Œ์šฉ ์—†๋‹ค "๋‹จ์ง€ ๋ฐฐ์—ด ์ž‘์—…์€ ์Šค์™‘ ํ–‰๊ณผ ์—ด ๋ฐ ์ ‘ํ•ฉ์ฒด"์ด ์  ์ œํ’ˆ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ.

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

๋‚ด๊ฐ€ ์ฐธ์กฐ. ๋”ฐ๋ผ์„œ ' ์„ adjoint ๋ณ€๊ฒฝํ•˜๋ฉด conj โˆ˜ transpose ๊ฐ€ ์•„๋‹˜์„ ๋ถ„๋ช…ํžˆ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

@andyferris , ์ผ๋ฐ˜์ ์ธ ๋ฒกํ„ฐ ๊ณต๊ฐ„ ์˜ ๊ฒฝ์šฐ ์Šค์นผ๋ผ๋Š” ๋ฒกํ„ฐ์— ๊ณฑํ•  ์ˆ˜์žˆ๋Š” ๊ณ ๋ฆฌ (์ˆซ์ž)์ž…๋‹ˆ๋‹ค. 3 * [[1,2], [3,4]] ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ [3,3] * [[1,2], [3,4]] ํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Array{Array{Number}} ๊ฒฝ์šฐ์—๋„ ์˜ฌ๋ฐ”๋ฅธ ์Šค์นผ๋ผ ์œ ํ˜•์€ Number ์ž…๋‹ˆ๋‹ค.

๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์š”์†Œ ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ (๋™์ผํ•œ) ์Šค์นผ๋ผ๋ผ๊ณ ํ•ฉ๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ๋‚ด๊ฐ€ ๋ณธ ์น˜๋ฃŒ๋ฒ•์€ ๋ง์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ๋ฒกํ„ฐ ๊ณต๊ฐ„์„ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ๋ง์€ + , * ์„ ์ง€์›ํ•˜์ง€๋งŒ adjoint , dot ๋“ฑ์„ ์ง€์›ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์น˜๋ฃŒ๋ฒ•์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

(์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค, ์ €๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋ชจ๋ธ๋งํ•˜๋Š” ๊ธฐ๋ณธ ์ˆ˜ํ•™์  ๊ฐ์ฒด๋ฅผ ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค).

"์†๊ธฐ"์˜ ์˜๋ฏธ์™€ "์š”์†Œ"์˜ ์˜๋ฏธ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

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

image

์ด ๊ฒฝ์šฐ "์š”์†Œ"๊ฐ€ 3 ์„ฑ๋ถ„ ๋ฒกํ„ฐ ํ•„๋“œ ์ธ 2 ์„ฑ๋ถ„ ๋ฒกํ„ฐ์— ์ž‘์šฉํ•˜๋Š” ์„ ํ˜• ์—ฐ์‚ฐ์ž (์˜ˆ : ์ปฌ)์˜ 2x2 ํ–‰๋ ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋“ค์€ ๋ณต์†Œ์ˆ˜์˜ ์Šค์นผ๋ผ ํ•„๋“œ์— ๋Œ€ํ•œ ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์˜๋ฏธ์—์„œ ์ถฉ๋ถ„ํžˆ ๋“œ๋ฆด ๋‹ค์šดํ•˜๋ฉด ๋ฒกํ„ฐ์˜ "์š”์†Œ"๋Š” ๋ณต์†Œ์ˆ˜ (๊ณต๊ฐ„์˜ ๊ฐœ๋ณ„ ์ง€์ ์—์žˆ๋Š” ํ•„๋“œ์˜ ๊ฐœ๋ณ„ ๊ตฌ์„ฑ ์š”์†Œ)์ด์ง€๋งŒ ๋‹ค์†Œ ๋ชจํ˜ธํ•ฉ๋‹ˆ๋‹ค.

์•„๋‹ˆ๋ฉด ๋” ์ •ํ™•ํ•˜๊ฒŒ๋Š” ๋ฒกํ„ฐ์˜ ๊ณ„์ˆ˜๋ฅผ ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ ๋ง์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

์–ด์จŒ๋“  ๊ฒฐ๊ณผ๋Š” ์—ฌ์ „ํžˆ adjoint๊ฐ€ ์žฌ๊ท€ ์ ์ด์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹น์‹ ์ด ์–ด๋–ค ์ง€์ ์— ๋„๋‹ฌํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

(๊ฐ์ฒด ๋˜๋Š” ๋ฐฐ์—ด์˜ ์š”์†Œ๋Š” SymPy ๋˜๋Š” ์ถ”์ƒ์  ์ธ ์ˆ˜ํ•™์  ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ๊ณ , ๊ณฑ์…ˆ์ด ๊ณ„์‚ฐ ๋  ๋•Œ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด ์ ๋ถ„.)

๋‚˜๋Š” ํŠน์ • ์š”์ ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋” ์ž˜ ์ดํ•ดํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. :)

ํ™•์‹คํžˆ ์œ„์˜ adjoint๋Š” ์žฌ๊ท€ ์ ์ž…๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์—์„œ [E, H] ๋ฅผ (๋ฌดํ•œ์œผ๋กœ?) ๋งŽ์€ ์š”์†Œ๊ฐ€ ๋ณต์žกํ•œ BlockVector ๋˜๋Š” ์š”์†Œ๊ฐ€ ๋ฒกํ„ฐ ํ•„๋“œ ์ธ 2- ๋ฒกํ„ฐ๋กœ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์€์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ BlockVector ์ ‘๊ทผ ๋ฐฉ์‹์€ ์ž‘๋™ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์–ด์จŒ๋“  ๊ณ ๋งˆ์›Œ.

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

๋ฒกํ„ฐ v ๊ฒฝ์šฐ length(v) ๋Š” ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์ฐจ์›, ์ฆ‰ ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์š”์†Œ๋ฅผ (์™„์ „ํžˆ) ์„ค๋ช…ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์Šค์นผ๋ผ ๊ณ„์ˆ˜์˜ ์ˆ˜๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ v[i] ๋Š” i ๋ฒˆ์งธ ์Šค์นผ๋ผ ๊ณ„์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์ €๋Š” AbstractVector ๋ฅผ "์ถ”์ƒ ๋ฒกํ„ฐ"๋กœ ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์˜คํžˆ๋ ค ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์•Œ๊ณ ์žˆ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ธฐ์ดˆ๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ์ผ๋ถ€ ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์š”์†Œ ๊ณ„์ˆ˜๋ฅผ ๋ณด์œ ํ•˜๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•˜๊ณ  ์œ ์šฉํ•œ ๋ฉ˜ํƒˆ ๋ชจ๋ธ์ฒ˜๋Ÿผ ๋ณด์˜€์ง€๋งŒ ์•„๋งˆ๋„ ๋„ˆ๋ฌด ์ œํ•œ์ ์ด๊ณ  ๋น„ํ˜„์‹ค์  ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

(ํŽธ์ง‘ : Vector{T} ์—์„œ T ์—์„œ ์„ ํ˜• ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์ด ์ž‘๋™ํ•˜๋ ค๋ฉด ์Šค์นผ๋ผ์ฒ˜๋Ÿผ ๋™์ž‘ํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค.)

ํ•˜์ง€๋งŒ [3,3] * [[1,2], [3,4]] ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค

์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ๊ณ ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์ข‹์€ ์ƒ๊ฐ์ธ์ง€ ์•„๋‹Œ์ง€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ํ™•์‹คํžˆ ์ž‘๋™ํ•˜๋„๋ก ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•œ ์ง€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•œ๋‹ค.์ด ๊ฒฝ์šฐ [3,3] ์‹ค์ œ๋กœ ์Šค์นผ๋ผ๊ฐ€ ์•„๋‹ˆ๋‹ค. (์šฐ๋ฆฌ๋Š” ์ด๋ฏธ [3,3]' * [[1,2], [3,4]] ๋ฅผ ํ•  ์ˆ˜์žˆ๋Š” ๋Šฅ๋ ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค-์ €๋Š” ์„ ํ˜• ๋Œ€์ˆ˜์  ์˜๋ฏธ๋กœ ํ•ด์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ง๋กœ ๋ชจ๋ฆ…๋‹ˆ๋‹ค).

์ด๊ฒƒ์€ ํฅ๋ฏธ๋กœ์šด ์ฝ”๋„ˆ ์ผ€์ด์Šค๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” v1' * v2 ๊ฐ€ ๋‚ด๋ถ€ ๊ณฑ (๋”ฐ๋ผ์„œ "์Šค์นผ๋ผ"๋ฅผ ๋ฐ˜ํ™˜)์ด๋ผ๊ณ  ๋งํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ [3,3]' * [[1,2], [3,4]] == [12, 18] ์ž…๋‹ˆ๋‹ค. ์ธ์œ„์ ์ธ ์˜ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ [3,3] ๋Š” ์Šค์นผ๋ผ์ž…๋‹ˆ๋‹ค. ์Šค์นผ๋ผ๋Š” ๊ธฐ๋ณธ ๋ง์˜ ์š”์†Œ์ด๋ฉฐ [a,b] ํ˜•์‹์˜ ์š”์†Œ๋ฅผ ๋ง์œผ๋กœ ๋งŒ๋“œ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค (๋”ฐ๋ผ์„œ ๋ฒกํ„ฐ / ํ–‰๋ ฌ ์ •์˜ ๊ทธ ์œ„์—). ๊ทธ๊ฒƒ๋“ค์ด ๋ฒกํ„ฐ๋กœ ์“ฐ์—ฌ์กŒ๋‹ค๋Š” ์‚ฌ์‹ค ๋˜๋Š”์ด ๊ณ ๋ฆฌ ์ž์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ธฐ๋ณธ ๊ณ ๋ฆฌ ์œ„์— ๋ฒกํ„ฐ ๊ณต๊ฐ„์„ ํ˜•์„ฑํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๊ทธ๊ฒƒ์„ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๋ฒกํ„ฐ๋ฅผ ์ˆจ๊ธธ ์ˆ˜์žˆ๋Š” ๋‹ค๋ฅธ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค! ์•„๋‹ˆ๋ฉด ์™„์ „ํžˆ ๋‹ค๋ฅด๊ฒŒ ๋ณด์ด๊ฒŒ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.) @andyferris ๊ฐ€ ์‚ดํŽด๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ ์Šค์นผ๋ผ๋Š” ์ปจํ…์ŠคํŠธ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

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

๋‚˜๋Š” adjoint recursion์„ ๊ฐ•์ œํ•˜๋Š” ๊ฒƒ์ด matlab ์œ ํ˜• ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์‹ค์งˆ์ ์ธ ํƒ€ํ˜‘์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋ฅผ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ๋งค์šฐ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด๋Š” ๊ฒƒ์€ ๋น„์žฌ ๊ท€์  ์ธ์ ‘์„ ์˜๋ฏธํ•˜๊ณ  ์œ ํ˜•์ด ์ง€์ •๋œ ์Šค์นผ๋ผ + ๋””์ŠคํŒจ์น˜๋ฅผ โ€‹โ€‹์‚ฌ์šฉํ•˜์—ฌ conj ๊ฐ€ ๊ธฐ๋ณธ ๋ง์˜ ๊ตฌ์กฐ๊ฐ€ ๋ฌด์—‡์ด๋“  ํ•„์š”ํ•œ ๋งˆ๋ฒ•์„ ์ž‘๋™ํ•˜๋„๋กํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ [3,3]์€ ์Šค์นผ๋ผ์ž…๋‹ˆ๋‹ค. ์Šค์นผ๋ผ๋Š” ๊ธฐ๋ณธ ๋ง์˜ ์š”์†Œ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์Šค์นผ๋ผ๋Š” + , * ์ •์˜ ๋œ ๋ง์˜ ์š”์†Œ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์ ์„ ์ œ์™ธํ•˜๊ณ ๋Š”. * ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. [3,3] * [3,3] ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” adjoint recursion์„ ๊ฐ•์ œํ•˜๋Š” ๊ฒƒ์ด matlab ์œ ํ˜• ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์‹ค์งˆ์ ์ธ ํƒ€ํ˜‘์ด ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋ฅผ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ๋งค์šฐ ์‹ฌ๊ฐํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ด๋Š” ๊ฒƒ์€ ๋น„์žฌ ๊ท€์  ์ธ์ ‘์„ ์˜๋ฏธํ•˜๊ณ  ์œ ํ˜•์ด ์ง€์ •๋œ ์Šค์นผ๋ผ + ๋””์ŠคํŒจ์น˜๋ฅผ โ€‹โ€‹์‚ฌ์šฉํ•˜์—ฌ conj ๊ฐ€ ๊ธฐ๋ณธ ๋ง์˜ ๊ตฌ์กฐ๊ฐ€ ๋ฌด์—‡์ด๋“  ํ•„์š”ํ•œ ๋งˆ๋ฒ•์„ ์ž‘๋™ํ•˜๋„๋กํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์šฉ์ ์ธ ๊ตฌ์„ฑ์„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ด๊ฒƒ์€ ์™„์ „ํžˆ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ๊ฐ€ ํ•ด์™” ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ์ €์—๊ฒŒ๋Š” ๊ธฐ๋ณธ ์Šค์นผ๋ผ๊ฐ€ ์™„์ „ํžˆ ํ‰ํƒ„ํ™” ๋œ ๋ฐฐ์—ด์˜ ์Šค์นผ๋ผ์ด๊ณ  ์ด๊ฒƒ์ด ์„ ํ˜• ๋Œ€์ˆ˜ํ•™์ด ์ •์˜ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. . BlockVector ๋ฐ BlockMatrix (๋ฐ BlockDiagonal ๋“ฑ)์„ ๋งŒ๋“œ๋Š” ๊ธฐ์ˆ ์ด์žˆ์–ด ์™„์ „ํžˆ ํ™•์žฅ ๋œ ๋ฐฐ์—ด์˜ ํšจ์œจ์ ์ด๊ณ  ํ‰๋ฉดํ™” ๋œ๋ณด๊ธฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. "์ ‘๊ทผ ๋ฐฉ์‹์€ ์ตœ์†Œํ•œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ ์žฌ๊ท€ ์  ์ ‘๊ทผ ๋ฐฉ์‹๋งŒํผ ์‚ฌ์šฉ์ž ์นœํ™”์  ์ผ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค (๋” ์ข‹์€ ์˜๋ฏธ์™€ ์ž ์žฌ์ ์œผ๋กœ ๋” ์ฝ๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ ๊ฐ€ ๋  BlockMatrix([A B; C D]) ๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๋ช‡ ๊ฐœ์˜ ์ถ”๊ฐ€ ๋ฌธ์ž-๋‚˜๋Š” ์ด๊ฒƒ๋“ค์„ ํ™•์‹ ํ•ฉ๋‹ˆ๋‹ค ๋…ผ๋ž€์˜ ์—ฌ์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค). ๊ทธ๋Ÿฌ๋‚˜์ด ๋ชจ๋“  ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋” ๋งŽ์€ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

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

(์Šค์นผ๋ผ ์ •๋ณด : ์Šค์นผ๋ผ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์™„์ „ํžˆ ํ‰ํƒ„ํ™” ๋œ ๊ตฌ์กฐ์˜ ์š”์†Œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค ! ์ด์œ ๋Š” ์ด๊ฒƒ์ž…๋‹ˆ๋‹ค. 1 ์ฐจ์› ๋ณต์†Œ ๋ฒกํ„ฐ ๊ณต๊ฐ„์€ ๋ณต์†Œ์ˆ˜์— ๋Œ€ํ•ด 1 ์ฐจ์›์ด๊ณ  ์‹ค์ˆ˜์— ๋Œ€ํ•ด 2 ์ฐจ์›์ž…๋‹ˆ๋‹ค. ํŠน๋ณ„ํ•ฉ๋‹ˆ๋‹ค. ์ฟผํ„ฐ๋‹ˆ์–ธ์€ ๋ณต์†Œ์ˆ˜๋ณด๋‹ค 2 ์ฐจ์›์ž…๋‹ˆ๋‹ค. ์˜ฅ ํ† ๋‹ˆ ์–ธ์€ ์ฟผํ„ฐ๋‹ˆ์–ธ๋ณด๋‹ค 2 ์ฐจ์›, ๋ณต์†Œ์ˆ˜๋ณด๋‹ค 4 ์ฐจ์›, ์‹ค์ˆ˜์— ๋Œ€ํ•ด์„œ๋Š” 8 ์ฐจ์›์ž…๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๋” ์ด์ƒ 8 ์ฐจ์›์ด "8 ์ฐจ์›"์ด๋ผ๊ณ  ์ฃผ์žฅ ํ•  ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์Šค์นผ๋ผ๊ฐ€ ๋ณต์žกํ•˜์ง€ ์•Š์€ ์‹ค์ˆ˜๋ผ๊ณ  ์ฃผ์žฅํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค, ๊ทธ๊ฒƒ๋“ค์€ ๋…ผ๋ฆฌ์— ์˜ํ•ด ๊ฐ•์ œ๋˜์ง€ ์•Š๋Š” ์„ ํƒ์ž…๋‹ˆ๋‹ค. ์ˆœ์ „ํžˆ ํ‘œํ˜„์˜ ๋ฌธ์ œ์ด๋ฉฐ, ์„ ํ˜• ๋Œ€์ˆ˜๊ฐ€ ๊ฐ๊ฐ์˜ ๊ฒฝ์šฐ์— ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๋Š” ์ด๋Ÿฌํ•œ ์ž์œ ๋ฅผ ํ—ˆ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. [์ž˜๋ฆฐ] ๋‹ค์ค‘ ๋‹คํ•ญ์‹ ๊ณ ๋ฆฌ ๋˜๋Š” ์ˆซ์ž ํ•„๋“œ์˜ ๋Œ€์ˆ˜์  ํ™•์žฅ์ด์žˆ๋Š” ์ด๋Ÿฌํ•œ ๊ณต๊ฐ„์˜ ํ›จ์”ฌ ๋” ๊ธด ์ฒด์ธ์€ ๋‘˜ ๋‹ค ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ๋™๊ฐ์žˆ๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. Julia๋Š” ํ† ๋ผ ๊ตฌ๋ฉ ์•„๋ž˜๋กœ ๋ฉ€๋ฆฌ ๊ฐˆ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ฐจ๋‹จํ•˜์ง€ ์•Š๋„๋ก ์กด์žฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊ธฐ์–ตํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋‹ดํ™” ์ฃผ์ œ์ผ๊นŒ์š”? :))

@felixrehren , ๋ง R ์œ„์˜ ๋ฒกํ„ฐ๋กœ ๊ตฌ์„ฑ๋œ ๋ฒกํ„ฐ๋Š” ์ง์ ‘ ํ•ฉ๊ณ„ ๊ณต๊ฐ„์œผ๋กœ ๊ฐ€์žฅ ์ž˜ ์ดํ•ด๋˜๋ฉฐ R ์œ„์˜ ๋ฒกํ„ฐ ๊ณต๊ฐ„์ด๊ธฐ๋„ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฒกํ„ฐ ์ž์ฒด๋ฅผ "๊ธฐ๋ณธ ๋ง"์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์€ ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฐ˜์ง€. ๊ทธ ์ถ”๋ก ์€ [[1,2], [3,4]] ์™„๋ฒฝํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํ™œ์šฉ๊ณผ ์ธ์ ‘์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ณ„๊ฐœ์˜ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. "์Šค์นผ๋ผ ์š”์†Œ์˜ ํ™œ์šฉ"์ด ์—ฌ๊ธฐ์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผํ•œ๋‹ค๋Š” ๋ง์€ ์•„๋ž˜์— ์–ธ๊ธ‰ ๋œ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” "์‹ฌ๊ฐํ•œ"์˜ ๋ฐ˜๋Œ€ ์ธ ๋‚˜์—๊ฒŒ๋Š” ์™„์ „ํžˆ ์ž˜๋ชป๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

Dirac ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์ผ๋ถ€ ๋ง (๋ณต์†Œ์ˆ˜ โ„‚) ์œ„์˜ ์ผ๋ถ€ ํž๋ฒ ๋ฅดํŠธ ๊ณต๊ฐ„ H์—์„œ ๋‘ ์š”์†Œ | uโŸฉ ๋ฐ | vโŸฉ์˜ "2 ์„ฑ๋ถ„ ์—ด ๋ฒกํ„ฐ"(| uโŸฉ, | vโŸฉ)์˜ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. "๋ฒกํ„ฐ์˜ ๋ฒกํ„ฐ." ์ด๊ฒƒ์€ ์ž์—ฐ์ ์ธ ๋‚ด์  โŸจ(| uโŸฉ, | vโŸฉ), (| wโŸฉ, | zโŸฉ)โŸฉ = โŸจu | wโŸฉ + โŸจv | zโŸฉ๋ฅผ ๊ฐ–๋Š” ์ง์ ‘ ํ•ฉ ํž๋ฒ ๋ฅดํŠธ ๊ณต๊ฐ„ HโŠ•H์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ adjoint๋Š” ์š”์†Œ ์ž์ฒด๊ฐ€ ์„ ํ˜• ์—ฐ์‚ฐ์ž ์ธ "ํ–‰ ๋ฒกํ„ฐ"(โŸจu | โŸจv |)๋กœ ๊ตฌ์„ฑ๋œ ์„ ํ˜• ์—ฐ์‚ฐ์ž๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. adjoint ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค."์žฌ๊ท€" . ์ด๊ฒƒ์€ ๋ฐ‘๋ฐ›์นจ ๊ณ ๋ฆฌ์˜ ์ ‘ํ•ฉ์— ์˜ํ•ด ์œ ๋„ ๋œ ๋™์ผํ•œ ํž๋ฒ ๋ฅดํŠธ ๊ณต๊ฐ„ HโŠ•H์˜ ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ณตํ•ฉ ์ ‘ํ•ฉ์ฒด์™€๋Š” ์™„์ „ํžˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

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

๋‹ค์‹œ ๋งํ•ด, ๊ฐ์ฒด ์œ ํ˜•์€ ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์ •๋ณด๋ฅผ ๋‚˜ํƒ€๋‚ด์•ผํ•ฉ๋‹ˆ๋‹ค.

  • ์Šค์นผ๋ผ ๋ง (๋”ฐ๋ผ์„œ ๋™์ผํ•œ ๊ณต๊ฐ„์˜ ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ผค๋ ˆ).
  • ๋‚ด์  (๋”ฐ๋ผ์„œ ์ด์ค‘ ๊ณต๊ฐ„์˜ ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ธ์ ‘).

Vector{T<:Number} , ์Šค์นผ๋ผ ๋ง์ด T (๋˜๋Š” ๋ณต์žกํ•œ ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ๊ฒฝ์šฐ complex(T) )์ด๊ณ  ๋‚ด๋ถ€ ๊ณฑ์ด ์ผ๋ฐ˜์ ์ธ ์œ ํด๋ฆฌ๋“œ ๊ณฑ์ž„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ์ฝ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. .

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

์Šค์นผ๋ผ T<:Number ๊ฐ€ ์žˆ์œผ๋ฉด conj(x::T) == adjoint(x::T) ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ณต์†Œ์ˆ˜ z::Complex{T} ๋ฅผ 2x2 ํ–‰๋ ฌ m(z)::Array{T,2} ๋‚˜ํƒ€๋‚ด๋ ค๊ณ ํ•˜๋ฉด ์œ ํ˜•์€ z ์™€ ๋น„๊ตํ•˜์—ฌ ๋‹ค๋ฅธ ๋ง T ๊ณผ ๋‹ค๋ฅธ ๋‚ด๋ถ€ ๊ณฑ์„ ๋ชจ๋‘ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. z ์ด๋ฏ€๋กœ conj ๋˜๋Š” adjoint ๋™๋“ฑํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณต ํ•  ๊ฒƒ์œผ๋กœ ๊ธฐ ๋Œ€ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋‹น์‹ ์ด @felixrehren์„ ๋งํ•˜๋Š” ๊ฒƒ์„ ๋ด…๋‹ˆ๋‹ค. ์Šค์นผ๋ผ๊ฐ€ ์‹ค์ˆ˜์ด๋ฉด ์˜ฅํ„ฐ ๋‹ˆ์•ˆ์€ 8 ์ฐจ์› ๋ฒกํ„ฐ ๊ณต๊ฐ„์œผ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์Šค์นผ๋ผ ๊ณ„์ˆ˜๊ฐ€ 8 ์ง„์ˆ˜์ด๋ฉด ๋ชจ๋“  8 ์ง„์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์‚ฌ์†Œํ•œ ์ฐจ์› 1 ๊ธฐ์ €๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ๋งํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅธ์ง€ (๋˜๋Š” ๋‚ด๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ” : smile :) ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. AbstractVector{T1} ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋‹ค๋ฅธ ์ฐจ์›์˜ AbstractVector{T2} ๊ณผ ๋™ํ˜• ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ( length ). ๊ทธ๋Ÿฌ๋‚˜ T1 ๋ฐ T2 ๋Š” ๋ชจ๋‘ Julia ์—ฐ์‚ฐ์ž + ๋ฐ * ์•„๋ž˜์˜ ๋ง์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค (๋™ํ˜•์ด + ์˜ ๋™์ž‘์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ). ๊ทธ๋Ÿฌ๋‚˜ * ๋˜๋Š” ๋‚ด๋ถ€ ์ œํ’ˆ ๋˜๋Š” adjoint๋Š” ์ œ์™ธ).

@stevengj ์ €๋Š” ํ•ญ์ƒ BlockVector ๊ณผ ์ •ํ™•ํžˆ ๊ฐ™์€ ์ง์ ‘ ํ•ฉ๊ณ„๋ฅผ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ (๋ถ„๋ฆฌ ๋œ) ๋ถˆ์™„์ „ํ•œ ์—ผ๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋ฒ ์ด์‹œ์Šค ๋‚ด์—์„œ ์ฒซ ๋ฒˆ์งธ ๋ฒ ์ด์‹œ์Šค์—์„œ cโ‚ | Xโ‚โŸฉ + cโ‚‚ | Xโ‚‚โŸฉ ๋˜๋Š” ๋‘ ๋ฒˆ์งธ ๋ฒ ์ด์‹œ์Šค์—์„œ cโ‚ƒ | Yโ‚โŸฉ + cโ‚„ | Yโ‚‚โŸฉ์™€ ๊ฐ™์€ ์ค‘์ฒฉ์„ ํ˜•์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "์ง์ ‘ ํ•ฉ"์€ (cโ‚ | Xโ‚โŸฉ + cโ‚‚ | Xโ‚‚โŸฉ) + (cโ‚ƒ | Yโ‚โŸฉ + cโ‚„ | Yโ‚‚โŸฉ)์™€ ๊ฐ™์€ ์ƒํƒœ์˜ ๊ณต๊ฐ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋ณต์†Œ์ˆ˜ (์ฆ‰, cโ‚ | Xโ‚โŸฉ + cโ‚‚ | Xโ‚‚โŸฉ + cโ‚ƒ | Yโ‚โŸฉ + cโ‚„ | Yโ‚‚โŸฉ์™€ ๊ฐ™์€ ์ƒํƒœ)์— ๋Œ€ํ•œ ์ฐจ์› 4์˜ ๊ธฐ์ค€์—์„œ ์ด๊ฒƒ์„ ๋ถ„๋ฆฌํ•˜๋Š” ์œ ์ผํ•œ ํŠน๋ณ„ํ•œ ๊ฒƒ์€ ๋Œ€๊ด„ํ˜ธ์ž…๋‹ˆ๋‹ค. ๋‚˜์—๊ฒŒ ๊ทธ๊ฒƒ์€ ํ‘œ๊ธฐ๋ฒ•์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค. ์ง์ ‘ ํ•ฉ๊ณ„๋Š”์ด๋ฅผ ์ข…์ด์— ๋˜๋Š” ์ปดํ“จํ„ฐ์˜ ๋ฐฐ์—ด๋กœ ์ž‘์„ฑํ•˜๋Š” ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ• ์ผ๋ฟ์ž…๋‹ˆ๋‹ค (์˜ˆ๋ฅผ ๋“ค์–ด ๋Œ€์นญ์„ ์นดํƒˆ๋กœ๊ทธ ํ™”ํ•˜๊ณ  ํ™œ์šฉํ•˜๊ฑฐ๋‚˜ ๋ฌธ์ œ๋ฅผ ๋ถ„ํ•  (์•„๋งˆ๋„ ๋ณ‘๋ ฌํ™”)ํ•˜๋Š” ๋ฐ ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค). ). ์ด ์˜ˆ์—์„œ XโŠ•Y๋Š” ์—ฌ์ „ํžˆ ์Šค์นผ๋ผ๊ฐ€ ๋ณต์žกํ•œ 4 ์ฐจ์› ๋ฒกํ„ฐ ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋‚ด๊ฐ€ eltype(v) == Vector{Complex{...}} ๋ฐ length(v) == 2 ๋Œ€์‹  eltype(v) == Complex{...} ๋ฐ length(v) == 4 ์›ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๋ง๊ณผ ๋ฒกํ„ฐ ๊ณต๊ฐ„์„๋ณด๊ณ  ์ถ”๋ก ํ•˜๋Š” ๋ฐ ๋„์›€์ด๋ฉ๋‹ˆ๋‹ค. adjoint๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด "์ „์—ญ"์ „์น˜ ๋ฐ ์š”์†Œ ๋ณ„ conj ๋ฅผ ์ˆ˜ํ–‰ ํ•  ์ˆ˜์žˆ๋Š” "ํ‰ํƒ„ํ™” ๋œ"๊ณต๊ฐ„๋„ ์•„๋‹™๋‹ˆ๊นŒ?

(๋‚ด๊ฐ€ ๊ธ€์„ ์“ฐ๋Š” ๋™์•ˆ @stevengj : smile :)

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

๋ถ„๋ช…ํžˆ ๋งํ•˜๋ฉด, ์ €๋Š” ๋‘ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์— ๋งŒ์กฑํ•˜๋ฉฐ์ด ํ† ๋ก ์—์„œ ๋งŽ์€ ๊ฒƒ์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ.

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

๋‹ค์‹œ ๋ง์”€ ๋“œ๋ฆฌ์ง€๋งŒ, ๊ท€ํ•˜์˜ ์š”์ ์ด ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. Julia์˜ eltype(::Vector{Vector{Complex}}) ๋Š” Complex ์ด์–ด์•ผํ•œ๋‹ค๊ณ  ์ง„์ง€ํ•˜๊ฒŒ ์ œ์•ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด length ๊ฐ€ ๊ธธ์ด์˜ ํ•ฉ๊ณ„๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ง„์ง€ํ•˜๊ฒŒ ์ œ์•ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์ค„๋ฆฌ์•„์˜ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ์ง์ ‘ ํ•ฉ๊ณ„ ๊ณต๊ฐ„์— ๋Œ€ํ•ด "ํ‰ํƒ„ํ™” ๋œ"๋™ํ˜•์„ ์ฑ„ํƒํ•˜๋„๋ก ๊ฐ•์š”ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ adjoint๋Š” ์žฌ๊ท€ ์ ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

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

๋‘ ๊ฐœ์˜ ๊ณต๋ฐฑ์ด ๋™ํ˜•์ด๋ผ๊ณ ํ•ด์„œ "๋™์ผํ•œ"๊ณต๊ฐ„์ด๋ผ๋Š” ์˜๋ฏธ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์ „ํ˜€ ์ œ์•ˆํ•˜์ง€ ์•Š์•˜๋‹ค.

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ๋‹น์‹ ์˜ ์š”์ ์ด ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ €๋Š” AbstractArray ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด eltype ๊ฐ€ ๋ง์ด๋˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค ( + , * ๋ฐ conj ) ์˜ˆ๋ฅผ ๋“ค์–ด [1,2] * [3,4] ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— Vector eltypes๋ฅผ ๋ฐฐ์ œํ•ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์˜ length ๋Š” ์‹ค์ œ๋กœ ์„ ํ˜• ๋Œ€์ˆ˜์˜ ์ฐจ์›์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ, ์ด๊ฒƒ์€ ๋ฌดํ•œ ์ฐจ์› ๋ฒกํ„ฐ ๊ณต๊ฐ„์„ ๋ฐฐ์ œํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ Julia์—์„œ๋Š” AbstractVector ํฌ๊ธฐ๋ฅผ ๋ฌดํ•œ๋Œ€๋กœ ์กฐ์ •ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒํ•˜๋ฉด Julia์—์„œ ์„ ํ˜• ๋Œ€์ˆ˜ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‰ฝ๊ฒŒ ์ถ”๋ก  ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์šฉ์ž๋Š” ์ค‘์ฒฉ ๋ฐฐ์—ด ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  BlockArray ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์„ ํ†ตํ•ด ์ง์ ‘ ํ•ฉ๊ณ„๋ฅผ ๋ช…์‹œ ์ ์œผ๋กœ ํ‘œ์‹œํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

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

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

Julia์˜ eltype(::Vector{Vector{Complex}}) ๋Š” Complex ์ด์–ด์•ผํ•œ๋‹ค๊ณ  ์ง„์ง€ํ•˜๊ฒŒ ์ œ์•ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด length ๊ฐ€ ๊ธธ์ด์˜ ํ•ฉ๊ณ„๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ง„์ง€ํ•˜๊ฒŒ ์ œ์•ˆํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”, ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ œ๊ฐ€ ์ž‘์„ฑํ•œ ๋‚ด์šฉ์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.์ด ๋ชฉ์ ์„์œ„ํ•œ ๋‘ ๊ฐ€์ง€ ์ƒˆ๋กœ์šด ํŽธ์˜ ๊ธฐ๋Šฅ์ด ํŠน์ • ์ƒํ™ฉ์—์„œ ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ œ์•ˆํ•œ ๊ฒƒ๋ฟ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด zero ๋˜๋Š” one ๋ฅผ ์›ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ค„๋ฆฌ์•„์˜ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด ์ง์ ‘ ํ•ฉ๊ณ„ ๊ณต๊ฐ„์— ๋Œ€ํ•ด "ํ‰ํƒ„ํ™” ๋œ"๋™ํ˜•์„ ์ฑ„ํƒํ•ด์•ผํ•œ๋‹ค๋Š” ๋ง์ž…๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ฐ€๋Šฅ์„ฑ์œผ๋กœ ์ œ์•ˆ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ตœ์„ ์˜ ์•„์ด๋””์–ด๋ผ๊ณ  100 % ํ™•์‹ ํ•˜์ง€๋Š” ๋ชปํ•˜์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ์žฅ์  (๊ทธ๋ฆฌ๊ณ  ๋ช‡ ๊ฐ€์ง€ ๋‹จ์ )์ด ์žˆ๋‹ค๊ณ  ๋Š๋‚๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ณ€๊ฒฝ ์˜์—ญ์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด @stevengj ์˜ ๋‚ด ์ œ์•ˆ์— ๋Œ€ํ•œ ๋‹จ์ˆœํ™” ๋œ ๋ฒ„์ „์ด ์—ฌ๊ธฐ๋กœ ์ด๋™ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • conj ๊ทธ๋Œ€๋กœ (์š”์†Œ ๋ณ„) ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • a' ์„ adjoint(a) a' ํ•ด๋‹นํ•˜๋„๋ก ๋งŒ๋“ค๊ณ  ํ•ญ์ƒ ์žฌ๊ท€ ์ ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค (๋”ฐ๋ผ์„œ ์š”์†Œ์— ๋Œ€ํ•ด adjoint๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์€ ๋ฌธ์ž์—ด ๋ฐฐ์—ด ๋“ฑ์—์„œ๋Š” ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค).
  • a.' ๋ฅผ transpose(a) ์— ๋Œ€์‘์‹œํ‚ค๊ณ  ์ ˆ๋Œ€ ์žฌ๊ท€ ์ ์ด ์ง€ ์•Š๊ฒŒ ๋งŒ๋“ค๊ณ  (๋‹จ์ง€ permutedims ), ๋”ฐ๋ผ์„œ ์š”์†Œ์˜ ์œ ํ˜•์„ ๋ฌด์‹œํ•˜์‹ญ์‹œ์˜ค.

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

  1. [] ๋ฐ”๊พธ๊ธฐ์—๊ฒŒ ctranspose ์— adjoint .
  2. [] transpose ๋ฅผ ๋น„ ์žฌ๊ท€๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  3. [] ์ด๊ฒƒ์ด ํ–‰ ๋ฒกํ„ฐ์™€ ์–ด๋–ป๊ฒŒ ์–ด์šธ๋ฆฌ๋Š” ์ง€ ์•Œ์•„ ๋‚ด์‹ญ์‹œ์˜ค.

๋‚˜๋Š” ์žฌ๊ท€ ์ „์น˜์— ์˜์กดํ•˜๋Š” ๊ฒƒ์ด ์ถฉ๋ถ„ํžˆ ๋“œ๋ฌผ ์–ด์„œ 1.0์—์„œ ์ด๊ฒƒ์„ ๋ณ€๊ฒฝํ•˜๊ณ  NEWS์—์„œ ์ค‘๋‹จ์œผ๋กœ ๋‚˜์—ด ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ctranspose ๋ฅผ adjoint ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์ผ๋ฐ˜ ์ง€์› ์ค‘๋‹จ์„ ๊ฒช์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (ํ•˜์ง€๋งŒ 1.0์—์„œ๋Š”์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•จ). ๋‹ค๋ฅธ ์กฐ์น˜๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

@StefanKarpinski , RowVector ํ•ด๋‹นํ•˜๋Š” ๋ณ€๊ฒฝ๋„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ๊ฐ€๋Šฅ์„ฑ์€ lazy non-recursive transpose ๋ฐ lazy recursive adjoint ๊ฐ๊ฐ์— ๋Œ€ํ•ด RowVector ๋ฅผ Transpose ๋ฐ Adjoint ์œ ํ˜•์œผ๋กœ ๋ถ„ํ• ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Conj (๊ฒŒ์œผ๋ฅธ conj )๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.

์ ์–ด๋„ ์ ‘์„  ์ ์œผ๋กœ ๊ด€๋ จ๋œ ๋ช‡ ๊ฐ€์ง€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ

  • transpose ๋ฐ adjoint / AbstractMatrix ๋Œ€ํ•œ ์ผ๋ถ€๋ณด๊ธฐ ์œ ํ˜•
  • ํ™•์ธ adjoint(::Diagonal) ์žฌ๊ท€ (ํ‹€๋ฆผ์—†์ด ์šฐ๋ฆฌ๋Š”์ด "๋ฒ„๊ทธ"์ˆ˜์ •ํ•ด์•ผ Diagonal ์— ๋Œ€ํ•ด transpose ๋ฐ ctranspose ์ค„๋ฆฌ์•„ v0.6.0 ์ด์ „์„)
  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ ์ ˆํ•œ "์Šค์นผ๋ผ"์œ ํ˜•์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. v = Vector{Vector{Float64}}(); dot(v,v) (ํ˜„์žฌ ์˜ค๋ฅ˜- zero(Vector{Float64}) ๋ฐ˜ํ™˜ ์‹œ๋„)

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

๋‚ด๊ฐ€ ๋ง‰ํžŒ ๋ถ€๋ถ„๊ณผ ์œ„์˜ ๋ชจ๋“  ๋…ผ์˜ ํฌ์ธํŠธ์— ์ง์ ‘์ ์œผ๋กœ ๋™๊ธฐ๋ฅผ ๋ถ€์—ฌํ•œ ๊ฒƒ์€ inv , det , expm ํฌํ•จํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ์—์„œ ์„ ํ˜• ๋Œ€์ˆ˜ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. eig ๋“ฑ. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ชจ๋“  ๋Œ€๊ฐ์„  ์š”์†Œ์˜ ๊ณฑ๋งŒ ์ทจํ•˜๋Š” det(::Diagonal{T}) where T ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. T <: Number ์—์„œ ํ›Œ๋ฅญํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋ฉฐ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ๋™์ผํ•œ ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ํ–‰๋ ฌ ๋˜ํ•œ ์žฌ๊ท€ ์ „์น˜ (ํŽธ์ง‘ : adjoint)๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค).

๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ฐ˜์ ์ธ ๋ธ”๋ก ๋Œ€๊ฐ์„  ํ–‰๋ ฌ Diagonal{Matrix{T}} ๋˜๋Š” ์ž„์˜์˜ ๋ธ”๋ก ํ–‰๋ ฌ Matrix{Matrix{T}} ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ ํ–‰๋ ฌ์‹์„ ์Šค์นผ๋ผ T ๋กœ ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํฌ๊ธฐ๊ฐ€ (3 โŠ• 4) ร— (3 โŠ• 4) (3x3, 4x4 ์ฐจ์›์˜ ํ–‰๋ ฌ ์ธ ๋Œ€๊ฐ์„  ์š”์†Œ๊ฐ€ ์žˆ๊ณ  ๋Œ€๊ฐ์„ ์„ ๋ฒ—์–ด๋‚œ ์š”์†Œ์™€ ์ผ์น˜ํ•˜๋Š” 2x2 ํ–‰๋ ฌ)์ด๋ฉด det "ํ‰ํƒ„ํ™” ๋œ"7x7 ๊ตฌ์กฐ์˜ ๊ฒฐ์ • ์ธ์ž์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ๋‹จ์ˆœํžˆ 2x2์˜ ์š”์†Œ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ณฑํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ (์ด ๊ฒฝ์šฐ์—๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ ํ•จ)?

(ํŽธ์ง‘ : ์œ„์˜ ์น˜์ˆ˜๋ฅผ ๋ชจ๋‘ ๋‹ค๋ฅด๊ฒŒ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ชจํ˜ธํ•œ ์–ธ์–ด๋ฅผ ํ”ผํ•ด์•ผ ํ•จ)

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

๋ฌผ๋ก , . ์˜๋ฏธํ•˜๋Š” ๋ฐ”์— ๋Œ€ํ•œ ์ €์˜ ์ •์‹ ์  ๋ชจ๋ธ์€์ด ๊ฒฝ์šฐ์— ์ž˜๋ชป๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‚˜๋Š” ๊ทธ ๊ตฌ๋ฌธ์„ ์ •ํ™•ํ•˜๊ฒŒ ์ž˜๋ชป๋œ ๋ฐฉ์‹์œผ๋กœ ํ•ด์„ํ•˜๋Š” ์œ ์ผํ•œ ์‚ฌ๋žŒ์ด ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ๋น„ ์žฌ๊ท€ ์ „์น˜์— .' ์ด์™ธ์˜ ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@rdeits ์ด ๊ตฌ๋ฌธ์€ MATLAB์—์„œ ํŒŒ์ƒ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ (์•„์ฃผ ๋ฉ‹์ง„) dot-call ๋ธŒ๋กœ๋“œ ์บ์ŠคํŠธ ๊ตฌ๋ฌธ์ด v0.5์— ๋„์ž… ๋œ ํ›„ ์กฐ๊ธˆ ๋ถˆํ–‰ ํ•ด์กŒ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” MATLAB๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ ์šฐ๋ฆฌ ์ž์‹ ์˜ ๊ธธ์„ ๋งŒ๋“ค์–ด์„œ ์ด๊ฒƒ์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ €๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์–ด๋”˜๊ฐ€์— ๋ณ„๋„์˜ ๋…ผ์˜๊ฐ€ ์žˆ์—ˆ๋‹ค๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค (๋ˆ„๊ตฌ๋“ ์ง€ ์–ด๋””์— ๊ธฐ์–ตํ•ฉ๋‹ˆ๊นŒ?).

์•„, ์•ˆํƒ€๊น ๋„ค์š”. ๊ฐ์‚ฌ!

๋˜ ๋‹ค๋ฅธ ํ•  ์ผ :

  • [] transpose ๋ฐ adjoint ์™€ ์ผ์น˜ํ•˜๋„๋ก issymmetric ๋ฐ ishermitian adjoint โ€“ ๊ฐ ์Œ์˜ ์ „์ž๋Š” ๋น„ ์žฌ๊ท€์ด๊ณ  ํ›„์ž๋Š” ์žฌ๊ท€์ž…๋‹ˆ๋‹ค.

Matlab .' ๊ตฌ๋ฌธ์€ ์ƒˆ๋กœ์šด . ๊ตฌ๋ฌธ์˜ ๋งฅ๋ฝ์—์„œ ํ™•์‹คํžˆ ๋งค์šฐ ๋ถˆํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์— ๋ฐ˜๋Œ€ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด์ง€๋งŒ, ์šฐ๋ฆฌ๋Š” ์ „์น˜์— ๋Œ€ํ•œ ์ƒˆ๋กœ์šด ๊ตฌ๋ฌธ์ด ํ•„์š”ํ•˜๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋“ ์ง€ ์กฐ์˜ฎ๊น€์— ๋Œ€ํ•œ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

์ „์น˜ ๊ตฌ๋ฌธ ํ† ๋ก ์„ ์—ฌ๊ธฐ๋กœ ์ด๋™ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค : https://github.com/JuliaLang/julia/issues/21037.

transpose / ctranspose / adjoint / A::Matrix{Matrix{T}} ๋ธ”๋ก ํ–‰๋ ฌ์ฒ˜๋Ÿผ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. @andyferris ๊ฐ€ ์ ์–ด๋„ ๋ถ€๋ถ„์ ์œผ๋กœ ์•”์‹œํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒŒ์œผ๋ฅธ hvcat ๊ฐ๊ฐ. ์ฆ‰, A ์˜ ์š”์†Œ๊ฐ€ ๋ชจ๋‘ ๋™์ผํ•œ ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜• ํ–‰๋ ฌ (์ฆ‰, ๋ง์„ ํ˜•์„ฑ)์ด๋ฉด det(A) ๊ฐ€ ํ•ด๋‹น ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜•์„ ๋‹ค์‹œ ๋ฐ˜ํ™˜ ํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ง์‚ฌ๊ฐํ˜•์ด๊ฑฐ๋‚˜ ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ๋ธ”๋ก ๋งคํŠธ๋ฆญ์Šค / ๊ฒŒ์œผ๋ฅธ ๊ณ ์–‘์ด ์œ ํ˜•์ด ์œ ์šฉ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ‰ํƒ„ํ™” ๋œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์ž‘์—…ํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ๋ฅผ ๋“ค์–ด getindex ์™€ ๊ฐ™์ด ์ •์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ์ด ๊ฐœ๋…์ด Matrix ๋˜๋Š” Diagonal ์™€ ๊ฐ™์€ ๊ธฐ์กด ๋งคํŠธ๋ฆญ์Šค ์œ ํ˜•์— ํก์ˆ˜๋˜๋Š” ๊ฒƒ์„๋ณด๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์•ˆ์‹ฌ์ž…๋‹ˆ๋‹ค, @martinholters. ์ด ์Šค๋ ˆ๋“œ์˜ ์•ž๋ถ€๋ถ„์—์„œ ์ œ๊ฐ€ ๋‹นํ™ฉํ–ˆ๋˜ ๊ฒƒ์€ Julia์˜ ์ „์ฒด ์„ ํ˜• ๋Œ€์ˆ˜ ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ์ž„์˜์˜ ๋ธ”๋ก ํ–‰๋ ฌ (๋ถ€๋ถ„ ํ–‰๋ ฌ์˜ ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅธ)์— ๋Œ€ํ•ด Matrix{Matrix} ์— ์–ด๋–ป๊ฒŒ ๋“  ์ ์šฉ ํ•  ์ˆ˜ ์žˆ์–ด์•ผํ•œ๋‹ค๋Š” ์ƒ๊ฐ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ•จ๊ป˜ ์ฃผ์žฅํ–ˆ๋‹ค "๋ณ‘ํ•ฉ"์š”์†Œ๊ฐ€ ๋ฌด์—‡์ธ์ง€์˜ ๋ฉ‹์ง„ ์„ฑ์ฐฐ์„ํ•˜๊ณ , ๋‹จ์ง€ ๋ฐ˜์ง€์˜ ์š”์†Œ๋กœ ์ž์‹ ์˜ ์žฅ์ ์˜ ์š”์†Œ๋ฅผ ์ทจ๊ธ‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์žฌ๊ท€ ์  ctranspose / adjoint ์€์ด๋ฅผ ์„ ํ˜• ์—ฐ์‚ฐ์ž์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋Š” ์š”์†Œ๋กœ ํ™•์žฅํ•˜์—ฌ ์ •ํ™•ํ•˜๊ณ  ์œ ์šฉ ํ•ด ๋ณด์ž…๋‹ˆ๋‹ค. (๋‹ค๋ฅธ ๊ฒฝ์šฐ๋Š” ๋ฒกํ„ฐ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋Š” ๋ฒกํ„ฐ์˜ ์š”์†Œ์ด๋ฉฐ ์žฌ๊ท€ ์  ์ธ์ ‘๋„ ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค).

์กฐ๊ธˆ ๋” ๋Œ์•„๊ฐ€๋ ค๋ฉด- transpose(x) = x ๋ฐ ctranpsose(x) = conj(x) ๋Œ€ํ•œ ๊ธฐ๋ณธ no-op ๋™์ž‘์„ ์ œ๊ฑฐํ•œ ์›๋ž˜ ๋™๊ธฐ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๊ฒƒ๋“ค์€ ํ•ญ์ƒ ๋‚˜์—๊ฒŒ ๋งค์šฐ ์œ ์šฉ ํ•ด ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

์กฐ๊ธˆ ๋” ๋Œ์•„๊ฐ€๋ ค๋ฉด-transpose (x) = x ๋ฐ ctranpsose (x) = conj (x)์— ๋Œ€ํ•œ ๊ธฐ๋ณธ no-op ๋™์ž‘์„ ์ œ๊ฑฐํ•˜๋Š” ์›๋ž˜ ๋™๊ธฐ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ์ด๊ฒƒ๋“ค์€ ํ•ญ์ƒ ๋‚˜์—๊ฒŒ ๋งค์šฐ ์œ ์šฉ ํ•ด ๋ณด์˜€์Šต๋‹ˆ๋‹ค.

์ด๋Š” ctranspose ์„ ์ „๋ฌธํ™”ํ•˜์ง€ ๋ชปํ•œ ์ปค์Šคํ…€ ์„ ํ˜• ์—ฐ์‚ฐ์ž ์œ ํ˜• (AbstractArray์˜ ํ•˜์œ„ ์œ ํ˜•์ด ๋  ์ˆ˜ ์—†์Œ)์— ์˜ํ•ด ๋™๊ธฐ ๋ถ€์—ฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ทธ๋“ค์ด ํด๋ฐฑ์—์„œ ์ž˜๋ชป๋œ no-op ๋™์ž‘์„ ๋ฌผ๋ ค ๋ฐ›์•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํด ๋ฐฑ์ด ์กฐ์šฉํžˆ ๋ถ€์ •ํ™•ํ•˜์ง€ ์•Š๋„๋ก ๋””์ŠคํŒจ์น˜๋ฅผ โ€‹โ€‹๊ตฌ์„ฑํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค (ํ•˜์ง€๋งŒ ๋น„๊ด€์  ์ธ ๋ณต์žก์„ฑ์ด์žˆ์„ ์ˆ˜ ์žˆ์Œ). https://github.com/JuliaLang/julia/issues/13171

๋‘ ๊ฐ€์ง€ ์˜ต์…˜์ด์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค์—์„œ transpose ๋Š” ๋น„ ์žฌ๊ท€ ์ ์ด๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด :

  1. ๋น„ ์žฌ๊ท€ ctranspose .
  2. ์žฌ๊ท€ ctranspose .

@stevengj , @jiahao , @andreasnoack โ€“ ์—ฌ๊ธฐ์„œ ์„ ํ˜ธํ•˜๋Š” ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๊ธฐํƒ€?

@jiahao ์˜ JuliaCon 2017 ํ† ํฌ ์ดํ›„๋กœ

๋‚˜์—๊ฒŒ ์—ฌ์ „ํžˆ ์„ ํ˜• ๋Œ€์ˆ˜๋Š” "์Šค์นผ๋ผ"ํ•„๋“œ์™€ ๊ด€๋ จํ•˜์—ฌ T ์š”์†Œ ์œ ํ˜•์œผ๋กœ ์ •์˜๋˜์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. T ๊ฐ€ ํ•„๋“œ ์ธ ๊ฒฝ์šฐ ( + , * ๋ฐ conj ( - , / , .. .)) ๊ทธ๋Ÿฌ๋ฉด Base.LinAlg ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํŒจํ•ด์•ผํ•˜๋Š” ์ด์œ ๋ฅผ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

OTOH ์˜ˆ๋ฅผ ๋“ค์–ด ๋ธ”๋ก ํ–‰๋ ฌ์˜ ์ „์น˜์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ผ๋ฐ˜์ ์ด๋ฉฐ ์œ ํšจํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "1 ์ฐจ"์Šค์นผ๋ผ ์„ธํŠธ, "2 ์ฐจ"์Šค์นผ๋ผ ์„ธํŠธ, "3 ์ฐจ"์„ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ธํŠธ ์„ธํŠธ๋ฅผ ๋…ผ์˜ ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์ด์ƒํ•œ ์ง„์ˆ ์„ ๋‹ค๋ฃจ๋Š” "์ˆ˜ํ•™์ "์œ ํ˜• ์ด๋ก ์—์„œ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋ฌธ "์Šค์นผ๋ผ ์„ธํŠธ ์„ธํŠธ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด ๋ฐฐ์—ด์„ ๋‹ค๋ฃฐ ๋•Œ๋„ ์—ฌ๊ธฐ์— ๋™์ผํ•œ ๋ฌธ์ œ (๋ฐ ๊ธฐํšŒ)๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Julia์˜ ์œ ํ˜• ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ "์ง„์ •ํ•œ"์Šค์นผ๋ผ์˜ "1 ์ฐจ"๋ฐฐ์—ด, ์Šค์นผ๋ผ ๋ฐฐ์—ด์˜ "2 ์ฐจ"๋ฐฐ์—ด ๋“ฑ์„ ์„ค๋ช… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. . ์ €๋Š” @stevengj , ์ €์™€ ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค ์‚ฌ์ด์˜ ๊ธด ํ† ๋ก ์ด ์˜ˆ, ์ž„์˜์˜ "์ˆœ์„œ"์˜ ๋ฐฐ์—ด๊ณผ์ด ํ”„๋ ˆ์ž„ ์›Œํฌ์—์„œ ์ผ๊ด€๋œ ์—ฐ์‚ฐ ์ง‘ํ•ฉ์„ ์ƒ๊ฐ ๋น„๋กฏ ๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (c) transpose๋Š” ๋ช…ํ™•ํ•˜๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์žฌ๊ท€ ์ ์ด์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. Jiahao์˜ ๊ฐ•์—ฐ์ด ๋ช…ํ™•ํ•˜๊ฒŒ ์ง€์ ํ–ˆ๋“ฏ์ด, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด / ํ”„๋ ˆ์ž„ ์›Œํฌ๋Š” ์Šค์นผ๋ผ๋ฅผ ๋ฐฐ์—ด (๋˜๋Š” ์•„๋‹˜)๊ณผ ๊ตฌ๋ณ„ํ•˜๊ณ  ๋ฒกํ„ฐ๋ฅผ ํ–‰๋ ฌ (๋˜๋Š” ์•„๋‹˜)๊ณผ ๊ตฌ๋ณ„ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์˜๋ฏธ ๋ก ์  ์„ ํƒ์„ํ•˜๋ฉฐ, ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜์žˆ๋Š” ๊ด€๋ จ ์„ ํƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

๋‹ค์Œ ๋‹จ๊ณ„๋Š” Base.LinAlg ์— 1 ์ฐจ ํ–‰๋ ฌ๊ณผ 2 ์ฐจ ํ–‰๋ ฌ์˜ ์ฐจ์ด๋ฅผ ๊ฐ€๋ฅด์น˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‘ ๊ฐ€์ง€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์„ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋” ๋งŽ์€ ๊ฒƒ์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • T ์ด AbstractMatOrVec ์ผ ๋•Œ transpose(::AbstractMatrix{T}) ์ด ์žฌ๊ท€ ์ ์ด๋ฉฐ T ๊ฐ€ a Number , ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์–ด๋–ป๊ฒŒ ๋“  ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค (์˜ตํŠธ ์ธ, ์˜ตํŠธ ์•„์›ƒ ๋“ฑ). (์–ด๋–ค๋ฉด์—์„œ ์ด๊ฒƒ์€ ์š”์†Œ์— ๋Œ€ํ•œ transpose ๋ฉ”์„œ๋“œ์˜ ๋™์ž‘์„ ์ œ์–ดํ•˜์—ฌ ํ˜„์žฌ ์ˆ˜ํ–‰๋˜๊ณ  ์žˆ์ง€๋งŒ, (outer)์˜ transpose ๋ฉ”์„œ๋“œ ๋™์ž‘์„ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๊ฒƒ์ด ๋” ๊น”๋”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ) ๋ฐฐ์—ด).
  • ๋˜๋Š” Array ํฌํ•จํ•˜์—ฌ ๋Œ€๋ถ€๋ถ„์˜ AbstractArray ๊ฐ€ ์ฒซ ๋ฒˆ์งธ ์ˆœ์„œ๋ผ๊ณ  ์ฃผ์žฅํ•˜๊ณ  (์š”์†Œ ๊ฐ€ ์Šค์นผ๋ผ ํ•„๋“œ ์ž„) ๋‹ค๋ฅธ AbstractArray ์œ ํ˜• (์˜ˆ NestedArray )์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐ์—ด์„ ๋ž˜ํ•‘ํ•˜๊ณ  ํ•ด๋‹น ์š”์†Œ๊ฐ€ ์Šค์นผ๋ผ๊ฐ€ ์•„๋‹Œ ๋ฐฐ์—ด๋กœ ์ฒ˜๋ฆฌ๋จ์„ "ํ‘œ์‹œ"ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์กฐ๊ธˆ ๊ฐ€์ง€๊ณ  ๋†€์•„ ๋ณด์•˜์ง€๋งŒ ์œ„์˜ ์˜ต์…˜์€ ์•„๋งˆ๋„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถ€๋‹ด์ด ๋œํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ค„๋ฆฌ์•„๊ฐ€ ๋ฐฐ์—ด๊ณผ ์Šค์นผ๋ผ ์‚ฌ์ด์— ๊ฐ•๋ ฅํ•œ ์˜๋ฏธ ๋ก ์  ๋ถ„๋ฆฌ๋ฅผํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์Šค์นผ๋ผ๊ฐ€ ๋ฐฐ์—ด ์†์„ฑ transpose ๋Œ€ํ•ด "ํ•™์Šต"๋˜์–ด์•ผํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ์ƒํ™ฉ์ด (๋‚˜์—๊ฒŒ) ์•ฝ๊ฐ„ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” Matrix{Float64} ๊ฐ€ ์Šค์นผ๋ผ ํ–‰๋ ฌ (1 ์ฐจ ๋ฐฐ์—ด)์ด๊ณ  Matrix{Matrix{Float64}} ๊ฐ€ ๋ธ”๋ก ํ–‰๋ ฌ (2 ์ฐจ ๋ฐฐ์—ด)์ž„์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด์ด "์ฒซ ๋ฒˆ์งธ ์ˆœ์„œ"์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์œ ํ˜• ์‹œ์Šคํ…œ์ด๋‚˜ ํŠน์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ผ๊ด€์„ฑ์ด์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋‚ด๊ฐ€ ๋‚˜์—ดํ•œ ์ฒซ ๋ฒˆ์งธ ์˜ต์…˜์€ Julia๋ฅผ๋ณด๋‹ค ์‚ฌ์šฉ์ž ์นœํ™”์ ์œผ๋กœ ๋งŒ๋“ค๋ฉด์„œ (๊ทธ๋ž˜์„œ ["abc", "def"].' ๋ฅผ ํ•  ์ˆ˜ ์žˆ์Œ) ๋ธ”๋ก ํ–‰๋ ฌ๋กœ ํ•ฉ๋ฆฌ์ ์ด๊ณ  ์œ ์šฉํ•œ ๊ธฐ๋ณธ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜์žˆ๋Š” ์œ ์—ฐ์„ฑ์„ ์œ ์ง€ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋„ˆ๋ฌด ์˜ค๋žซ๋™์•ˆ ํ•˜ํ”„๋ฅผ ์—ฐ์ฃผํ•ด์„œ ๋ฏธ์•ˆํ•˜์ง€๋งŒ JuliaCon ์—์„œ @jiahao์™€ ๋Œ€ํ™”๋ฅผ @StefanKarpinski๊ฐ€ ์–ธ๊ธ‰ ํ•œ ๋‹ค๋ฅธ ์˜ต์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ™•์‹ ํ•˜์ง€๋งŒ, ๋‚˜์—๊ฒŒ๋Š” RowVector ๋„์ž… ์ „์— ํ–‰๋ ฌ / ๋ฒกํ„ฐ ๋Œ€์ˆ˜๊ฐ€ "์ž‘๋™"ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ "์ž‘๋™"ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

TLDR์€-( c ) transpose ๋‘˜ ๋‹ค ์žฌ๊ท€ ์ ์ด๋“  ์•„๋‹ˆ๋“  ๋งŒ๋“ค์ง€ ๋งˆ์‹ญ์‹œ์˜ค (์ฆ‰, ๊ตฌ์„ฑ ๊ฐ€๋Šฅ).

์ด๊ฒƒ๋“ค์€ ์ข‹์€ ์ ์ด์ง€๋งŒ (c)transpose ์žฌ๊ท€์— ๋Œ€ํ•œ ๊ฑฐ์˜ ๋ชจ๋“  ๋ถˆ๋งŒ์ด ' ๋ฐ .' ๋น„ ์ˆ˜ํ•™ ์‚ฌ์šฉ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค๋Š” ์ ์„ ์ง€์ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค Vector{String} ๋ฐ Vector{PyObject} ๋ฅผ 1xn ํ–‰๋ ฌ๋กœ ์žฌ๊ตฌ์„ฑ ํ•  ๋•Œ Vector{String} . ํƒ€์ž…๋ณ„๋กœ ์ˆ˜์ •ํ•˜๊ธฐ๋Š” ์‰ฝ์ง€๋งŒ ์„ฑ๊ฐ€์‹  ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์žฌ๊ท€ ์  ์ •์˜๋Š” ์ˆ˜ํ•™์ ์œผ๋กœ ์˜ณ๊ณ  "์ •ํ™•ํ•˜์ง€๋งŒ ๋งŽ์€ ๊ฒฝ์šฐ์— ์„ฑ๊ฐ€์‹œ๋‹ค"๋Š” ๊ฒƒ์ด "ํŽธ๋ฆฌํ•˜์ง€๋งŒ ๋“œ๋ฌผ๊ฒŒ ์ž˜๋ชป๋œ ๊ฒฝ์šฐ"๋ณด๋‹ค ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ์ฑ…์€ ์ฒซ ๋ฒˆ์งธ ๊ธ€ ๋จธ๋ฆฌ ๊ธฐํ˜ธ์—์„œ ์ œ์•ˆ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ์š”์†Œ์— ๋Œ€ํ•œ ์žฌ๊ท€ ์ „์น˜ ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” T<:AbstractVecOrMat ๊ฐ€ ์ƒํƒœ๋ฅผ "ํŽธ๋ฆฌํ•˜์ง€๋งŒ ๋งค์šฐ ๋“œ๋ฌธ ๊ฒฝ์šฐ์— ์ž˜๋ชป๋จ"์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ๋ฅผ ์ปค๋ฒ„ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ์ž˜๋ชป๋œ ์ด์œ ๋Š” AbstractArray ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ฃผ๋กœ ๋ฐฐ์—ด ( getindex ) ์˜๋ฏธ๋ก ์— ๊ด€ํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ถ€ ์—ฐ์‚ฐ์ž์™€ ์œ ์‚ฌํ•œ ์œ ํ˜•์ด AbstractMatrix ๋ฒ”์ฃผ์— ๋งž์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. , ์„ ํ˜• ๋Œ€์ˆ˜๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

@andyferris , ์Šค์นผ๋ผ์˜ adjoint ๋ฐ dual์€ ์™„๋ฒฝํ•˜๊ฒŒ ์ž˜ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ ctranspose(x::Number) = conj(x) ๊ฐ€ ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

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

๊ฐœ์ธ์ ์œผ๋กœ, ์ค‘์ฒฉ ๋œ Arrays ๋กœ ๋ธ”๋ก ๋ฐฐ์—ด์„ ์‚ดํŽด ๋ณด๋ ค๊ณ ํ•˜๋Š” ๊ฒƒ์€ ์—ฌ๊ธฐ์˜ ์ด์œ  ๋•Œ๋ฌธ์— ๋ณต์žกํ•ด์ง€๋ฉฐ https://github.com/KristofferC/BlockArrays.jl์— ๋Œ€ํ•œ ์ „์šฉ ์œ ํ˜•์„ ๊ฐ–๋Š” ๊ฒƒ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค. ์ด.

@KristofferC ๋ฉ‹์ง€๋„ค์š”.

@stevengj ๊ฐ€ ์œ„์—์„œ AbstractArray ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ๋“ค์— ๋Œ€ํ•ด ์žฌ๊ท€ (c) ์ „์น˜๋ฅผํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ํ™•์‹คํžˆ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹น์‹ ์ด ์ด๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ–ˆ๋Š”์ง€ ์•„๋‹Œ์ง€๋Š” ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ์–ธ๊ธ‰ ํ•  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์ฃผ์ œ์— ๋Œ€ํ•œ slack / # linalg ๋Œ€ํ™”์˜ ํ•˜์ด๋ผ์ดํŠธ. ์œ„์˜ ์Šค๋ ˆ๋“œ ์ค‘ ์ผ๋ถ€๋ฅผ ์š”์•ฝํ•ฉ๋‹ˆ๋‹ค. ์˜๋ฏธ๋ก ์— ์ค‘์ ์„๋‘๊ณ  ์ฒ ์ž๋ฅผ ํ”ผํ•ฉ๋‹ˆ๋‹ค. (๊ทธ ๋Œ€ํ™”์— ์ฐธ์—ฌ ํ•ด์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค! :))

์˜๋ฏธ ์ ์œผ๋กœ ๊ตฌ๋ณ„๋˜๋Š” ์„ธ ๊ฐ€์ง€ ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค.
1) "์ˆ˜ํ•™์  adjoint"(์žฌ๊ท€ ๋ฐ ๊ฒŒ์œผ๋ฅธ)
2) "์ˆ˜ํ•™์  ์ „์น˜"(์ด์ƒ์ ์œผ๋กœ๋Š” ์žฌ๊ท€์ ์ด๊ณ  ๊ฒŒ์œผ๋ฅธ)
3) "๊ตฌ์กฐ์  ์ „์น˜"(์ด์ƒ์ ์œผ๋กœ๋Š” ๋น„ ์žฌ๊ท€์ ์ด๊ณ  "์—ด์‹ฌ")

ํ˜„์žฌ ์ƒํ™ฉ : permutedims(C, (2, 1)) ์ฐจ์› C ๊ฒฝ์šฐ "mathematical adjoint"๋Š” ctranspose ๋งคํ•‘๋˜๊ณ , "mathematical transpose"๋Š” transpose ๋งคํ•‘๋˜๊ณ , "structural transpose"๋Š” permutedims(C, (2, 1)) ์— ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค transpose ๊ทธ๋ฆฌ๊ณ  reshape(C, 1, length(C)) ํ•œ dimesional์— ๋Œ€ํ•œ C . ๋ฌธ์ œ : "๊ตฌ์กฐ์  ์ „์น˜"๋Š” ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์ด๋ฉฐ permutedims / reshape ์Šคํ† ๋ฆฌ๋Š” ์‹ค์ œ๋กœ ๋‹ค์†Œ ํ˜ผ๋ž€ ์Šค๋Ÿฝ๊ฑฐ๋‚˜ ๋ถ€์ž์—ฐ ์Šค๋Ÿฝ๊ฑฐ๋‚˜ ์งœ์ฆ๋‚ฉ๋‹ˆ๋‹ค.

๋ฐœ์ƒ ๋ฐฉ๋ฒ• : ์ด์ „์— "๊ตฌ์กฐ์  ์ „์น˜"๋Š” transpose(x::Any) = x , ctranspose(x::Any) = conj(x) ๋ฐ conj(x::Any) = x ์™€ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ ๋ฌด ์ž‘์—… ํด๋ฐฑ์„ ํ†ตํ•ด "์ˆ˜ํ•™์  adjoint"/ "์ˆ˜ํ•™์  ์ „์น˜"์™€ ๊ฒฐํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋Œ€์ฒด๋กœ ์ธํ•ด [c]transpose ๋ฐ ๊ด€๋ จ ์ ‘๋ฏธ์‚ฌ ์—ฐ์‚ฐ์ž ' / .' ๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ "๊ตฌ์กฐ์  ์ „์น˜"์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ํฐ. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋“ค์€ ๋˜ํ•œ ์ผ๋ถ€ ์‚ฌ์šฉ์ž ์ •์˜ ์ˆซ์ž ์œ ํ˜•์— ๋Œ€ํ•œ [c]transpose ๊ด€๋ จ ์ž‘์—…์ด ํ•ด๋‹น ์œ ํ˜•์— ๋Œ€ํ•œ [c]transpose ์ „๋ฌธํ™” ์ •์˜์—†์ด ์ž๋™์œผ๋กœ ์‹คํŒจ (์ž˜๋ชป๋œ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜)ํ•˜๋„๋กํ–ˆ์Šต๋‹ˆ๋‹ค. ์•„์•ผ. ๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ์ผ๋ฐ˜์ ์ธ no-op ํด ๋ฐฑ์ด ์ œ๊ฑฐ๋˜์–ด ํ˜„์žฌ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ง€๊ธˆ ๋ฌด์—‡์„ํ•ด์•ผ ํ•˜๋Š”๊ฐ€์ž…๋‹ˆ๋‹ค.

์ด์ƒ์ ์ธ ๊ฒฐ๊ณผ : "๊ตฌ์กฐ์  ์ „์น˜"๋ฅผ ์œ„ํ•ด ํ†ตํ•ฉ๋˜๊ณ  ์ž์—ฐ์Šค๋Ÿฝ๊ณ  ๊ฐ„๊ฒฐํ•œ ์ฃผ๋ฌธ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์˜๋ฏธ ๋ก ์ ์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ์ˆ˜ํ•™์  adjoint ๋ฐ transpose๋ฅผ ๋™์‹œ์— ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ ๋˜๋Š” ๊ตฌํ˜„์‹œ ๊นŒ๋‹ค๋กœ์šด ์ฝ”๋„ˆ ์ผ€์ด์Šค๋ฅผ ๋„์ž…ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๋‘ ๊ฐ€์ง€ ๊ด‘๋ฒ”์œ„ํ•œ ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

(2) ๊ตฌ๋‘ฃ ์ฃผ๊ฑฑ์€ ์„ธ ๊ฐ€์ง€ ์ž‘์—…์„ ๋‘ ๊ฐœ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ์ด ์ œ์•ˆ์—๋Š” ์„ธ ๊ฐ€์ง€ ํ˜•ํƒœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

(2b) ์œ ํ˜•์˜ "์ˆ˜ํ•™ ์„ฑ"์„ ๋‚˜ํƒ€๋‚ด๋Š” ํŠน์„ฑ์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด์— adjoint / transpose๋ฅผ ์ ์šฉ ํ•  ๋•Œ ์ปจํ…Œ์ด๋„ˆ / ์š”์†Œ ์œ ํ˜•์ด "mathy"์ด๋ฉด ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ์žฌ๊ท€ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์žฅ์  : ๋‘ ๊ฐ€์ง€ ์ž‘์—…. ๋‹ค์–‘ํ•œ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์  : ์ผ๋ฐ˜์ ์ธ no-op [c]transpose ํด ๋ฐฑ๊ณผ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํ•„์š”ํ•œ ํŠน์„ฑ ์ •์˜๊ฐ€์—†๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ์ˆซ์ž ์œ ํ˜•์— ๋Œ€ํ•ด ์ž๋™์œผ๋กœ ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์กฐ ์ „์น˜๋ฅผ "์ˆ˜ํ•™"์œ ํ˜•์œผ๋กœ ์ ์šฉํ•˜๊ฑฐ๋‚˜ ์ˆ˜ํ•™์  ์ „์น˜๋ฅผ "์ˆ˜ํ•™์ด ์•„๋‹Œ"์œ ํ˜•์œผ๋กœ ์ ์šฉ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒฝ์šฐ์— ๊ฐ์ฒด๊ฐ€ "์ˆ˜ํ•™"์ธ์ง€ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (์˜ˆ : ์š”์†Œ ์œ ํ˜•์ด ์ถ”์ƒ์ด๋ฉด ์–ด๋–ป๊ฒŒ๋ฉ๋‹ˆ๊นŒ? ์žฌ๊ท€ / ๋น„ ์žฌ๊ท€ ๊ฒฐ์ •์€ ๋Ÿฐํƒ€์ž„ ๋ฐ ์š”์†Œ ๋ณ„ ๋˜๋Š” ๋Ÿฐํƒ€์ž„์ด๋ฉฐ ์ง‘ํ•ฉ ์œ ํ˜•์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ปจํ…Œ์ด๋„ˆ์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ โ€‹โ€‹๋จผ์ € ์Šค์œ•ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ?)

(2c) adjoint ( ctranspose ) "mathematical adjoint"๋ฐ transpose "mathematical transpose"๋ฅผ ์œ ์ง€ํ•˜๊ณ  adjoint ๋Œ€ํ•œ ํŠน์ˆ˜ (์ผ๋ฐ˜ ๋Œ€์ฒด ์•„๋‹˜) ๋ฉ”์„œ๋“œ๋ฅผ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค. / ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ์Šค์นผ๋ผ ์œ ํ˜•์˜ ๊ฒฝ์šฐ transpose (์˜ˆ : adjoint(s::AbstractString) = s ). ์žฅ์  : ๋‘ ๊ฐ€์ง€ ์ž‘์—…. ์ˆ˜ํ•™์  ์˜๋ฏธ๋ฅผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์  : ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ์œ ํ˜•์— ๋Œ€ํ•ด adjoint / transpose ๋‹จํŽธ์ ์ธ ์ •์˜๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ์ผ๋ฐ˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋ฐฉํ•ดํ•ฉ๋‹ˆ๋‹ค. ๊ตฌ์กฐ ์ „์น˜๋ฅผ "์ˆ˜ํ•™"์œ ํ˜•์— ์ ์šฉ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ œ์•ˆ (1) ๋ฐ (2a)๋Š” (2b) ๋ฐ (2c)๋ณด๋‹ค ํ›จ์”ฌ ๋” ๊ด‘๋ฒ”์œ„ํ•œ ์ง€์›์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

# 19344, # 21037, # 13171 ๋ฐ slack / # linalg์—์„œ ๋” ๋งŽ์€ ํ† ๋ก ์„ ์ฐพ์œผ์‹ญ์‹œ์˜ค. ๋ฒ ์ŠคํŠธ!

๋ฉ‹์ง„ ๊ธ€์„ ์จ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

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

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, ํ›Œ๋ฅญํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” (1)์— ํˆฌํ‘œํ•ฉ๋‹ˆ๋‹ค.

์ข‹์€ ๊ธ€์„ ์“ฐ์„ธ์š”. (1)์˜ ์ฒ ์ž๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ธ์ ‘ : a' (์žฌ๊ท€, ์ง€์—ฐ)
  • ์ˆ˜ํ•™ ์ „์น˜ : conj(a') (์žฌ๊ท€, ๊ฒŒ์œผ๋ฅธ)
  • ๊ตฌ์กฐ์  ์ „์น˜ : a.' (๋น„์žฌ ๊ท€์ , ์—ด๋ง)

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

์ด๋ฅผ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ชจ๋“  ๊ธฐ๋ณธ ์ œ๋„ค๋ฆญ ์œ ํ˜•์„ ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์€ ์•„์ง ๊ฒฐ์ •๋˜์ง€ ์•Š์•˜์ง€๋งŒ @andyferris ์™€ @andreasnoack์€ ์ด๋ฏธ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ƒ๊ฐ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๊ฐ€๋Šฅํ•ด ๋ณด์ž…๋‹ˆ๋‹ค.

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

์˜ˆ๋ฅผ ๋“ค์–ด, vector.' ๋Š” ๋” ์ด์ƒ RowVector ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค ( RowVector ๋Š” ์„ ํ˜• ๋Œ€์ˆ˜ ๊ฐœ๋…์ด๋ฏ€๋กœ "์ด์ค‘"๋ฒกํ„ฐ์— ๋Œ€ํ•œ ์ฒซ ๋ฒˆ์งธ ์‹œ๋„)-๊ฐ„๋‹จํ•˜๊ฒŒ Matrix ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์„ ํ˜• ๋Œ€์ˆ˜์—์„œ "๋น„๊ณต ์•ก ์ „์น˜"๋ฅผ ์›ํ•  ๋•Œ ์ œ๊ฐ€ ์‹ค์ œ๋กœ ํ•˜๋Š” ๊ฒƒ์€ conj(adjoint(a)) ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ๋ชจ๋“  ์„ ํ˜• ๋Œ€์ˆ˜ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋„๋ก ๊ถŒ์žฅํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค (์ง€๊ธˆ๊นŒ์ง€ ๋‚ด๊ฐ€ ์ •๋ง๋กœ ์›ํ•˜๋Š” ๊ฒƒ์ด adjoint ์˜€์„ ๋•Œ ๋‚ด๊ฐ€ ์•Œ๊ณ ์žˆ๋Š” ๋ชจ๋“  ํ–‰๋ ฌ (๋˜๋Š” ๋ฒกํ„ฐ)์„ ์ „์น˜ํ•˜๋Š” ๋ฐ a' ๋Œ€์‹  a.' ์‚ฌ์šฉํ•˜๋Š” MATLAB ์ดํ›„๋กœ ์˜ค๋žซ๋™์•ˆ "๋‚˜์œ"์Šต๊ด€์ด์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. adjoint (๋˜๋Š” ์ด์ค‘)-์ด๋ฆ„ ๋ณ€๊ฒฝ์€ ์—ฌ๊ธฐ์„œ ํฐ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค).

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

๋งˆ์ง€๋ง‰์œผ๋กœ Slack์—์„œ ์ œ์•ˆ ๋œ ์‹คํ–‰ ๊ณ„ํš์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

1) transpose ์„ LinAlg ์—์„œ Base ์˜ฎ๊ธฐ๊ณ  ๋” ์ด์ƒ RowVector ๋งŒ๋“ค์ง€ ์•Š๊ฑฐ๋‚˜ ์žฌ๊ท€ ์ ์ด ์ง€ ์•Š๋Š”๋‹ค๋Š” depwarns (0.7 ๋งŒ ํ•ด๋‹น)๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค (๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ).
2) ctranspose ์„ adjoint
3) Vector , ConjVector ๋ฐ RowVector ๊ฐ€ ' ๋ฐ conj ๋ฐ * ์กฐํ•ฉ์—์„œ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค ' RowVector ์ด๋ฆ„์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. (์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” ๋˜ํ•œ conj(vector) ๊ฒŒ์œผ๋ฅด๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค).
4) conj ๋ฐ ConjMatrix ์™€๋„ ์ž˜ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” lazy matrix adjoint๋ฅผ ๋„์ž…ํ•˜์‹ญ์‹œ์˜ค.
5) A_mul_Bc ๋“ฑ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. A_mul_B! ์„ mul! (๋˜๋Š” *! )๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.
6) ์ด์ต

@stevengj ๋Š” ๋‹ค์Œ

@andyferris , ์Šค์นผ๋ผ์˜ adjoint ๋ฐ dual์€ ์™„๋ฒฝํ•˜๊ฒŒ ์ž˜ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ ctranspose(x::Number) = conj(x) ๊ฐ€ ์ •ํ™•ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ก์„ ์œ„ํ•ด ๋‚˜๋Š” ์ด๊ฒƒ์— ํ™•์‹คํžˆ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ๋Š๋‚Œ์€ ๋Œ€๋ถ€๋ถ„์˜ transpose ์‚ฌ์šฉ์ด "non-mathy"์ด๊ณ  ctranspose (...)์˜ ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์€ ์ˆ˜ํ•™์ ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์•„์ด๋””์–ด๋Š” ์ด๊ฒƒ์„ ๊ณต์‹ํ™”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค : transpose ์˜ ๋ชจ๋“  ์‚ฌ์šฉ์€ "non-mathy"๊ฐ€๋˜๊ณ  adjoint ์˜ ์œ ์ผํ•œ ์‚ฌ์šฉ์€ "mathy"๊ฐ€๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, vector.' ๋Š” ๋” ์ด์ƒ RowVector ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค ( RowVector ๋Š” ์„ ํ˜• ๋Œ€์ˆ˜ ๊ฐœ๋…์ด๋ฏ€๋กœ "์ด์ค‘"๋ฒกํ„ฐ์— ๋Œ€ํ•œ ์ฒซ ๋ฒˆ์งธ ์‹œ๋„). ๊ฐ„๋‹จํ•˜๊ฒŒ Matrix ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ .' ๊ฐ€ ๊ฒŒ์œผ ๋ฅด๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด X .= f.(x, y.') ๋Š” ์—ฌ์ „ํžˆ ํ• ๋‹น๋˜์ง€ ์•Š์•„์•ผํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์— ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. issymmetric(::AbstractMatrix{<:AbstractMatrix}) ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผํ•ฉ๋‹ˆ๊นŒ? transpose ์™€ ์ผ์น˜ํ•˜๋Š” ๋น„ ์žฌ๊ท€ ๊ฒ€์‚ฌ์ผ๊นŒ์š”? ๊ตฌํ˜„์„๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์†Œ๊ฐ€ transpose ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. OTOH issymmetric(::Matrix{String}) ...

Symmetric btw๋กœ ๋ž˜ํ•‘ ๋œ ๊ฒฝ์šฐ ํ˜„์žฌ ์žฌ๊ท€ ์ ์ด ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

julia> A = [rand(2, 2) for i in 1:2, j in 1:2]; A[1, 2] = A[2, 1]; As = Symmetric(A);

julia> issymmetric(A)
false

julia> issymmetric(As)
true

julia> A == As
true

๋„ค, ์ €๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•œ PR์„ ๋งŒ๋“œ๋Š” ์ค‘์ด๊ณ  ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๋ถˆ์ผ์น˜๊ฐ€ ๋งŽ์ด ์žˆ์Šต๋‹ˆ๋‹ค. (๋‚˜๋Š” ์–ผ๋งˆ ์ „์— ๋ฐฐ์—ด ์ฝ”๋“œ์—์„œ transpose , adjoint ๋ฐ conj ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋™์•ˆ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค).

๋‹ฌ๋ฆฌ ์ง€์‹œํ•˜์ง€ ์•Š๋Š” ํ•œ issymmetric(a) == (a == a.') ๋ฐ ishermitian(a) == (a == a') ์™€ ๊ฐ™์€ ๋™์ž‘์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ๋“ค์€ ๊ทธ ์ž์ฒด๋กœ ๋งค์šฐ ์ง๊ด€์  ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋ฉฐ AFAICT์˜ ๊ธฐ์กด issymmetric ์€ Number ์š”์†Œ ์œ ํ˜•์— ๋Œ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค (๋˜๋Š” ์ค‘์ฒฉ ๋œ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ๊ทธ๋‹ค์ง€ ์˜๋ฏธ๊ฐ€์—†๋Š” ๋‹ค๋ฅธ ์‹ค์ˆ˜ / ๊ฐ€์ •์ด ์ž์ฃผ ์žˆ์Šต๋‹ˆ๋‹ค) .

(๋Œ€์ฒด ๊ตฌํ˜„์€ issymmetric(a) == (a == conj(adjoint(a))) ... "์˜ˆ์˜๋‹ค"๊ฑฐ๋‚˜ "๋ฐ์ดํ„ฐ"๋ฐฐ์—ด ( String ๋“ฑ)์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š์ง€๋งŒ Number ๋ฐฐ์—ด๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

๋‹ฌ๋ฆฌ ์ง€์‹œํ•˜์ง€ ์•Š๋Š” ํ•œ issymmetric(a) == (a == a.') ๋ฐ ishermitian(a) == (a == a') ์™€ ๊ฐ™์€ ๋™์ž‘์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ ์˜ฌ๋ฐ”๋ฅธ ์†”๋ฃจ์…˜ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ : ๋‚ด ๋งˆ์Œ์ด ๋ฐ”๋€Œ ์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์นญ์€ ์•„๋งˆ๋„ ์ฃผ๋กœ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ž‘์€ ์ œ์•ˆ : ๋‘ ๋ฒกํ„ฐ์˜ ๊ณฑ ( dotu )์— ๋Œ€ํ•œ ํ•ฉ๊ณ„๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ฒƒ์ด ์ข…์ข… ์œ ์šฉํ•˜๋ฉฐ, ์Šค์นผ๋ผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” x.โ€™y ๋Š”์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํŽธ๋ฆฌํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Matrix ์—์„œ transpose(::Vector) Matrix ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์˜ˆ, RowVector ์ด๋ฏ€๋กœ ์Šค์นผ๋ผ๋ฅผ ๊ฐ€์ ธ์™€์•ผํ•ฉ๋‹ˆ๋‹ค. (์กฐ์˜ฎ๊น€์€ ์žฌ๊ท€ ์ ์ด ์ง€ ์•Š์Šต๋‹ˆ๋‹ค).

์ ‘์„ ์ ์ธ ์ฝ”๋ฉ˜ํŠธ์— ๋Œ€ํ•ด ๋ฏธ์•ˆํ•˜์ง€๋งŒ์ด ์Šค๋ ˆ๋“œ์˜ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด "๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์Šค์นผ๋ผ ๋ง"์— ๋Œ€ํ•ด ๊ณ„์† ์ด์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค. ์ •์˜์— ๋”ฐ๋ผ ๋ฒกํ„ฐ ๊ณต๊ฐ„์˜ ์Šค์นผ๋ผ๋Š” ๋ง๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•„๋“œ๋ฅผ ํ˜•์„ฑํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ ๊ณต๊ฐ„๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜์ง€๋งŒ ์Šค์นผ๋ผ๊ฐ€ ํ•„๋“œ๊ฐ€ ์•„๋‹Œ ๋ง๋งŒ ํ˜•์„ฑํ•˜๋Š” ๋Œ€์ˆ˜ ๊ตฌ์กฐ๋ฅผ "๋ชจ๋“ˆ"์ด๋ผ๊ณ ํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๋ชจ๋“ˆ์€๋ฒ ์ด์Šค์—์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋‚œํ•ดํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. .. ๋ชจ๋“ˆ.

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

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

ํฌ๋กœ์Šค ํฌ์ŠคํŒ… https://github.com/JuliaLang/julia/pull/23424#issuecomment -346678279

์ด pull ์š”์ฒญ์ด ๋‚˜ํƒ€๋‚ด๋Š” # 5332 ๋ฐ # 20978์„ ์•ž์œผ๋กœ ์ด๋™ํ•˜๋ ค๋Š” ๋…ธ๋ ฅ์— ๊ฐ์‚ฌ ๋“œ๋ฆฌ๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ๊ด€๋ จ ๊ณ„ํš์— ์ฐธ์—ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋˜ํ•œ์ด ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๊ฐ€ ๋ฐœ์ „ํ•˜๋Š” ์šฉ์–ด ์„ ํƒ๊ณผ ๋‹ค์šด ์ŠคํŠธ๋ฆผ ์˜ํ–ฅ์— ๋™์ฐธํ•˜๊ณ  ์‹ถ๊ณ , ๊ทธ๋Ÿฌํ•œ ์„ ํƒ์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ตœ์ƒ์˜ ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„ ์„ธํŠธ๋ฅผ ์‚ฐ์ถœํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์ •๊ธฐ์ ์œผ๋กœ ์Šค์Šค๋กœ ํ™•์‹  ์‹œํ‚ค๋ ค๊ณ  ๋…ธ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

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

๊ณ ๋ ค ์„ค๋ช…ํ•˜๊ธฐ mul(A, B) ์—ฌ๊ธฐ์„œ A ๋ฐ B ๋˜์–ด ๋งจ์†์œผ๋กœ, ์ˆ˜๋ฐ˜ ํ–‰๋ ฌ ์‹ธ์„œ, ์ „์น˜ ๊ฐ์‹ธ๊ฑฐ๋‚˜ ๋ฐฐ์—ด ํ”Œ๋ฆฝ ๋ž˜ํ•‘ Matrix S. ์ „์น˜์™€ ๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ๋ฅผ ๋ณ‘ํ•ฉํ•˜์ง€ ์•Š๊ณ  A ๋Š” Matrix , adjoint-wrapped Matrix , transpose-wrapped Matrix (๊ทธ๋ฆฌ๊ณ  ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ B ). ๋”ฐ๋ผ์„œ mul(A, B) ์€ 9 ๊ฐ€์ง€ ์œ ํ˜• ์กฐํ•ฉ์„ ์ง€์›ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ „์น˜์™€ ๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ๋ฅผ ๋ณ‘ํ•ฉํ•˜๋ฉด A ๋Š” Matrix , adjoint-wrapped Matrix , transpose-wrapped Matrix ๋˜๋Š” array-๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋’ค์ง‘์–ด์„œ ํฌ์žฅ ๋œ Matrix (๊ทธ๋ฆฌ๊ณ  ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ B ). ์ด์ œ mul(A, B) ์€ 16 ๊ฐœ์˜ ์œ ํ˜• ์กฐํ•ฉ์„ ์ง€์›ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์ธ์ˆ˜ ์ˆ˜์— ๋”ฐ๋ผ ๊ธฐํ•˜ ๊ธ‰์ˆ˜์ ์œผ๋กœ ์•…ํ™”๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, conflation์—†์ด mul!(C, A, B) ๋Š” 27 ๊ฐ€์ง€ ์œ ํ˜•์˜ ์กฐํ•ฉ์„ ์ง€์›ํ•ด์•ผํ•˜๋Š” ๋ฐ˜๋ฉด, conflation์„ ์‚ฌ์šฉํ•˜๋ฉด mul!(C, A, B) ๋Š” 64 ๊ฐ€์ง€ ์œ ํ˜•์˜ ์ „ํˆฌ๋ฅผ ์ง€์›ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฌผ๋ก  Vector s ๋ฐ ๋น„ Matrix ๋งคํŠธ๋ฆญ์Šค / ์—ฐ์‚ฐ์ž ์œ ํ˜•์„ ํ˜ผํ•ฉ์— ์ถ”๊ฐ€ํ•˜๋ฉด ์ƒํ™ฉ์ด ๋”์šฑ ๋ณต์žกํ•ด์ง‘๋‹ˆ๋‹ค.

์ด ๋ณ€ํ™”๋ฅผ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์—์ด ๋ถ€์ž‘์šฉ์„ ๊ณ ๋ คํ•  ๊ฐ€์น˜๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฒ ์ŠคํŠธ!

์ด ๊ฒŒ์‹œ๋ฌผ์€ github, slack ๋ฐ ๋ถ„๋ฅ˜์— ๋Œ€ํ•œ ์ตœ๊ทผ ๋…ผ์˜๋ฅผ ํ†ตํ•ฉ / ๊ฒ€ํ† ํ•˜๊ณ  ๊ฐ€๋Šฅํ•œ ๊ฒฝ๋กœ๋ฅผ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. (https://github.com/JuliaLang/julia/issues/20978#issuecomment-315902532์˜ ์˜์  ํ›„๊ณ„์ž๋Š” 1.0์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ƒ๊ฐ์—์„œ ํƒœ์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค.)

์˜๋ฏธ ์ƒ์œผ๋กœ ๊ตฌ๋ณ„๋˜๋Š” ์„ธ ๊ฐ€์ง€ ์ž‘์—…์ด ๋ฌธ์ œ๊ฐ€๋ฉ๋‹ˆ๋‹ค.

  • adjoint (์„ ํ˜• ๋Œ€์ˆ˜, ์žฌ๊ท€, ์ด์ƒ์ ์œผ๋กœ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฒŒ์œผ๋ฆ„)
  • ์ „์น˜ (์„ ํ˜• ๋Œ€์ˆ˜, ์žฌ๊ท€, ์ด์ƒ์ ์œผ๋กœ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฒŒ์œผ๋ฆ„)
  • array-flip (abstract-array-ic, non-recursive, ์ด์ƒ์ ์œผ๋กœ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ "lazy")

๋งˆ์Šคํ„ฐ์—์„œ ์ด๋Ÿฌํ•œ ์ž‘์—…์˜ ์ƒํƒœ

  • Adjoint๋Š” adjoint / ' (ํ•˜์ง€๋งŒ ' ํŠน๋ณ„ํžˆ ๋‚ฎ์ถ”์–ด ์ง„ ํ‘œํ˜„์‹์„ A[c|t]_(mul|rdiv|ldiv)_B[c|t][!] ํ˜ธ์ถœ๋กœ ๋‚ฎ์ถ”์–ด ์ค‘๊ฐ„ ์—ด์˜ adjoint / ์ „์น˜๋ฅผ ํ”ผํ•ฉ๋‹ˆ๋‹ค) .

  • ์กฐ์˜ฎ๊น€์€ transpose / .' ( adjoint ์™€ ๋™์ผํ•œ์ฃผ์˜ ์‚ฌํ•ญ).

  • ๋ฐฐ์—ด ํ”Œ๋ฆฝ๋ผ๊ณ  permutedims(C, (2, 1)) ๋Œ€ํ•œ ์ด์ฐจ์› C ๋ฐ reshape(C, 1, length(C)) ์ผ์ฐจ์› ๋Œ€ํ•œ C .

๊ด€๋ จ ๋ฌธ์ œ

  1. 5332 : A[c|t]_(mul|rdiv|ldiv)_B[c|t] ๋กœ์˜ ํŠน๋ณ„ ํ•˜๊ฐ• ๋ฐ ๊ด€๋ จ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ์กฐํ•ฉ ๋ชจ์Œ์ด 1.0๋งŒํผ ์‚ฌ๋ผ์ ธ์•ผํ•ฉ๋‹ˆ๋‹ค. ํŠน๋ณ„ํ•œ ๋‚ฎ์ถ”๊ธฐ / ๊ด€๋ จ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ์ œ๊ฑฐํ•˜๋ ค๋ฉด lazy adjoint ๋ฐ transpose๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  2. 13171 : Adjoint (nรฉe ctranspose ) ๋ฐ ์กฐ์˜ฎ๊น€์€ ์ด์ „์— transpose(x::Any) = x , ctranspose(x::Any) = conj(x) ๋ฐ conj(x::Any) = x ์™€ ๊ฐ™์€ ์ผ๋ฐ˜์ ์ธ no-op ํด๋ฐฑ์„ ํ†ตํ•ด ๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ์™€ ๊ฒฐํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํด๋ฐฑ์œผ๋กœ ์ธํ•ด ์ผ๋ถ€ ์‚ฌ์šฉ์ž ์ •์˜ ์ˆซ์ž ์œ ํ˜•์— ๋Œ€ํ•œ [c]transpose ๊ด€๋ จ ์ž‘์—…์€ ํ•ด๋‹น ์œ ํ˜•์— ๋Œ€ํ•œ [c]transpose ์ „๋ฌธํ™”์—†์ด ์ž๋™์œผ๋กœ ์‹คํŒจ (์ž˜๋ชป๋œ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜)๋ฉ๋‹ˆ๋‹ค. ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ์ž๋™์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์€ ๋‚˜์œ ์†Œ์‹์ด๋ฏ€๋กœ ์ด๋Ÿฌํ•œ ๋Œ€์ฒด๊ฐ€ ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค (# 17075). ๋” ์กฐ์šฉํ•œ ์‹คํŒจ๋ฅผ ๋„์ž…ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  3. 17075, # 17374, # 19205 : ์ด์ „ ํด๋ฐฑ์„ ์ œ๊ฑฐํ•˜๋ฉด ์–ด๋ ˆ์ด ํ”Œ๋ฆฝ์ด ๋œ ํŽธ๋ฆฌํ•ด์กŒ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  (์‚ฌ๊ณผ, ๋‚ด ์ž˜๋ชป) ๊ทธ๋‹ค์ง€ ํฌ์ง€ ์•Š์€ ๊ด€๋ จ ์ง€์› ์ค‘๋‹จ ๊ฒฝ๊ณ ์™€ ํ•จ๊ป˜ ์ œ๊ฑฐ (์ผ์‹œ์ ์œผ๋กœ?)๊ฐ€ ๋ถˆ๋งŒ์„ ์ œ๊ธฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ์— ๋Œ€ํ•œ ๋” ํŽธ๋ฆฌํ•œ ์ฃผ๋ฌธ์ด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  4. 21037 : 1.0์— ๋Œ€ํ•ด ์ง€๊ธˆ ํ˜ผ๋ž€์Šค๋Ÿฌ์šด .' ๊ตฌ๋ฌธ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์€ ๋ฉ‹์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋ณ€๊ฒฝ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒํ•˜๋ ค๋ฉด ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ํŠน๋ณ„ ํ•˜๊ฐ•์„ ์ œ๊ฑฐํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ์œ„ํ•œ ์„ค๊ณ„ ๋ชฉํ‘œ

ํŠน์ˆ˜ ํ•˜๊ฐ• ๋ฐ ๊ด€๋ จ ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ์ œ๊ฑฐํ•˜๊ณ , ์ž๋™ ์‹คํŒจ๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ , ์ „์น˜ ๋ฐ ๋ฐฐ์—ด ๋ฐ˜์ „์„์œ„ํ•œ ์ง๊ด€์ ์ด๊ณ  ํŽธ๋ฆฌํ•œ ์ฃผ๋ฌธ์„ ์ œ๊ณตํ•˜๊ณ  .' ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ์˜ ์ถ”๊ฐ€ ๋ณต์žก์„ฑ๊ณผ ํŒŒ์†์œผ๋กœ ์„ ํ–‰์„ ๋‹ฌ์„ฑํ•˜์‹ญ์‹œ์˜ค.

๋””์ž์ธ ์ œ์•ˆ

์ด ๋ถ„์•ผ๋Š” ๋‘ ๊ฐ€์ง€ ๋””์ž์ธ ์ œ์•ˆ์œผ๋กœ ์ถ•์†Œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  1. adjoint adjoint , transpose conjadjoint ( "conjugate adjoint") ๋ฐ array-flip transpose ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. adjoint ๋ฐ conjadjoint ๋Š” LinAlg ๊ฑฐ์ฃผํ•˜๊ณ  transpose ๋Š” Base ๊ฑฐ์ฃผํ•ฉ๋‹ˆ๋‹ค.

  2. adjoint adjoint , transpose transpose ๋ฐ array-flip flip ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. adjoint ๋ฐ transpose ๋Š” LinAlg ๊ฑฐ์ฃผํ•˜๊ณ  flip ๋Š” Base ๊ฑฐ์ฃผํ•ฉ๋‹ˆ๋‹ค.

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

์ฐจ์ด์ , ๋†’์€ ์ˆ˜์ค€์˜๋ณด๊ธฐ

  1. ๋ณต์žก์„ฑ:

    ์ œ์•ˆ 1์€ array-flip transpose ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ LinAlg ๋ฅผ ๊ฐ•์ œ๋กœ ์ „์น˜ ๋ฐ adjoint ์™ธ์—๋„ array-flip์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ LinAlg ๋Š” ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์—์„œ ์ง€์›ํ•˜๋Š” ํ˜•์‹ ์กฐํ•ฉ ์ง‘ํ•ฉ์„ ํฌ๊ฒŒ ํ™•์žฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. https://github.com/JuliaLang/julia/pull/23424#issuecomment -346678279๋Š” ์ด๋Ÿฌํ•œ ์ถ”๊ฐ€ ๋ณต์žก์„ฑ์„ ์˜ˆ์‹œ๋กœ ๋ณด์—ฌ ์ฃผ๋ฉฐ, ๋‹ค์Œ ๋…ผ์˜๋Š” ์ถ”๊ฐ€ ๋ณต์žก์„ฑ์ด ์กด์žฌ ํ•จ์„ ์•”์‹œ ์ ์œผ๋กœ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    ์ œ์•ˆ 2์—๋Š” LinAlg ์ง€์› ๋งŒ ์ „์น˜ ๋ฐ adjoint๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. LinAlg ์—์„œ๋Š” ์ง€๊ธˆ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  2. ํŒŒ์†:

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

    ์ œ์•ˆ 2๋Š” ๋ชจ๋“  ๊ธฐ์กด ์ž‘์—…์˜ ๊ธฐ๋ณธ ์˜๋ฏธ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

  3. ์ปคํ”Œ ๋ง:

    ์ œ์•ˆ 1์€ ์„ ํ˜• ๋Œ€์ˆ˜ ๊ฐœ๋… (์ „์น˜)์„ Base , ์ถ”์ƒ ๋ฐฐ์—ด ๊ฐœ๋… (๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ)์„ LinAlg ๋กœ ๊ฐ€์ ธ์™€ Base ๋ฐ LinAlg ๊ฐ•๋ ฅํ•˜๊ฒŒ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.

    ์ œ์•ˆ 2๋Š” ์ถ”์ƒ ๋ฐฐ์—ด๊ณผ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•˜์—ฌ ์ „์ž๋Š” ๊ธฐ๋ณธ์—๋งŒ ์žˆ๊ณ  ํ›„์ž๋Š” ์ƒˆ๋กœ์šด ๊ฒฐํ•ฉ์—†์ด LinAlg ์—์„œ๋งŒ ์‚ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ๋ฌด์Œ vs. ํฐ ์‹คํŒจ :

    ์ œ์•ˆ 1์€ transpose ํ˜ธ์ถœํ•˜์—ฌ ์ „์น˜ ์˜๋ฏธ๋ก ์„ ๊ธฐ๋Œ€ํ•  ๋•Œ ์กฐ์šฉํžˆ ์ž˜๋ชป๋œ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค (๋Œ€์‹  ๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ ์˜๋ฏธ๋ก ์„ ์–ป์Œ).

    ์ œ์•ˆ 2์˜ ์•„๋‚ ๋กœ๊ทธ๋Š” ๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ ์˜๋ฏธ๋ก ์„ ๊ธฐ๋Œ€ํ•˜๋Š” ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฐฐ์—ด์—์„œ transpose ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ transpose ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ flip ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  5. .' : .' ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋ณธ ์ธ์ˆ˜๋Š” transpose ์˜ ๊ธธ์ด์ž…๋‹ˆ๋‹ค. ์ œ์•ˆ 1์€ .' ๋ฅผ transpose ๋ฐ conjadjoint ์ด๋ฆ„์œผ๋กœ ๋Œ€์ฒดํ•˜์ง€๋งŒ ์ƒํ™ฉ์„ ๊ฐœ์„ ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์ œ์•ˆ 2๋Š” flip ๋ฐ transpose ์ด๋ฆ„์„ ์ œ๊ณตํ•˜์—ฌ ์ƒํ™ฉ์„ ๊ฐœ์„ ํ•ฉ๋‹ˆ๋‹ค.

1.0 ๊ฒฝ๋กœ์˜ ์ฐจ์ด์ 

1.0์„ ์–ป๋Š” ๊ฒƒ์€ ๊ฐ ์ œ์•ˆ์—์„œ ๋ฌด์—‡์„ ์ทจํ•ฉ๋‹ˆ๊นŒ? ์ œ์•ˆ 2์—์„œ๋Š” 1.0์œผ๋กœ์˜ ๊ฒฝ๋กœ๊ฐ€ ๋” ๊ฐ„๋‹จํ•˜๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ œ์•ˆ 2์— ๋”ฐ๋ฅธ 1.0์œผ๋กœ๊ฐ€๋Š” ๊ธธ

  1. lazy adjoint๋ฅผ ๋„์ž…ํ•˜๊ณ  LinAlg ์— ๋ž˜ํผ ์œ ํ˜•์„ ์ „์น˜ํ•ฉ๋‹ˆ๋‹ค (์˜ˆ Adjoint ๋ฐ Transpose . mul[!] / ldiv[!] / rdiv[!] ๋ฉ”์„œ๋“œ๋ฅผ ํ•ด๋‹น ๋ž˜ํผ ์œ ํ˜•์— ๋””์ŠคํŒจ์น˜ํ•˜๊ณ  ํ•ด๋‹น A[c|t]_{mul|ldiv|rdiv}_B[c|t][!] ๋ฉ”์„œ๋“œ์˜ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ํ›„์ž์˜ ๋ฐฉ๋ฒ•์„ ์ด์ „ ๋ฐฉ๋ฒ•์˜ ์งง์€ ์ž์‹์œผ๋กœ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

    ์ด ๋‹จ๊ณ„๋Š” ์•„๋ฌด๊ฒƒ๋„ ์ค‘๋‹จํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ฆ‰์‹œ .' ์˜ ํŠน๋ณ„ ํ•˜๊ฐ• ๋ฐ ์ง€์› ์ค‘๋‹จ์„ ์ œ๊ฑฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. A[c|t]_{mul|ldiv|rdiv}_B[c|t] ๋ฅผ ์‚ฐ์ถœํ•˜๋Š” ํŠน์ˆ˜ ํ•˜๊ฐ•์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค. ๋Œ€์‹  ' / .' ๋ฅผ Adjoint / Transpose ๋‚ฎ์ถ”์‹ญ์‹œ์˜ค. A[c|t]_{mul|ldiv|rdiv}_B[c|t] ํ˜ธ์ถœ์„ ์ƒ์„ฑํ•˜๋Š” ์ด์ „์— ํŠน๋ณ„ํžˆ ๋‚ฎ์€ ํ‘œํ˜„์‹์€ ๋Œ€์‹  mul / ldiv / rdiv ํ˜ธ์ถœ์ด๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น mul[!] / ldiv[!] / rdiv[!] ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ A[c|t]_{mul|ldiv|rdiv}_B[c|t][!] ์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. .' ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    ์ด ๋‹จ๊ณ„๋Š” 0.7์—์„œ ์ˆ˜ํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (1) Base / LinAlg ์œ ํ˜•์ด ์•„๋‹Œ ๊ฒฝ์šฐ Base A[c|t]_{mul|ldiv|rdiv}_B[c|t] ๋ฉ”์„œ๋“œ๋ฅผ ์ ์ค‘ํ•˜๊ธฐ ์œ„ํ•ด ํŠน์ˆ˜ ํ•˜๊ฐ•์— ์˜์กดํ•˜๋Š” ์ฝ”๋“œ๋Š” ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฝ”๋“œ๋Š” ์ƒˆ๋กœ์šด ์ €ํ•˜ ์ˆ˜์œจ / ๊นจ์ง„ ์ฝ”๋“œ๊ฐ€ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ด์•ผํ•˜๋Š” ๋Œ€์ƒ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ช…์‹œ์ ์ธ MethodError ๋ฅผ ๋ฐฉ์ถœํ•ฉ๋‹ˆ๋‹ค. (2) ๊ณ ๋ฆฝ ๋œ ' s / .' s์— ์˜์กดํ•˜๋Š” ์ฝ”๋“œ๋Š” ์—„๊ฒฉํ•˜๊ฒŒ ์—ด์„ฑ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์‹คํŒจ ๋ชจ๋“œ๋Š” ๋ช…์‹œ ์  MethodError ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ณณ์—์„œ ํŒŒ์†์€ ์ œํ•œ์ ์ด๊ณ  ์‹œ๋„ ๋Ÿฝ์Šต๋‹ˆ๋‹ค.

    ์ด๊ฒƒ์ด 1.0์— ๊ผญ ํ•„์š”ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

    ์ด ์‹œ์ ์—์„œ Adjoint(A) / Transpose(A) ๋Š” lazy adjoint ๋ฐ transpose๋ฅผ ์ƒ์„ฑํ•˜๊ณ  adjoint(A) / transpose(A) ๋Š” eager adjoint ๋ฐ transpose๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ›„์ž์˜ ์ด๋ฆ„์€ ๋ฌด๊ธฐํ•œ์œผ๋กœ ์œ ์ง€๋˜๊ฑฐ๋‚˜, ์›ํ•˜๋Š” ๊ฒฝ์šฐ 0.7์˜ ๋‹ค๋ฅธ ์ฒ ์ž๋กœ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์˜ˆ eagereval(Adjoint(A)) / eagereval(Transpose(A)) ๋ชจ๋“ˆ๋กœ ์ฒ ์ž eagereval ๋˜๋Š” eageradjoint(A) / eagertranspose(A) ์ง€์› ์ค‘๋‹จ์˜ ๊ฒฝ์šฐ adjoint / transpose ์€ (๋Š”) 1.0์—์„œ ์šฉ๋„ ๋ณ€๊ฒฝ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค ( Adjoint(A) / Transpose(A) ์ •๋„๋Š” ์‚ฌ์šฉํ•˜์ง€๋งŒ ํ•„์š”ํ•œ).

    ๋“œ๋””์–ด...

  3. ๋„์ž… flip ๋ฐ / ๋˜๋Š” Flip ์—์„œ Base . ๊ธฐ๋Šฅ ์ถ”๊ฐ€์ด๋ฏ€๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ 1.x์—์„œ ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ์•ˆ 1์— ๋”ฐ๋ฅธ 1.0์œผ๋กœ์˜ ๊ฒฝ๋กœ

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

์ œ์•ˆ 1์˜ ์ฒซ ๋ฒˆ์งธ ๊ฒฝ๋กœ (์นจ๋ฌต ํ•œ ํŒŒ์† ํฌํ•จ)
  1. transpose ์˜ ์˜๋ฏธ ์ฒด๊ณ„๋ฅผ ์ „์น˜์—์„œ ๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ๋ฐ˜๋“œ์‹œ ๋ชจ๋“  transpose ๊ด€๋ จ ๊ธฐ๋Šฅ์˜ ์˜๋ฏธ ์ฒด๊ณ„๋„ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด At_... ํ•˜๊ฑฐ๋‚˜ ..._Bt[!] ๋๋‚˜๋Š” ๋ชจ๋“  A[c|t]_{mul|ldiv|rdiv}_B[c|t][!] ๋ฉ”์„œ๋“œ์—๋Š” ์ž ์žฌ์ ์œผ๋กœ ์˜๋ฏธ ์ˆ˜์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์˜ˆ๋ฅผ ๋“ค์–ด Symmetric / issymmetric ์˜ ์ •์˜ ๋ฐ ๋™์ž‘์„ ๋ณ€๊ฒฝํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. transpose ์ž์ฒด๋ฅผ Base ํ•ฉ๋‹ˆ๋‹ค.

    ์ด๋Ÿฌํ•œ ๋ณ€ํ™”๋Š” ์กฐ์šฉํ•˜๊ณ  ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ๊นจ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  2. conjadjoint ์— LinAlg ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋Š” ์ด์ „ ๋‹จ๊ณ„์—์„œ ๊ฑด๋“œ๋ฆฐ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ์›๋ž˜ ์˜๋ฏธ ํ˜•์‹์œผ๋กœ ๋ณต์›ํ•ด์•ผํ•˜๋ฉฐ ์ด์ œ conjadjoint ์™€ ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ์ด๋ฆ„ (์˜ˆ Aca_... ๋ฐ ..._Bca[!] ์ด๋ฆ„)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. . ๋˜ํ•œ ๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ (ํ˜„์žฌ transpose ), ์ „์น˜ (ํ˜„์žฌ conjadjoint ) ๋ฐ LinAlg adjoint๋ฅผ ๋™์‹œ์— ์ง€์›ํ•˜๋Š” ์ถ”๊ฐ€ ์œ ํ˜• ์กฐํ•ฉ์— ๋Œ€ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (์˜ˆ : ca ๋“ค ์‚ฌ์ด์—์„œ ๋ณ€ํ˜• A[c|t|ca]_{mul|ldiv|rdiv}_B[c|t|ca][!] ).

  3. LinAlg lazy adjoint ๋ฐ ์ „์น˜ ( conjadjoint ๋ผ๊ณ  ํ•จ)๋ฅผ ๋„์ž…ํ•˜๊ณ  Adjoint ๋ฐ ConjAdjoint ๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. (๋ผ๋Š” ๊ฒŒ์œผ๋ฅธ ๋ฐฐ์—ด ํ”Œ๋ฆฝ ์†Œ๊ฐœ transpose ์˜ ํƒ€์ž… ๋ž˜ํผ) Base ๋ง, Transpose . mul[!] / ldiv[!] / rdiv[!] ๋ฉ”์„œ๋“œ๋ฅผ ํ•ด๋‹น ๋ž˜ํผ ์œ ํ˜•์— ๋””์ŠคํŒจ์น˜ํ•˜๊ณ  ํ•ด๋‹น A[c|t|ca]_{mul|ldiv|rdiv}_B[c|t|ca][!] ๋ฉ”์„œ๋“œ์˜ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ํ›„์ž์˜ ๋ฐฉ๋ฒ•์„ ์ด์ „ ๋ฐฉ๋ฒ•์˜ ์งง์€ ์ž์‹์œผ๋กœ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  4. A[c|t]_{mul|ldiv|rdiv}_B[c|t] ๋ฅผ ์‚ฐ์ถœํ•˜๋Š” ํŠน๋ณ„ ํ•˜๊ฐ•์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค. ๋Œ€์‹  ' / .' ๋ฅผ Adjoint / Transpose ๋‚ฎ์ถ”์‹ญ์‹œ์˜ค. A[c|t]_{mul|ldiv|rdiv}_B[c|t] ํ˜ธ์ถœ์„ ์ƒ์„ฑํ•˜๋Š” ์ด์ „์— ํŠน๋ณ„ํžˆ ๋‚ฎ์€ ํ‘œํ˜„์‹์€ ๋Œ€์‹  mul / ldiv / rdiv ํ˜ธ์ถœ์ด๋ฉ๋‹ˆ๋‹ค (์‹œ๋งจํ‹ฑ์ด ์กฐ์šฉํžˆ ๋ณ€๊ฒฝ ๋  ๊ฒƒ์ž„์„ ์ƒ๊ธฐํ•˜์‹ญ์‹œ์˜ค). ํ•ด๋‹น mul[!] / ldiv[!] / rdiv[!] ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ A[c|t]_{mul|ldiv|rdiv}_B[c|t][!] ์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ตœ๊ทผ์— ๋„์ž… ๋œ Aca_... / ...Bca[!] ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ mul[!] / ldiv[!] / rdiv[!] ๋“ฑ๊ฐ€๋ฌผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. .' ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ 0.7์—์„œ ์ง„ํ–‰๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์ž‘์—…์— ๋Œ€ํ•œ ์˜๋ฏธ ๋ณ€๊ฒฝ์€ ๊ด‘๋ฒ”์œ„ํ•˜๊ณ  ์กฐ์šฉํ•œ ํŒŒ์†์„ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ˆ˜ ํ•˜๊ฐ• ์ œ๊ฑฐ๋Š” ์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์ œํ•œ์ ์ด๊ณ  ํฐ ํŒŒ์†์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ Adjoint(A) / Transpose(A) / ConjAdjoint(A) ๋Š” ๊ฐ๊ฐ lazy adjoint, array-flip ๋ฐ transpose๋ฅผ ์ƒ์„ฑํ•˜๊ณ  adjoint(A) / transpose(A) / conjadjoint(A) ๋Š” ๊ฐ๊ฐ eager adjoint, array-flip ๋ฐ transpose๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ํ›„์ž์˜ ์ด๋ฆ„์€ ๋ฌด๊ธฐํ•œ์œผ๋กœ ์œ ์ง€๋˜๊ฑฐ๋‚˜ ์›ํ•˜๋Š” ๊ฒฝ์šฐ 0.7์—์„œ ๋‹ค๋ฅธ ์ฒ ์ž์— ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (์œ„ ์ฐธ์กฐ).

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

์ œ์•ˆ 1์— ๋”ฐ๋ฅธ ๋‘ ๋ฒˆ์งธ ๊ฒฝ๋กœ (์นจ๋ฌต ํ•œ ํŒŒ์† ๋ฐฉ์ง€)
  1. ์—ด๋ง ์†Œ๊ฐœ conjadjoint ์—์„œ LinAlg . ํ˜„์žฌ transpose ์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ธฐ๋Šฅ ๋ฐ ๋ฉ”์„œ๋“œ (์˜ˆ : A[c|t]_{mul|ldiv|rdiv}_B[c|t][!] ๊ด€๋ จ t A[c|t]_{mul|ldiv|rdiv}_B[c|t][!] ๋ฉ”์„œ๋“œ ํฌํ•จ)๋ฅผ conjadjoint ๋ฐ ํŒŒ์ƒ ์ด๋ฆ„์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  transpose ๊ด€๋ จ ์ด๋ฆ„์„ ์ƒˆ๋กœ์šด conjadjoint ๋“ฑ๊ฐ€๋ฌผ์˜ ์งง์€ ํ•˜์œ„๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ชจ๋“  transpose ๊ด€๋ จ ์ด๋ฆ„์„ conjadjoint ํ•ด๋‹นํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  2. (๋ผ๊ณ  ๊ฒŒ์œผ๋ฅธ ์ˆ˜๋ฐ˜ ํ–‰๋ ฌ๊ณผ ์ „์น˜ ์†Œ๊ฐœ conjadjoint ์˜ ํƒ€์ž… ๋ž˜ํผ) LinAlg ๋งํ•  Adjoint ๋ฐ ConjAdjoint . mul[!] / ldiv[!] / rdiv[!] ๋ฉ”์„œ๋“œ๋ฅผ ํ•ด๋‹น ๋ž˜ํผ ์œ ํ˜•์— ๋””์ŠคํŒจ์น˜ํ•˜๊ณ  ํ•ด๋‹น A[c|ca]_{mul|ldiv|rdiv}_B[c|ca][!] ๋ฉ”์„œ๋“œ์˜ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ํ›„์ž์˜ ๋ฐฉ๋ฒ•์„ ์ด์ „ ๋ฐฉ๋ฒ•์˜ ์งง์€ ์ž์‹์œผ๋กœ ๋‹ค์‹œ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

  3. Base ์— Transpose ๋ผ๋Š” lazy array-flip ๋ž˜ํผ ์œ ํ˜•์„ ๋„์ž…ํ•ฉ๋‹ˆ๋‹ค (์•ฝ๊ฐ„ ํ˜ผ๋ž€์Šค๋Ÿฝ๊ฒŒ๋„, ๋™์‹œ์— transpose ๋Š” ์ „์น˜ ์˜๋ฏธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ conjadjoint ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ). ๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ ( Transpose )์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ๋ฅผ Base ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฐฐ์—ด ๋’ค์ง‘๊ธฐ๋ฅผ ๋™์‹œ์— ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ์ถ”๊ฐ€ ์œ ํ˜• ์กฐํ•ฉ์— ๋Œ€ํ•ด LinAlg ์— ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค (ํ˜„์žฌ Transpose ,ํ•˜์ง€๋งŒ transpose ์•„๋‹˜), ์ „์น˜ (ํ˜„์žฌ conjadjoint ๋ฐ ConjAdjoint ), LinAlg adjoint๋Š” ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค (์˜ˆ : mul[!] / rdiv[!] / ldiv[!] A[c|t|ca]_{mul|ldiv|rdiv}_B[c|t|ca][!] ํ˜„์žฌ ์กด์žฌํ•˜์ง€ ์•Š์Œ).

  4. A[c|t]_{mul|ldiv|rdiv}_B[c|t] ๋ฅผ ์‚ฐ์ถœํ•˜๋Š” ํŠน๋ณ„ ํ•˜๊ฐ•์„ ์ œ๊ฑฐํ•˜์‹ญ์‹œ์˜ค. ๋Œ€์‹  ' / .' ๋ฅผ Adjoint / Transpose ๋‚ฎ์ถ”์‹ญ์‹œ์˜ค. A[c|t]_{mul|ldiv|rdiv}_B[c|t] ํ˜ธ์ถœ์„ ์ƒ์„ฑํ•˜๋Š” ์ด์ „์— ํŠน๋ณ„ํžˆ ๋‚ฎ์€ ํ‘œํ˜„์‹์€ ๋Œ€์‹  mul / ldiv / rdiv ํ˜ธ์ถœ์ด๋ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น mul[!] / ldiv[!] / rdiv[!] ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ A[c|t]_{mul|ldiv|rdiv}_B[c|t][!] ์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค. .' ์ค‘๋‹จ.

์•ž์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ 0.7๋กœ ์ด๋™ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์กฐ์šฉํ•œ ํŒŒ์†์ด์—†๊ณ , ์œ„์—์„œ ์„ค๋ช…ํ•œ๋Œ€๋กœ ํŠน์ˆ˜ ํ•˜๊ฐ• ์ œ๊ฑฐ์—์„œ ํฐ ํŒŒ์† ๋งŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด ์‹œ์ ์—์„œ Adjoint(A) / Transpose(A) / ConjAdjoint(A) ๋Š” ๊ฐ๊ฐ lazy adjoint, array-flip ๋ฐ transpose๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. adjoint(A) / conjadjoint(A) ๋Š” ๊ฐ๊ฐ eager adjoint ๋ฐ transpose๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. transpose(A) ๋Š” conjadjoint ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. transpose ๋Š” ์›ํ•˜๋Š” ๊ฒฝ์šฐ 1.0์—์„œ ์šฉ๋„๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. adjoint ๋Š” ๋ฌด๊ธฐํ•œ์œผ๋กœ ์œ ์ง€๋˜๊ฑฐ๋‚˜ 0.7์˜ ๋‹ค๋ฅธ ์ฒ ์ž๋ฅผ ์œ„ํ•ด ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. conjadjoint ์ฒ ์ž๋ฅผ ์“ฐ๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ 0.7๋กœ ์ง์ ‘ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1 ๋‹จ๊ณ„์™€ 2 ๋‹จ๊ณ„๋ฅผ ๋‹ค์†Œ ํ†ตํ•ฉํ•˜์—ฌ ์ž‘์—… / ์ดํƒˆ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋” ์–ด๋ ต๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.

#

์ฝ์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

ํ›Œ๋ฅญํ•œ ๊ธ€์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ œ์•ˆ 2์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€์ ์ธ ์ด์œ ๋Š” conjugate adjoint๊ฐ€ ์ „ํ˜€ ํ‘œ์ค€ ์šฉ์–ด๊ฐ€ ์•„๋‹ˆ๋ฉฐ ๊ฐœ์ธ์ ์œผ๋กœ ๋งค์šฐ ํ˜ผ๋ž€ ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ํ™œ์šฉ์ด ์ผ์–ด๋‚œ๋‹ค๋Š” ๊ฒƒ์„ ์•”์‹œํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค).

๋‚˜๋Š” ์œ„์˜ ์ •๊ตํ•œ ํ† ๋ก ์„ ์ฝ์œผ๋ ค๊ณ ํ–ˆ์ง€๋งŒ ์–ด๋–ค ์‹œ์ ์—์„œ ์ˆ˜ํ•™์ ์ธ transpose ๊ฐ€ ์žฌ๊ท€ ์ ์ด์–ด์•ผํ•œ๋‹ค๊ณ  ๊ฒฐ์ • / ๋™๊ธฐํ™”๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ (7 ์›” 14 ์ผ์—์„œ 18 ์ผ ์‚ฌ์ด์—) ์‚ฌ์ ์ธ ํ† ๋ก ์—์„œ ๋’ค๋”ฐ๋ฅธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€๊ณ , ๊ทธ ํ›„ ๊ฐ‘์ž๊ธฐ ์ˆ˜ํ•™์  ๊ตฌ์กฐ์  ์ „์น˜๊ฐ€ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
@ Sacha0 ๋Š” ๊ทธ๊ฒƒ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋ฐœ์ƒ ๋ฐฉ๋ฒ• : ์ด์ „์— "๊ตฌ์กฐ์  ์ „์น˜"๋Š” "์ˆ˜ํ•™์  adjoint"/ "์ˆ˜ํ•™์  ์ „์น˜"์™€ ๊ฒฐํ•ฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” (๊ตฌ์กฐ์ ) ์ „์น˜๊ฐ€ "adjoint"์™€ ํ•ฉ์ณ ์กŒ๋Š”๋ฐ ๋™์˜ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ "์ˆ˜ํ•™์  ์ „์น˜"๊ฐ€ ๊ฐ‘์ž๊ธฐ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ์™„์ „์„ฑ / ์ž๋ฆฝ์„ฑ์„ ์œ„ํ•ด ๊ทธ ๊ฐœ๋…๊ณผ ๊ทธ๊ฒƒ์ด ์žฌ๊ท€ ์ ์ด์–ด์•ผํ•˜๋Š” ์ด์œ ๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ๋ฐ˜๋ณต / ์š”์•ฝ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

ํ›Œ๋ฅญํ•œ ๊ธ€์„ ์ž‘์„ฑํ•ด ์ฃผ์‹  @ Sacha0 ์—๊ฒŒ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ œ์•ˆ 2๋ฅผ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค (adjoint adjoint ํ˜ธ์ถœ, transpose ์ „์น˜ ๋ฐ array-flip flip . adjoint ๋ฐ transpose ๋Š” LinAlg ๊ฑฐ์ฃผ flip ๋Š” Base ๊ฑฐ์ฃผํ•ฉ๋‹ˆ๋‹ค.). ๋‚˜์—๊ฒŒ ์ด๊ฒƒ์€ ์ตœ์ƒ์˜ ์ตœ์ข… ๊ฒฐ๊ณผ (์ฃผ์š” ๊ด€์‹ฌ์‚ฌ๊ฐ€๋˜์–ด์•ผ ํ•จ)๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ v1.0์— ๋Œ€ํ•œ ๋” ๊นจ๋—ํ•œ ๋ฐฉ๋ฒ•์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ์š”์ ์— ๋™์˜ํ•˜๋ฏ€๋กœ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ์„ค๋ช…์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„์žฌ ๊ท€์  transpose ์— ์ฐฌ์„ฑํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ์ฃผ์žฅ์€ .' -๊ตฌ๋ฌธ์ด ๋งค์šฐ ํŽธ๋ฆฌํ•˜๋ฏ€๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด Matrix{String} ์ž…๋‹ˆ๋‹ค. ์ด ๊ตฌ๋ฌธ์„ ๊ฐ€์ •ํ•˜๋ฉด (# 21037)๋ฅผ ๋ฉ€๋ฆฌ๊ฐ€๋Š” ์‚ฌ๋žŒ์ด ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€์žˆ๋‹ค transpose(A) ๋Œ€์‹  A.' , ๊ทธ๋•Œ๋Š” ์ƒ๊ฐ flip ฮฑ- ํ•จ์ˆ˜๊ฐ€ (์งง์€ ํ™˜์˜ ๋ณดํƒฌ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค transpose(A) ๋ณด๋‹ค ๋ช…ํ™•ํ•˜๊ณ  permutedims(A, (2,1)) ๋ณด๋‹ค ํ™•์‹คํžˆ ์ข‹์Šต๋‹ˆ๋‹ค).

์ œ์•ˆ 2๊ฐ€ ์ œ๊ณตํ•˜๋Š” LinAlg ์™€ Base ์‚ฌ์ด์˜ ๋ถ„๋ฆฌ๋„ ๋งค์šฐ ์ข‹์Šต๋‹ˆ๋‹ค. LinAlg ๋Š” Transpose ๋ฐ Adjoint ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ• ๋งŒ ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€์žˆ์„๋ฟ๋งŒ ์•„๋‹ˆ๋ผ transpose ๋ฐ adjoint ๊ณ ๋ คํ•œ๋‹ค๋Š” ์ ์„ ๋ถ„๋ช…ํžˆํ•ฉ๋‹ˆ๋‹ค LinAlg ์—ฐ์‚ฐ์ด๋˜๊ณ  flip ๋Š” ํ–‰๋ ฌ์˜ ์ฐจ์›์„ ๋’ค์ง‘๋Š” ์ผ๋ฐ˜ AbstractMatrix ํ•ญ๋ชฉ์ด๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ transpose(::Matrix{String}) ๋“ฑ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ถˆ๋งŒ์„ ๋งŽ์ด ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๊นŒ? ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์–ด์จŒ๋“  ์ฒ˜์Œ๋ถ€ํ„ฐ ๋’ค์ง‘ํžŒ ํ–‰๋ ฌ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด ๋ช…๋ช… ์ฒด๊ณ„ (์ œ์•ˆ 2)๊ฐ€ ์‹ค์ œ๋กœ ๋” ์ข‹์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Adjoint ๋ฐ Transpose๋Š” ์„ ํ˜• ๋Œ€์ˆ˜ํ•™์—์„œ ๊ฝค ํ‘œ์ค€ ์šฉ์–ด์ด๋ฉฐ ๋œ ๊นจ์ง€๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ˆ˜ํ•™์  ์ „์น˜๊ฐ€ ์žฌ๊ท€ ์ ์ด์–ด์•ผํ•œ๋‹ค๊ณ  ๊ฒฐ์ • / ๋™๊ธฐํ™” ๋œ ์‹œ์ ์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

@Jutho ๊ทธ๊ฒƒ์€ adjoint์™€ ๊ฐ™์€ ์ธ์ˆ˜์ž…๋‹ˆ๋‹ค (๋ณต์†Œ์ˆ˜์˜ adjoint๋Š” conjugate์ž…๋‹ˆ๋‹ค (๋ณต์†Œ์ˆ˜๋Š” ์œ ํšจํ•œ ๋žญํฌ 1 ๋ฒกํ„ฐ ๊ณต๊ฐ„ ๋ฐ ์„ ํ˜• ์—ฐ์‚ฐ์ž์ด๋ฏ€๋กœ ๋‚ด์  ๋ฐ adjoint ๊ฐœ๋…์ด ์ ์šฉ๋จ). ๋ธ”๋ก ํ–‰๋ ฌ์˜ adjoint ์žฌ๊ท€ ์ ์ž…๋‹ˆ๋‹ค ...). ์˜ˆ๋ฅผ ๋“ค์–ด ์‚ฌ๋žŒ๋“ค์€ ์ค‘์ฒฉ ๋œ ์‹ค์ˆ˜ ํ–‰๋ ฌ๋กœ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ์›ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. "์‹ค์ œ ํ–‰๋ ฌ ๋˜๋Š” ๋ฒกํ„ฐ์˜ ์ธ์ ‘"์— ๋Œ€ํ•ด .' ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋งŽ์€ ์ฝ”๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ์ด ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ' ๋Š” ์œ ํšจ ํ• ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋” ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค (๋ณต์žกํ•œ ๊ฐ’ ๋ฐ / ๋˜๋Š” ์ค‘์ฒฉ ๋  ์ˆ˜์žˆ๋Š” ๋ฐฐ์—ด์—์„œ ์ž‘๋™). ์ค‘์ฒฉ ๋œ ๋ณตํ•ฉ ํ–‰๋ ฌ์— ๋Œ€ํ•œ ์žฌ๊ท€ ์ „์น˜์˜๋ณด๋‹ค ์ง„์ •ํ•œ ์‚ฌ์šฉ์€ ๋ฐฉ์ •์‹์ด conj(adjoint(a)) ์ค„ ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๋“œ๋ฌผ์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค (๊ด€๋ จ๋œ ํ•จ์ˆ˜๊ฐ€์—†๋Š” ๊ฒฝ์šฐ ๋งŒ์กฑํ• ๋งŒํผ ๋“œ๋ฌผ๊ฒŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ํ† ๋ก ๊ณผ ๋‹ค๋ฅธ ๊ณณ์—์„œ ๋‹ค์–‘ํ•œ ์‚ฌ๋žŒ๋“ค์ด "์ˆ˜ํ•™์  ์ „์น˜"์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ถ€๋ฅด๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” conjadoint ๋ฅผ ์„ ํƒํ–ˆ์ง€๋งŒ transpose ์ž์ฒด๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ํ›Œ๋ฅญํ•œ ์šฉ์–ด IMO๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค). ์„ ํ˜• ๋Œ€์ˆ˜ํ•™์—์„œ ๋ธ”๋ก ํ–‰๋ ฌ์˜ ๋ธ”๋ก์„ ์žฌ ๋ฐฐ์—ดํ•˜์ง€๋งŒ ๋ธ”๋ก ์ž์ฒด์— ์•„๋ฌด๊ฒƒ๋„ํ•˜์ง€ ์•Š๋Š” ๋น„ ์žฌ๊ท€ ์—ฐ์‚ฐ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ transpose(::Matrix{String}) ๋“ฑ์ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ถˆ๋งŒ์„ ๋งŽ์ด ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€์ž…๋‹ˆ๊นŒ? ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์–ด์จŒ๋“  ์ฒ˜์Œ๋ถ€ํ„ฐ ๋’ค์ง‘ํžŒ ํ–‰๋ ฌ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ค„๋ฆฌ์•„์˜ ๋ฐฉ์†ก ์šด์˜์—์„œ๋Š” ์ด๋Ÿฐ ๊ฒƒ์ด ์ƒ๋‹นํžˆ ๋ฐ”๋žŒ์งํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ผ๋ถ€ ๋ฐ์ดํ„ฐ์˜ ์™ธ๋ถ€ (Cartesian) ๊ณฑ์„ ๊ฐ€์ ธ ์™€์„œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ map(f, product(a, b)) ๋Œ€์‹  broadcast(f, a, transpose(b)) ๋˜๋Š” ๊ฐ„๋‹จํžˆ f.(a, b.') ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ์ˆ˜์˜ ์บ๋ฆญํ„ฐ๋กœ ๋งŽ์€ ํž˜์„ ๋ฐœํœ˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ :์ด ๊ณต๊ฐ„ (์˜ˆ : flip )์— ๋” ๋งŽ์€ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด permutedims(a) = permutedims(a, (2,1)) ์˜ ์ˆœ์—ด์— ๋Œ€ํ•œ ๊ธฐ๋ณธ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ์ด๊ฒƒ์€ flip ๋งŒํผ ์งง์ง€๋Š” ์•Š์ง€๋งŒ ์ „์ฒด permutedims(a, (2,1)) ํ˜•์‹๋ณด๋‹ค ํ›จ์”ฌ ๋œ ๋ถˆ์พŒํ•ฉ๋‹ˆ๋‹ค (์‚ฌ์šฉ์ž์—๊ฒŒ๋ณด๋‹ค ์ผ๋ฐ˜์ ์ธ ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด ๊ต์œกํ•˜๋Š” ๋ถ€์ž‘์šฉ์ด ์žˆ์Šต๋‹ˆ๋‹ค).

( @ Sacha0 ์—ฌ๊ธฐ์— ๊ธ€์„ Adjoint ์™€ Transpose ๋ž˜ํผ ์ค‘์—์„œ ์„ ํƒํ•˜๊ฑฐ๋‚˜ RowVector + MappedArray ์ด์ „์— ๊ณ„ํš๋œ ํ–‰๋ ฌ (์•„๋งˆ๋„ PermutedDimsArray ), ๋‚˜๋Š” ์—ฌ์ „ํžˆ ํ›„์ž๋ฅผ ์„ ํ˜ธํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค ...)

์ค‘์ฒฉ ๋œ ๋ณต์†Œ ํ–‰๋ ฌ์— ๋Œ€ํ•œ ์žฌ๊ท€ ์ „์น˜์˜๋ณด๋‹ค ์ง„์ •ํ•œ ์‚ฌ์šฉ์€ ๋ฐฉ์ •์‹์ด conj(adjoint(a)) ์ œ๊ณต ํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฐฉ์ •์‹์—์„œ conj(adjoint(a)) ๋ฅผ ์–ป์œผ๋ฉด ์‹ค์ œ๋กœ conj ์ด ํ–‰๋ ฌ ํ•ญ๋ชฉ์— ์ ์šฉํ•˜๊ณ  ์‹ถ๊ณ  adjoint ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์–ด๋–ป๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? adjoint.(adjoint(a))

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

๋ฒกํ„ฐ์˜ adjoint๋Š” ๋ฒกํ„ฐ๋ฅผ ์Šค์นผ๋ผ์— ๋งคํ•‘ํ•˜๋Š” ์„ ํ˜• ์—ฐ์‚ฐ์ž ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, a๊ฐ€ ๋ฒกํ„ฐ ์ธ ๊ฒฝ์šฐ a '* a๋Š” ์Šค์นผ๋ผ ์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค.

Julia Base์˜ ์ž‘๋™ ๋ฐฉ์‹๊ณผ ํ˜ธํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. a=[rand(2,2),rand(2,2)] ๋งŒ๋“ค๊ณ  a'*a ๊ด€์ฐฐํ•˜์‹ญ์‹œ์˜ค. ์Šค์นผ๋ผ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด a ๋Š” ํ–‰๋ ฌ๋กœ ์ฑ„์›Œ์ง„ ๋ฒกํ„ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด์ œ ํ–‰๋ ฌ์ž…๋‹ˆ๊นŒ? ์œ„๋Š” ์‹ค์ œ๋กœ 2x2 ํ–‰๋ ฌ์˜ ๋ง์„ ๋ชจ๋“ˆ์„ ์ •์˜ํ•œ ์Šค์นผ๋ผ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์—๋งŒ ์Šค์นผ๋ผ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๋Ÿฌํ•œ ๋งฅ๋ฝ์—์„œ ์œ„์˜ ๊ฒฐ๊ณผ๊ฐ€ ์˜๋„ ํ•œ ๊ฒฐ๊ณผ๋ผ๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ ํด๋ฆฌ๋“œ ๋‚ด๋ถ€ ์ œํ’ˆ์€ ์–ด์จŒ๋“  ๋ชจ๋“ˆ ๋“ฑ์˜ ๋งฅ๋ฝ์—์„œ ๊ฑฐ์˜ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ Base๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ ๋™์ž‘์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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

๊ทธ๋ ‡๋‹ค๋ฉด Julia์™€ ๊ฐ™์€ ๊ฐ•๋ ฅํ•œ ์œ ํ˜• ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ˆœํžˆ ๋ธ”๋ก ํ–‰๋ ฌ ์ „์šฉ ์œ ํ˜•์„ ๊ฐ–๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์•…๋งˆ์˜ ์˜นํ˜ธ์ž ์—ญํ•  :

  • ์‹ค์ œ ์ž‘์—…์„ ์œ„ํ•ด adjoint์˜ ํ˜„์žฌ ์žฌ๊ท€ ๋™์ž‘์„ ์‹ค์ œ๋กœ ์‚ฌ์šฉ / ์˜์กดํ•˜๋Š” ์‚ฌ๋žŒ์€ ๋ช‡ ๋ช…์ž…๋‹ˆ๊นŒ?
  • ์ด๋Ÿฌํ•œ ์žฌ๊ท€ ์  ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์–ธ์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? (ํ–‰๋ ฌ์˜ ์…€์„ ์‚ฌ์šฉํ•˜๋Š” Matlab์€ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค)

๋งํ–ˆ๋“ฏ์ด, ๋‚˜๋Š” ํŠนํžˆ transpose ์ผ€์ด์Šค์˜ ๊ฒฝ์šฐ (์œ„์˜ ๋ชจ๋“  ํ† ๋ก ์„ ์ฝ์€ ํ›„์—๋„) ์œ ํšจ์„ฑ์— ์˜๋ฌธ์„ ์ œ๊ธฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฐ˜๋“œ์‹œ ๋ฐ˜๋Œ€ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์•„๋งˆ๋„ ๋‚˜๋ฅผ ๊ธˆ์ง€ / ์ถ”๋ฐฉ ๋‹นํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

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

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

a=[rand(2,2),rand(2,2)] ๋งŒ๋“ค๊ณ  a'*a ๊ด€์ฐฐํ•ฉ๋‹ˆ๋‹ค. ์Šค์นผ๋ผ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ a ์˜ "์Šค์นผ๋ผ ๋ง"์€ 2x2 ํ–‰๋ ฌ์˜ ๋ง์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฒƒ์€ adjoint๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ ์–ธ์–ด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

a'*a ์ด Julia์—์„œ ํ˜„์žฌ ์ž‘๋™ํ•˜๋Š” (๋˜๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”) ๋ฐฉ์‹์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™

์ƒˆ ์Šค์นผ๋ผ ํ•„๋“œ ์œ ํ˜•์„ ์ง์ ‘ ์ •์˜ํ•˜๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— adjoint ๋ฐ transpose ์™ธ์— conj ๋ฅผ ์ •์˜ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์€ ์ด์ƒํ•œ ๋ถ€๋‹ด์ž…๋‹ˆ๋‹ค. ํ–‰๋ ฌ์—์„œ

์ด ๋ถ€๋‹ด์€ ์‹ค์ œ๋ณด๋‹ค ์‹ฌ๋ฏธ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. Number ์˜ ํ•˜์œ„ ์œ ํ˜•์œผ๋กœ ๋งŒ๋“ค์–ด๋„ ๊ดœ์ฐฎ๋‹ค๋ฉด ์•„๋ฌด๊ฒƒ๋„ ์ •์˜ ํ•  ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ Number ์ด ์˜ณ์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋”๋ผ๋„ ์ •์˜๊ฐ€ ๋„ˆ๋ฌด ์‚ฌ์†Œํ•ด์„œ ๊ทธ๋“ค์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์€ ๊ฑฐ์˜ ๋ถ€๋‹ด์ด๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด Julia์™€ ๊ฐ™์€ ๊ฐ•๋ ฅํ•œ ์œ ํ˜• ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ˆœํžˆ ๋ธ”๋ก ํ–‰๋ ฌ ์ „์šฉ ์œ ํ˜•์„ ๊ฐ–๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

https://github.com/KristofferC/BlockArrays.jl/ ๊ธฐ์—ฌ์ž ํ™˜์˜ :)

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

@StefanKarpinski : ์Šค์นผ๋ผ ๋ง์˜ ์˜ˆ๋Š” ์žฌ๊ท€์™€ ์ •ํ™•ํžˆ ๋ชจ์ˆœ๋ฉ๋‹ˆ๋‹ค. 2x2 ํ–‰๋ ฌ ์ž์ฒด๊ฐ€ ์Šค์นผ๋ผ์ž…๋‹ˆ๊นŒ, ์•„๋‹ˆ๋ฉด ์ •์˜๊ฐ€ ์žฌ๊ท€์ ์ด๊ณ  ๊ธฐ๋ณธ Number ์œ ํ˜•์ด ์Šค์นผ๋ผ์ž…๋‹ˆ๊นŒ?

์ „์ž์˜ ๊ฒฝ์šฐ ์‹ค์ œ๋กœ ๋ฒกํ„ฐ ๊ณต๊ฐ„ ๋Œ€์‹  โ€‹โ€‹๋ชจ๋“ˆ์ด ์žˆ์œผ๋ฉฐ ํ•ด๋‹น '์Šค์นผ๋ผ'์— ๋Œ€ํ•ด conj ๋˜๋Š” adjoint ๋ฅผ ์›ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๋ถ€ ์ œํ’ˆ๊ณผ adjoint๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

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

dot ๋Š” vecdot ์•„๋‹ˆ๋ผ dot ์žฌ๊ท€ ์ ์œผ๋กœ ํ˜ธ์ถœํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ–‰๋ ฌ์— ๋Œ€ํ•œ ํ‘œ์ค€ ๋‚ด๋ถ€ ๊ณฑ์„ ์ •์˜ํ•˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ํ–‰๋ ฌ ๋ฒกํ„ฐ์— ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ „์น˜๊ฐ€ ์žฌ๊ท€ ์ ์ด๋ผ๋Š” ์‚ฌ์‹ค์— ํ•ญ์ƒ ๋†€๋ž๊ณ  .. ๋ˆ„๊ตฌ๋„ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์ƒ์ƒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. (๋‚˜๋Š”์ด ๋…ผ์˜ ๋•Œ๋ฌธ์—โ€œ์„ ํ˜•์ง€๋„์˜ ์ „์น˜โ€์œ„ํ‚คํ”ผ๋””์•„ ๊ธฐ์‚ฌ์— ๋Œ€ํ•œ ๊ฒฌํ•ด๊ฐ€ ์ ์–ด๋„ ์„ธ ๋ฐฐ๊ฐ€๋˜์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.)

์ €๋„ ์ข…์ข… ์žฌ๊ท€ ์  ์ •์˜๊ฐ€ ๋ถˆ์•ˆ์ •ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์œผ๋ฉฐ ์ผ๋ฐ˜์ ์œผ๋กœ @Jutho๊ฐ€ ํ‘œํ˜„ํ•œ ๊ฒฌํ•ด๋ฅผ ๊ณต์œ ํ–ˆ์Šต๋‹ˆ๋‹ค (ํ•˜์ง€๋งŒ ๋‹ค์‹œ ์šฐ๋ฆฌ๋Š” ๋งค์šฐ ์œ ์‚ฌํ•œ ํ›ˆ๋ จ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค).

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

์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ด‘๋ฒ”์œ„ํ•˜๊ฒŒ ๋™์˜ํ•˜๋Š” ๊ฒƒ

  1. ์Šค์นผ๋ผ๋Š” ์œ ํšจํ•œ ์ˆœ์œ„ 1 ์„ ํ˜• ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. Julia์˜ ๊ฐ•๋ ฅํ•œ ์œ ํ˜• ์‹œ์Šคํ…œ์„ ๊ฐ์•ˆํ•  ๋•Œ adjoint ์™€ ๊ฐ™์€ LinAlg ๊ฐœ๋…์ด ์ ์šฉ๋˜์ง€ ์•Š์„ ์ด์œ ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด adjoint(z::Complex) = conj(z) ์ •์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. (์Šค์นผ๋ผ์˜ ๋ฒกํ„ฐ์™€ ํ–‰๋ ฌ ์™ธ์—๋„ LinAlg ๊ฐœ๋…์€ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ ํ™•์žฅ ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค (์‚ฌ์šฉ์ž์— ์˜ํ•ด). @stevengj ๋Š” ์˜ˆ๋ฅผ ๋“ค์–ด ๋ฌดํ•œ ํฌ๊ธฐ์˜ ๋ฒกํ„ฐ ๊ณต๊ฐ„ (Hilbert ๊ณต๊ฐ„)์„ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค).
  2. ์šฐ๋ฆฌ๋Š” ํ‘œํ˜„์ด ๋‹ค๋ฅธ ์Šค์นผ๋ผ๋ฅผ ์–ด๋–ป๊ฒŒ ๋“  ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์˜ ํ”„๋กœํ†  ํƒ€์ž… ์˜ˆ์ œ๋Š” ๋ณต์†Œ์ˆ˜ z = x + y*im ๋Š” Z = x*[1 0; 0 1] + y*[0 1; -1 0] ๋กœ ๋ชจ๋ธ๋ง ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž‘์—… + , - , * , / ๋ฐ \ ๋Š”์ด ๋™ํ˜•์œผ๋กœ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. (๊ทธ๋Ÿฌ๋‚˜ conj(z) ๋Š” adjoint(Z) / transpose(Z) / flip(Z) ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ธ”๋ก ํ–‰๋ ฌ์€ ์–ด๋–ป๊ฒŒ ๋“  ๊ฐ€๋Šฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค (ํ˜„์žฌ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์žฌ๊ท€ ์  adjoint ๋“ฑ์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค).

Base.LinAlg ์ด 1๊ณผ 2์™€ ํ˜ธํ™˜๋˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋ณด์ด์ง€๋งŒ IMO 3์€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋“ค์–ด ๋งž๋Š” ๊ฒฝ์šฐ์—๋งŒ Base ์—์„œ ์ˆ˜ํ–‰๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค (๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด https : /์™€ ๊ฐ™์€ ์™ธ๋ถ€ ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝํ–ฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. /github.com/KristofferC/BlockArrays.jl).

๋‚˜๋Š” ์ด์ œ ์šฐ๋ฆฌ๊ฐ€ 2์™€ 3์„ ํ•ฉ์นœ๋‹ค ๋Š” ๊ฒƒ์„ @Jutho๋„ ์ด๊ฒƒ์„ ์ง€์ ํ–ˆ์Šต๋‹ˆ๋‹ค). ์•„๋ž˜์—์„œ๋Š” 3. ์žฌ๊ท€ ์  adjoint ๋ฐ ๋ธ”๋ก ํ–‰๋ ฌ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด 2๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค. ๋ณต์†Œ์ˆ˜์˜ 2x2 ํ–‰๋ ฌ์„ m = [z1 z2; z3 z4] , ๋™ํ˜• ํ‘œํ˜„ M = [Z1 Z2; Z3 Z4] , ํ‘œ์ค€ 2x2 ๋ธ”๋ก ํ–‰๋ ฌ b = [m1 m2; m3 m4] ๋กœ ์ •์˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ m1 ๋“ฑ์€ ๊ฐ™์€ ํฌ๊ธฐ์˜ ์ •์‚ฌ๊ฐํ˜•์ž…๋‹ˆ๋‹ค. Number ํ–‰๋ ฌ. ์ผ๋ฐ˜์ ์ธ ์ž‘์—…์— ๋Œ€ํ•œ ์˜๋ฏธ ์ƒ ์ •๋‹ต์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

| ์šด์˜ | z | Z | m | M | b |
| -| -| -| -| -| -|
| + , - , * | ์žฌ๊ท€ | ์žฌ๊ท€ | ์žฌ๊ท€ | ์žฌ๊ท€ | ์žฌ๊ท€ |
| conj | conj(z) | Z' ๋˜๋Š” Z.' ๋˜๋Š” flip(Z) | conj.(m) | adjoint.(M) (๋˜๋Š” transpose.(M) ) | conj.(b) |
| adjoint | conj(z) | Z' ๋˜๋Š” Z.' ๋˜๋Š” flip(Z) | flip(conj.(m)) ๋˜๋Š” ์žฌ๊ท€ | flip(transpose.(m)) ๋˜๋Š” ์žฌ๊ท€ | ์žฌ๊ท€ |
| trace | z | Z | z1 + z4 | Z1 + Z4 | trace(m1) + trace(m4) |
| det | z | Z | z1*z4 - z2*z3 | Z1*Z3 - Z2*Z3 | det(m1) * det(m4 - m2*inv(m1)*m3) ( m1 ์ธ๋ฒ„ํ„ฐ ๋ธ” ์ธ ๊ฒฝ์šฐ, ์˜ˆ : Wikipedia ์ฐธ์กฐ) |

๋“ฑ์˜ ์ž‘์—…์„ ๊ณ ๋ ค trace ๋ฐ det ํ•˜๋Š” ์ˆ˜์ต ์Šค์นผ๋ผ๋Š”, ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ์˜ ์ค„๋ฆฌ์•„ ํ˜•์‹ ์‹œ์Šคํ…œ ๊ฝค ๋ถ„๋ช… ์ƒ๊ฐ LinAlg ๊ฐ€๋Šฅ์˜ ๋‚ด์žฅ ์šฐ๋ฆฌ์˜ 2 ร— 2 ํ–‰๋ ฌ์„ ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ Complex ํŠน์ • ์ˆœ๊ฐ„์— "์Šค์นผ๋ผ"๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๋ฐ”๋ฅผ ์ถ”๋ก ํ•˜๋Š” "์ž๋™"๋ฐฉ์‹์œผ๋กœ trace(Z) ์ด๋ฉฐ ์—ฌ๊ธฐ์„œ Z = [1 0; 0 1] ๋Š” 2 ์ด๊ณ  ์ด๊ฒƒ์€ 1 ์˜ ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. rank(Z) ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ผ๊ด€์„ฑ์„ ๋ณต๊ตฌํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ 2x2 ํ‘œํ˜„์„ ์Šค์นผ๋ผ๋กœ ๋ช…์‹œ ์ ์œผ๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์•„๋ž˜์™€ ๊ฐ™์ด Number ๋ฅผ ํ•˜์œ„ ํƒ€์ดํ•‘ํ•˜์—ฌ :

struct CNumber{T <: Real} <: Number
    m::Matrix{T}
end
CNumber(x::Real, y::Real) = CNumber([x y; -y x])

+(c1::CNumber, c2::CNumber) = CNumber(c1.m + c2.m)
-(c1::CNumber, c2::CNumber) = CNumber(c1.m - c2.m)
*(c1::CNumber, c2::CNumber) = CNumber(c1.m * c2.m)
/(c1::CNumber, c2::CNumber) = CNumber(c1.m / c2.m)
\(c1::CNumber, c2::CNumber) = CNumber(c1.m \ c2.m)
conj(c::CNumber) = CNumber(transpose(c.m))
zero(c::CNumber{T}) where {T} = CNumber(zero(T), zero(T))
one(c::CNumber{T}) where {T} = CNumber(one(T), one(T))

์ด๋Ÿฌํ•œ ์ •์˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ฐ˜์ ์ธ LinAlg ๋ฉ”์„œ๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฒฐ๋ก  : ์žฌ๊ท€ ์  adjoint ์€ ๋ธ”๋ก ํ–‰๋ ฌ๊ณผ ๋ฒกํ„ฐ์˜ ๋ฒกํ„ฐ์— ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ Z ๋ ˆ์ด๋ธ”์„ ๋ถ™์ธ "์Šค์นผ๋ผ"2x2 ํ–‰๋ ฌ ์œ ํ˜•์— ๋Œ€ํ•œ ์ˆ˜ํ•™์  ์ •ํ™•์„ฑ์— ์˜ํ•ด ๋™๊ธฐ๋ฅผ ๋ถ€์—ฌํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค . ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ธ”๋ก ํ–‰๋ ฌ์„ ์ง€์›ํ• ์ง€ ์—ฌ๋ถ€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์žฅ์ 

  • ๋ธ”๋ก ์–ด๋ ˆ์ด ์‚ฌ์šฉ์ž๋ฅผ์œ„ํ•œ ํŽธ์˜์„ฑ
  • ๋ฒกํ„ฐ๋กœ ๊ตฌ์„ฑ๋œ ๋ฒกํ„ฐ๋Š” ์œ ํšจํ•œ ๋ฒกํ„ฐ ๊ณต๊ฐ„์ด๊ณ  ๋ธ”๋ก ํ–‰๋ ฌ์€ + , * , conj ๋“ฑ์—์„œ ์œ ํšจํ•œ ์„ ํ˜• ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ž์—ฐ์Šค๋Ÿฌ์šด ๋™ํ˜•์œผ๋กœ ๋งŒ๋“ค ์ˆ˜์žˆ๋Š” ๊ฒฝ์šฐ ( CNumber ๊ฐ€ ํ•„์š”ํ•œ ์œ„์˜ Z ์˜ˆ์ œ์™€๋Š” ๋‹ฌ๋ฆฌ), ๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ์•ˆ๋ฉ๋‹ˆ๊นŒ?

๋‹จ์ 

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

๋‚˜์—๊ฒŒ ์งˆ๋ฌธ์€-๊ธฐ๋ณธ์ ์œผ๋กœ LinAlg ์€ AbstractArray ์˜ ์š”์†Œ๊ฐ€ "์Šค์นผ๋ผ"( Number ์˜ ํ•˜์œ„ ์œ ํ˜• ๋˜๋Š” ๋• ํƒ€์ดํ•‘)๊ฐ€ ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•œ๋‹ค๊ณ  ์„ ํƒํ•ฉ๋‹ˆ๊นŒ? ๋ธ”๋ก ์–ด๋ ˆ์ด์˜ ๋ณต์žก์„ฑ์„ ์™ธ๋ถ€ ํŒจํ‚ค์ง€๋กœ ํŒŒ๋ฐ? ์•„๋‹ˆ๋ฉด Base ๋ฐ LinAlg ์˜ ๋ณต์žก์„ฑ์„ ์ˆ˜์šฉํ•ฉ๋‹ˆ๊นŒ?

ํ•˜๋ฃจ ์ „๊นŒ์ง€์˜ ๊ณ„ํš์€ ํ›„์ž์˜€์Šต๋‹ˆ๋‹ค.

@ Sacha0 ์—ฌ๊ธฐ์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ RowVector ์ž‘์—…์„ ์™„๋ฃŒํ•˜๋ ค๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค (์ด์ „ ์ž‘์—… ๋น„์žฌ ๊ท€์  transpose , RowVector ์ง€์› ๋ฌธ์ž์—ด ๋ฐ ๊ธฐํƒ€ ๋ฐ์ดํ„ฐ) ์ง€๊ธˆ์€ ๋””์ž์ธ ์ธก๋ฉด์—์„œ ๋ฌด์—‡์„ ์—ผ๋‘์— ๋‘ ์…จ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

์ตœ๊ทผ ํ† ๋ก ์—์„œ ์›ํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์ถ”์ธกํ•˜์—ฌ ์ด๋Ÿฌํ•œ ์‚ฌ๋ก€๋ฅผ ๋ด…๋‹ˆ๋‹ค.

| | ๋ฒกํ„ฐ | ๋งคํŠธ๋ฆญ์Šค |
|-|-|-|
| adjoint | RowVector with recursive adjoint | AdjointMatrix ๋˜๋Š” TransposedMatrix with recursive adjoint |
| transpose | RowVector with recursive transpose | TransposeMatrix with recursive transpose |
| flip | ์‚ฌ๋ณธ ๋˜๋Š” PermutedDimsArray ? | ์‚ฌ๋ณธ ๋˜๋Š” PermutedDimsArray ? |
| conj / AbstractArray | ๊ฒŒ ์œผ๋ฅด๊ฑฐ๋‚˜ ์—ด๋งํ•ฉ๋‹ˆ๊นŒ? | ๊ฒŒ ์œผ๋ฅด๊ฑฐ๋‚˜ ์—ด๋งํ•ฉ๋‹ˆ๊นŒ? |
| conj / RowVector ๋˜๋Š” TransposedMatrix | ๊ฒŒ์œผ๋ฅธ | ๊ฒŒ์œผ๋ฅธ |

(์œ„์—์„œ๋Š” ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด์˜ ์ˆœ์—ด ์ฐจ์›์—์„œ ์„ ํ˜• ๋Œ€์ˆ˜ ๋ฌธ์ œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ ค๋Š” ์‹œ๋„์ž…๋‹ˆ๋‹ค.)

๊ทธ๋ž˜์„œ ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ์ ์ธ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

์ฐธ๊ณ ๋กœ ๋‚˜๋Š” permutedims ๋Œ€ํ•ด ๋” ์งง์€ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ # 24839์—์„œ ํ–‰๋ ฌ์˜ ์ฐจ์›์„ "๋’ค์ง‘๋Š”"์ € ๋งˆ์ฐฐ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ €๋Š” @ Sacha0 ์˜ ์ œ์•ˆ 2๋ฅผ ๊ฐ•๋ ฅํžˆ ์ฐฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์žฌ๊ท€ ๋Œ€ ๋น„ ์žฌ๊ท€ adjoint์˜ ์ด๋ก ์  ํ† ๋Œ€๋ฅผ ์™„์ „ํžˆ ๋ถ„๋ฅ˜ํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ, ๊ทธ๊ฒƒ๊ณผ๋Š” ๋…๋ฆฝ์ ์œผ๋กœ : ์ ์–ด๋„ ๋‚˜์—๊ฒŒ ์œ ์šฉํ•˜๋‹ค๊ณ  ํŒ๋ช…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. , ๊ทธ๋ฆฌ๊ณ  ๋งˆ์ง€๋ง‰ ์ˆœ๊ฐ„์— ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์€ ์•„๋งˆ๋„ ์ข‹์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์กฐ์˜ฎ๊น€์€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ด์™€ ๊ด€๋ จํ•˜์—ฌ adjoint (= conjโˆ˜adjoint )๋ฅผ ๋”ฐ๋ผ์•ผํ•ฉ๋‹ˆ๋‹ค.

FWIW, Mathematica๋Š” Transpose ๋˜๋Š” ConjugateTranspose ์žฌ๊ท€๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

untitled

๋‚˜๋Š” ์œ„์˜ ์ •๊ตํ•œ ํ† ๋ก ์„ ์ฝ์œผ๋ ค๊ณ ํ–ˆ์ง€๋งŒ ์–ด๋–ค ์‹œ์ ์—์„œ ์ˆ˜ํ•™์  ์ „์น˜๊ฐ€ ์žฌ๊ท€ ์ ์ด์–ด์•ผํ•œ๋‹ค๊ณ  ๊ฒฐ์ • / ๋™๊ธฐํ™”๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. [...] ์™„์ „์„ฑ / ์ž๋ฆฝ์„ฑ์„ ์œ„ํ•ด, ๊ทธ ๊ฐœ๋…๊ณผ ๊ทธ๊ฒƒ์ด ์žฌ๊ท€ ์ ์ด์–ด์•ผํ•˜๋Š” ์ด์œ ๊ฐ€ ๊ฐ„๋žตํ•˜๊ฒŒ ๋ฐ˜๋ณต / ์š”์•ฝ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

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

adjoint ... ์ •์˜์— ๋”ฐ๋ผ ์žฌ๊ท€ ์ ์ด์–ด์•ผํ•˜๋Š” ์ด์œ  ์„ค๋ช… ...

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

๋‚˜๋Š”์ด ํ† ๋ก ์— ๊ธฐ์—ฌํ•œ ๋ชจ๋“  ์‚ฌ๋žŒ๋“ค์ด adjoint (A)๊ฐ€ ์žฌ๊ท€ ์ ์ด์–ด์•ผํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด https://github.com/JuliaLang/julia/issues/20978#issuecomment-347777577 ๋ฐ ์ด์ „ ์ฃผ์„์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. :). ๋ฒ ์ŠคํŠธ!

์žฌ๊ท€ ์  adjoint์— ๋Œ€ํ•œ ์ธ์ˆ˜๋Š” ์ •์˜์—์„œ ๋งค์šฐ ๊ธฐ๋ณธ์ ์ž…๋‹ˆ๋‹ค. dot(x,y) ๋Š” ๋‚ด๋ถ€ ๊ณฑ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์Šค์นผ๋ผ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  adjoint์˜ ์ •์˜๋Š” dot(A'*x, y) == dot(x, A*y) ์ž…๋‹ˆ๋‹ค. ์žฌ๊ท€ ( dot ๋ฐ adjoint )๋Š”์ด ๋‘ ์†์„ฑ์—์„œ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

(๋‚ด์ ๊ณผ์˜ ๊ด€๊ณ„๋Š” ์„ ํ˜• ๋Œ€์ˆ˜์—์„œ adjoint์™€ transpose๊ฐ€ ์ค‘์š”ํ•œ ์—ฐ์‚ฐ์ด๋˜๋Š” ์ „์ฒด์ ์ธ ์ด์œ ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๊ฒƒ๋“ค์— ๋Œ€ํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ์ด์œ ์ด๋ฉฐ, ํ–‰๋ ฌ์„ 90๋„ ํšŒ์ „ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ์—ฐ์‚ฐ์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค. (Matlab์—์„œ๋Š” rot90 ).)

๋น„ ์žฌ๊ท€ ์ „์น˜์— flip ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์˜ ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๋Š” Matlab๊ณผ Numpy๊ฐ€ ๋ชจ๋‘ flipdim ๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์— flip ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

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

์ „์น˜ (์ˆ˜ํ•™์  ์˜๋ฏธ์—์„œ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š์ง€๋งŒ ํ•ญ์ƒ ํ”Œ๋ฆฝ ๋งคํŠธ๋ฆญ์Šค ์ธ๋ฑ์Šค ์˜๋ฏธ์—์„œ๋Š” ์‚ฌ์šฉ๋จ)

์ด๊ฒƒ์€ ์•ฝ๊ฐ„ ์šฐํšŒ์ ์œผ๋กœ ๋ณด์ผ ๊ฒƒ์ด๋ฏ€๋กœ ์ €์™€ ํ•จ๊ป˜ ์ฐธ์•„์ฃผ์„ธ์š” :).

Julia์˜ adjoint ๋Š” ํŠน๋ณ„ํžˆ Hermitian adjoint ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ, ๊ฐ๊ฐ์˜ ์ด์ค‘ ๊ณต๊ฐ„ U * ๋ฐ V๊ฐ€์žˆ๋Š” U ๋ฐ V ์™„์ „ํ•œ ์ •๊ทœ ๋ฒกํ„ฐ ๊ณต๊ฐ„ (Banach ๊ณต๊ฐ„) ๋ฐ ์„ ํ˜• ๋งต A : U-> V์˜ ๊ฒฝ์šฐ, ์ผ๋ฐ˜์ ์œผ๋กœ A๋กœ ํ‘œ์‹œ๋˜๋Š” A์˜ ์ธ์ ‘ ์š”์†Œ ๋Š” ์„ ํ˜• ๋งต A์ž…๋‹ˆ๋‹ค. * : V *-> U * . ์ฆ‰, ์ผ๋ฐ˜์ ์œผ๋กœ adjoint๋Š” ์ด์ค‘ ๊ณต๊ฐ„ ์‚ฌ์ด์˜ ์„ ํ˜• ๋งต์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ „์น˜ A ^ t๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ์ด์ค‘ ๊ณต๊ฐ„ ์‚ฌ์ด์˜ ์„ ํ˜• ๋งต์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ์ •์˜๋ฅผ ์ต์ˆ™ํ•œ Hermitian adjoint ๊ฐœ๋…๊ณผ ์–ด๋–ป๊ฒŒ ์กฐํ™”์‹œํ‚ฌ๊นŒ์š”? :)

๋Œ€๋‹ต์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ณต๊ฐ„, ์ฆ‰ ์™„์ „ํ•œ ๋‚ด๋ถ€ ์ œํ’ˆ ๊ณต๊ฐ„ (Hilbert ๊ณต๊ฐ„)์ด ์†Œ์œ ํ•˜๋Š” ์ถ”๊ฐ€ ๊ตฌ์กฐ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด์ ์€ ๊ทœ๋ฒ”์„ ์œ ๋„ํ•˜๋ฏ€๋กœ ์™„์ „ํ•œ ๋‚ด์  ๊ณต๊ฐ„ (Hilbert)์€ ์™„์ „ํ•œ ๊ทœ๋ฒ” ๊ณต๊ฐ„ (Banach)์ด๋ฏ€๋กœ (Hermitian) adjoint์˜ ๊ฐœ๋…์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํ•ต์‹ฌ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ํ‘œ์ค€์ด ์•„๋‹Œ ๋‚ด์ ์„ ๊ฐ–๋Š” ์„ ํ˜• ๋Œ€์ˆ˜์—์„œ ๊ฐ€์žฅ ์•„๋ฆ„๋‹ค์šด ์ •๋ฆฌ ์ค‘ ํ•˜๋‚˜, ์ฆ‰ Riesz ํ‘œํ˜„ ์ •๋ฆฌ๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, Riesz ํ‘œํ˜„ ์ •๋ฆฌ๋Š” Hilbert ๊ณต๊ฐ„์ด ์ž์—ฐ์ ์œผ๋กœ ์ด์ค‘ ๊ณต๊ฐ„๊ณผ ๋™ํ˜•์ด๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ Hilbert ๊ณต๊ฐ„์œผ๋กœ ์ž‘์—… ํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณต๊ฐ„๊ณผ ์Œ๋Œ€๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๊ตฌ๋ณ„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์‹๋ณ„์„ํ•˜๋Š” ๊ฒƒ์€ A * : V *-> U *๊ฐ€ ์•„๋‹Œ A * : V-> U๋กœ ์นœ์ˆ™ํ•œ Hermitian adjoint ๊ฐœ๋…์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ• ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  Hilbert ๊ณต๊ฐ„์„ ๊ณ ๋ คํ•  ๋•Œ ์ „์น˜์— ๋Œ€ํ•ด ๋™์ผํ•œ ์‹๋ณ„์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋ฉฐ, A ^ t : V-> U๋„ ์ต์ˆ™ํ•œ ์ „์น˜ ๊ฐœ๋…์„ ์‚ฐ์ถœํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ช…ํ™•ํžˆํ•˜๊ธฐ ์œ„ํ•ด, ์˜ˆ, ์ „์น˜์˜ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋…์€ ๊ฐ€์žฅ ์นœ์ˆ™ํ•œ (Hilbert) ์„ค์ •์— ์ ์šฉ๋œ ์ „์น˜์˜ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. Hermitian adjoint์˜ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋…์ด ํ•ด๋‹น ์„ค์ •์— ์ ์šฉ๋œ adjoint์˜ ์ผ๋ฐ˜์ ์ธ ๊ฐœ๋… ์ธ ๊ฒƒ์ฒ˜๋Ÿผ ๋ง์ž…๋‹ˆ๋‹ค. ๋ฒ ์ŠคํŠธ!

์ฃฝ์€ ๋ง์„ ์ณ์„œ ๋ฏธ์•ˆํ•˜์ง€๋งŒ ์ˆ˜ํ•™์  ํ˜ผ๋ž€์˜ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ๊ฐ„๋žตํžˆ ์š”์•ฝํ•˜๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถˆ์ผ์น˜์˜ ์š”์ ์€ T ๊ฐ€ ๋ฐฐ์—ด๊ณผ ๊ฐ™์€ ํ•˜์œ„ ๊ตฌ์กฐ๊ฐ€์—†๋Š” Number ์˜ ํ•˜์œ„ ์œ ํ˜•์ด ์•„๋‹Œ ๊ฒฝ์šฐ Vector{T} ๊ฐœ์ฒด๋ฅผ ์ˆ˜ํ•™์ ์œผ๋กœ ํ•ด์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

ํ•œ ํ•™ํŒŒ๋Š” @stevengj ์˜ ์ฃผ์žฅ์„ ๋ฐ›์•„๋“ค์ž…๋‹ˆ๋‹ค.

๋ง R ์œ„์˜ ๋ฒกํ„ฐ ๋ฒกํ„ฐ๋Š” ์ง์ ‘ ํ•ฉ๊ณ„ ๊ณต๊ฐ„์œผ๋กœ ๊ฐ€์žฅ ์ž˜ ์ดํ•ด๋˜๋ฉฐ R ์œ„์˜ ๋ฒกํ„ฐ ๊ณต๊ฐ„์ด๊ธฐ๋„ํ•ฉ๋‹ˆ๋‹ค.

๋ฌดํ•œ ์ฐจ์› ๋ฒกํ„ฐ ๊ณต๊ฐ„ ๋“ฑ์— ๊ด€ํ•œ ํŠน์ • ๋ฏธ๋ฌ˜ํ•จ์„ ๋ชจ๋“ˆ๋กœ ํ™”ํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฒกํ„ฐ์˜ ๋ฒกํ„ฐ๋ฅผ ๋ธ”๋ก ๋ฒกํ„ฐ๋กœ ์ƒ๊ฐํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Vector{Vector{T<:Number}} ๋Š” ์ •์‹ ์ ์œผ๋กœ ๋‹จ์ˆœํ•œ Vector{T} ๋กœ "ํ‰ํƒ„ํ™”"๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒจ๋Ÿฌ๋‹ค์ž„ ๋‚ด์—์„œ ํ–‰๋ ฌ์˜ ํ–‰๋ ฌ๋กœ ํ‘œํ˜„๋˜๋Š” ์„ ํ˜• ์—ฐ์‚ฐ์ž๋Š” ๋ธ”๋ก ํ–‰๋ ฌ๋กœ ์œ ์‚ฌํ•˜๊ฒŒ ๊ฐ„์ฃผ๋˜์–ด์•ผํ•˜๋ฉฐ adjoint ๋Š” ํ™•์‹คํžˆ ์žฌ๊ท€ ์ ์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. transpose ์—์„œ ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ˆ˜ํ•™์  ์˜๋ฏธ . ์ œ๊ฐ€ ํ‹€๋ ธ๋‹ค๋ฉด ์ €๋ฅผ ๊ณ ์ณ์ฃผ์„ธ์š”.ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๊ด€์ ์„ ์ทจํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ Vector{Matrix{T}} ๊ฐ™์€ ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ๋””์ž์ธํ•ด์•ผ ํ•  ์ž์—ฐ์Šค๋Ÿฝ๊ณ  ์ถฉ๋ถ„ํ•œ ํ•ด์„์ด ์—†๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. (ํŠนํžˆ @stevengj๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ๋‚ด๋ถ€ Matrix ๊ฐ€ ๋ณต์†Œ์ˆ˜์˜ ํ–‰๋ ฌ ํ‘œํ˜„์ด๋ผ๊ณ  ๊ฐ€์ •ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

2x2 ํ–‰๋ ฌ๋กœ ๋ณต์†Œ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ ๋ณต์žกํ•œ ๋ฒกํ„ฐ ๊ณต๊ฐ„์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

)

๋˜ ๋‹ค๋ฅธ ์ƒ๊ฐ์€ Vector{T} ๋Š” T ์œ ํ˜•์˜ ์Šค์นผ๋ผ (๋‹จ์–ด์˜ ์„ ํ˜• ๋Œ€์ˆ˜์  ์˜๋ฏธ์—์„œ) ์œ„์— ์ถ”์ƒ์  ์ธ ๋ฒกํ„ฐ ๊ณต๊ฐ„์—์žˆ๋Š” ๋ฒกํ„ฐ์˜ ํ‘œํ˜„์œผ๋กœ ํ•ญ์ƒ ์ƒ๊ฐ๋˜์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. T ์œ ํ˜•์— ๊ด€๊ณ„์—†์ด. ์ด ํŒจ๋Ÿฌ๋‹ค์ž„์—์„œ Vector{Vector{T'}} ๋Š” ์ง์ ‘ ํ•ฉ๊ณ„ ๊ณต๊ฐ„์˜ ์š”์†Œ๊ฐ€ ์•„๋‹ˆ๋ผ ์Šค์นผ๋ผ Vector{T'} ์˜ ๋ฒกํ„ฐ๋กœ ๊ฐ„์ฃผ๋˜์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” transpose(Matrix{T}) ์žฌ๊ท€ ์•ˆ๋˜๋ฉฐ, ๋‹จ์ˆœํžˆ ์™ธ๋ถ€ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๋ฐ˜์ „ํ•œ๋‹ค. ์ด ํ•ด์„์˜ ํ•œ ๊ฐ€์ง€ ๋ฌธ์ œ๋Š” T ์œ ํ˜•์˜ ์š”์†Œ๊ฐ€ ์œ ํšจํ•œ ์Šค์นผ๋ผ ๋ง์„ ํ˜•์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” (๊ตํ™˜) ๋ง์…ˆ ๋ฐ ๊ณฑ์…ˆ์— ๋Œ€ํ•œ ์ž˜ ์ •์˜ ๋œ ๊ฐœ๋…์ด ์žˆ์–ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Vector{Vector{T'}} ์™€ ๊ฐ™์€ ๋ฒกํ„ฐ์˜ ๊ฒฝ์šฐ ๋‘ ๊ฐœ์˜ "์Šค์นผ๋ผ" Vector{T'} ๋ฅผ ๋‹ค๋ฅธ Vector{T'} ์— ๊ณฑํ•˜๋Š” ๊ทœ์น™์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ๊ทธ๋Ÿฌํ•œ ๊ทœ์น™ (์˜ˆ : T' ๋ฅผ ๊ณฑํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์š”์†Œ ๋ณ„ ๊ณฑ์…ˆ)์„ ์ƒ๊ฐ ํ•ด๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ทธ๋ ‡๊ฒŒํ•˜๋Š” ๋ณดํŽธ์  ์ธ ์ž์—ฐ์Šค๋Ÿฌ์šด ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค. ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š”์ด ํ•ด์„์—์„œ adjoint ๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. Hermitian adjoint ๋Š” ์ •์˜์— ๋”ฐ๋ผ ์Šค์นผ๋ผ ํ•„๋“œ ๊ฐ€ ์‹ค์ˆ˜ ๋˜๋Š” ๋ณต์†Œ์ˆ˜ ์—ฌ์•ผํ•˜๋Š” Hilbert ๊ณต๊ฐ„์— ๋Œ€ํ•œ ์„ ํ˜• ์—ฐ์‚ฐ์ž์—์„œ๋งŒ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ adjoint ์„ ํ–‰๋ ฌ Matrix{T} ์— ์ ์šฉํ•˜๋ ค๋ฉด T ์ด ๋ณต์†Œ์ˆ˜ (๋˜๋Š” ์‹ค์ˆ˜)๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ผ€์ด์Šค๊ฐ€ ๋” ๋ฏธ๋ฌ˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค). ์ด ํ•ด์„์—์„œ, adjoint ์žฌ๊ท€ํ•˜์ง€ ์•Š์•„์•ผํ•˜์ง€๋งŒ, ์™ธ๋ถ€ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๋’ค์ง‘์–ดํ•ด์•ผํ•˜๊ณ  ์ ์šฉ conjugate . ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ๊ธฐ์—๋Š” ๋” ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. conjugate(T) ์˜ ์˜ฌ๋ฐ”๋ฅธ ๋™์ž‘์€ ํ‘œํ˜„์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์œ„ํ‚คํ”ผ๋””์•„์— ์„ค๋ช… ๋œ 2x2 ํ‘œํ˜„์ด๋ผ๋ฉด conjugate ๋Š” ํ–‰๋ ฌ์„ ๋’ค์ง‘์–ด ์•ผํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์œ„์—์„œ ์„ค๋ช…ํ•œ ์ด์œ  ๋•Œ๋ฌธ์— conjugate ๊ฐ€ ํ•ญ์ƒ ํ–‰๋ ฌ์„ ๋’ค์ง‘์–ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์•ฝ๊ฐ„ ์—‰๋ง์ž…๋‹ˆ๋‹ค.

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

๋” ์ด์ƒ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š๊ฒ ๋‹ค๋Š” ์ด์ „์˜ ์•ฝ์†์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ถˆํ–‰ํžˆ๋„ ์ด์— ์‘๋‹ตํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

Julia์˜ adjoint๋Š” ํŠนํžˆ Hermitian adjoint๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ, ๊ฐ๊ฐ์˜ ์ด์ค‘ ๊ณต๊ฐ„ U * ๋ฐ V๊ฐ€์žˆ๋Š” U ๋ฐ V ์™„์ „ํ•œ ์ •๊ทœ ๋ฒกํ„ฐ ๊ณต๊ฐ„ (Banach ๊ณต๊ฐ„) ๋ฐ ์„ ํ˜• ๋งต A : U-> V์˜ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์œผ๋กœ A๋กœ ํ‘œ์‹œ๋˜๋Š” A์˜ ์—๋ฅด ๋ฏธํŠธ ์‹ adjoint ๋Š” ์„ ํ˜• ๋งต์ž…๋‹ˆ๋‹ค. A * : V *-> U *. ์ฆ‰, ์ผ๋ฐ˜์ ์œผ๋กœ ์ „์น˜ A ^ t๊ฐ€ ์œ„์—์„œ ์–ธ๊ธ‰ ํ•œ ์ด์ค‘ ๊ณต๊ฐ„ ์‚ฌ์ด์˜ ์„ ํ˜• ๋งต์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์ผ๋ฐ˜์ ์œผ๋กœ Hermitian adjoint๋Š” ์ด์ค‘ ๊ณต๊ฐ„ ๊ฐ„์˜ ์„ ํ˜• ๋งต์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ์ •์˜๋ฅผ ์ต์ˆ™ํ•œ Hermitian adjoint ๊ฐœ๋…๊ณผ ์–ด๋–ป๊ฒŒ ์กฐํ™” ์‹œํ‚ค์‹ญ๋‹ˆ๊นŒ? :)

๊ทธ๊ฒƒ์€ ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ ์ „์น˜์ด์ง€๋งŒ (์ด๋ฏธ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด) ์ผ๋ถ€ ๋ถ„์•ผ์—์„œ๋Š”์ด๋ฅผ adjoint (Hermitian ์ œ์™ธ)๋ผ๊ณ ํ•˜๋ฉฐ A ^ t ๋˜๋Š” A ^ * (A ^ dagger ์•„๋‹˜)๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์‹ค, ๊ทธ๊ฒƒ์€ ๋ฒกํ„ฐ ๊ณต๊ฐ„์„ ํ›จ์”ฌ ๋„˜์–ด์„œ ํ™•์žฅ๋˜๋ฉฐ, ๋ฒ”์ฃผ ์ด๋ก ์—์„œ ๊ทธ๋Ÿฌํ•œ ๊ฐœ๋…์€ ๋ชจ๋“  ๋‹จ์ผ์ฒด ๋ฒ”์ฃผ (์˜ˆ : ์„ ํ˜• ๋งต์œผ๋กœ cobordisms๊ฐ€์žˆ๋Š” n ์ฐจ์› ์ง€ํ–ฅ ๋งค๋‹ˆ ํด๋“œ์˜ ๋ฒ”์ฃผ Cob)์— ์กด์žฌํ•˜๋ฉฐ, ์—ฌ๊ธฐ์„œ adjoint mate (in ์‚ฌ์‹ค ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์ด์ค‘ ๊ณต๊ฐ„์ด ๋ฐ˜๋“œ์‹œ ๋™์ผํ•˜์ง€๋Š” ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ A์™€ A ๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.) ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋ณต์žกํ•œ ๊ฒฐํ•ฉ์„ ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. V *์˜ ์š”์†Œ๋Š” ์‹ค์ œ๋กœ ์„ ํ˜• ๋งต f : V-> Scalar์ด๋ฉฐ ์„ ํ˜• ๋งต A : U-> V ๋ฐ U์˜ ๋ฒกํ„ฐ v์— ๋Œ€ํ•ด f (Av) = (A ^ tf) (v) . f์˜ ์ž‘์šฉ์€ ๋ณต์žกํ•œ ์ผค๋ ˆ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— A ^ t์˜ ์ •์˜๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

๋Œ€๋‹ต์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘์—…ํ•˜๋Š” ๊ณต๊ฐ„, ์ฆ‰ ์™„์ „ํ•œ ๋‚ด๋ถ€ ์ œํ’ˆ ๊ณต๊ฐ„ (Hilbert ๊ณต๊ฐ„)์ด ์†Œ์œ ํ•˜๋Š” ์ถ”๊ฐ€ ๊ตฌ์กฐ์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด์ ์€ ๊ทœ๋ฒ”์„ ์œ ๋„ํ•˜๋ฏ€๋กœ ์™„์ „ํ•œ ๋‚ด์  ๊ณต๊ฐ„ (Hilbert)์€ ์™„์ „ํ•œ ๊ทœ๋ฒ” ๊ณต๊ฐ„ (Banach)์ด๋ฏ€๋กœ Hermitian adjoint์˜ ๊ฐœ๋…์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ํ•ต์‹ฌ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ํ‘œ์ค€์ด ์•„๋‹Œ ๋‚ด์ ์„ ๊ฐ–๋Š” ์„ ํ˜• ๋Œ€์ˆ˜์—์„œ ๊ฐ€์žฅ ์•„๋ฆ„๋‹ค์šด ์ •๋ฆฌ ์ค‘ ํ•˜๋‚˜, ์ฆ‰ Riesz ํ‘œํ˜„ ์ •๋ฆฌ๊ฐ€ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, Riesz ํ‘œํ˜„ ์ •๋ฆฌ๋Š” Hilbert ๊ณต๊ฐ„์ด ์ž์—ฐ์ ์œผ๋กœ ์ด์ค‘ ๊ณต๊ฐ„๊ณผ ๋™ํ˜•์ด๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ Hilbert ๊ณต๊ฐ„์œผ๋กœ ์ž‘์—… ํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณต๊ฐ„๊ณผ ์Œ๋Œ€๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๊ตฌ๋ณ„์„ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์‹๋ณ„์„ํ•˜๋Š” ๊ฒƒ์€ ๋‹น์‹ ์ด A * : V *-> U *๊ฐ€ ์•„๋‹Œ A * : V-> U์™€ ๊ฐ™์€ Hermitian adjoint์˜ ์ต์ˆ™ํ•œ ๊ฐœ๋…์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๋‹ค์‹œ ๋งํ•˜์ง€๋งŒ ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์™„์ „ํžˆ ์˜ณ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚ด์  ๊ณต๊ฐ„์—์„œ ๋‚ด์ ์€ conj (V) x V-> ์Šค์นผ๋ผ (conjugate ๋ฒกํ„ฐ ๊ณต๊ฐ„ ์ธ conj (V) ์‚ฌ์šฉ)์—์„œ dot ํ˜•์‹์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹ค์ œ๋กœ V์—์„œ V *๋กœ (๋˜๋Š” ๊ธฐ์ˆ ์ ์œผ๋กœ๋Š” conj (V)์—์„œ V *๋กœ) ๋งต์„ ์„ค์ •ํ•  ์ˆ˜์žˆ๊ฒŒํ•˜๋Š”๋ฐ, ์ด๋Š” ์‹ค์ œ๋กœ Riesz ํ‘œํ˜„ ์ •๋ฆฌ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Hermitian adjoint๋ฅผ ๋„์ž…ํ•˜๋Š” ๋ฐ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ๋‚ด์  dot ๋งŒ์œผ๋กœ๋„ ์ถฉ๋ถ„ํ•˜๋ฉฐ ์„ ํ˜• ๋งต A ์˜ Hermitian adjoint๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
dot(w, Av) = dot(A' w, v) ์—ฌ๊ธฐ์—๋Š” ๋ณต์žกํ•œ ํ™œ์šฉ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๊ฒƒ์€ ์‚ฌ์‹ค์ด ์•„๋‹™๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—์„œ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์€ ์‹ค์ œ๋กœ ์ „์น˜์ด์ง€๋งŒ (์ด๋ฏธ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด) ์ผ๋ถ€ ๋ถ„์•ผ์—์„œ๋Š”์ด๋ฅผ adjoint (Hermitian ์ œ์™ธ)๋ผ๊ณ ํ•˜๋ฉฐ A ^ t ๋˜๋Š” A ^ * (A ^ dagger ์•„๋‹˜)๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. [...]

@Jutho , ์˜ˆ๋ฅผ ๋“ค์–ด Hermitian adjoint ์˜

๋‹ค๋ฅธ ์ˆ˜ํ•™ ๋ถ„์•ผ๊ฐ„์— ๋ถˆ์ผ์น˜๊ฐ€์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ :
https://en.wikipedia.org/wiki/Transpose_of_a_linear_map
ํŠนํžˆ
https://en.wikipedia.org/wiki/Transpose_of_a_linear_map#Relation_to_the_Hermitian_adjoint
๊ทธ๋ฆฌ๊ณ  ์นดํ…Œ๊ณ ๋ฆฌ ์ด๋ก ์—์„œ ์…€ ์ˆ˜์—†์ด ๋งŽ์€ ์ฐธ๊ณ  ๋ฌธํ—Œ, ์˜ˆ๋ฅผ ๋“ค์–ด
https://arxiv.org/pdf/0908.3347v1.pdf

https://en.wikipedia.org/wiki/Transpose_of_a_linear_map
ํŠนํžˆ
https://en.wikipedia.org/wiki/Transpose_of_a_linear_map#Relation_to_the_Hermitian_adjoint

@Jutho , ํ•ด๋‹น ํŽ˜์ด์ง€ ์„น์…˜๊ณผ ์œ„์—์„œ ๋งํฌ ํ•œ ํŽ˜์ด์ง€์— ์ œ๊ณต๋œ ์ •์˜ ์‚ฌ์ด์— ๋ถˆ์ผ์น˜๊ฐ€ ์—†์œผ๋ฉฐ ์œ„์— ๊ฒŒ์‹œ ํ•œ ๋‚ด์šฉ๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ๋„ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฒ ์ŠคํŠธ!

๋‚˜๋Š” ๋˜ํ•œ @ Sacha0 ์˜ ์ œ์•ˆ 2์— ์„œ๋ช… ํ•  ๊ฒƒ์ด๋‹ค. ๋‚˜๋Š” 1 ์ธ์ˆ˜ permutedims ๊ดœ์ฐฎ๋‹ค. flip ๋ณด๋‹ค ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

@ Sacha0 ์ด๋ฉด ๊ทธ๊ฒƒ์„ ํ•ด์„ํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์„ ์ฝ์—ˆ๋‹ค
์ฃผ์–ด์ง„ A : U-> V์— ๋Œ€ํ•ด,
transpose (A) = dual (A) = (๋•Œ๋กœ๋Š” ๋˜ํ•œ) adjoint (A) : V *-> U *
hermitian adjoint (A) = dagger (A) = (์ผ๋ฐ˜์ ์œผ๋กœ just) adjoint (A) : V-> U
๊ทธ๋ฆฌ๊ณ  ๋‘˜ ์‚ฌ์ด์˜ ๊ด€๊ณ„๋Š” ๋ณต์žกํ•œ ํ™œ์šฉ์„ ํฌํ•จํ•˜๋Š” ๊ณต๊ฐ„์—์„œ ์ด์ค‘ ๊ณต๊ฐ„ (์ฆ‰, Riesz ...)์œผ๋กœ์˜ ๋งต์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •ํ™•ํ•˜๊ฒŒ ์–ป์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ hermitian adjoint๋Š” ํ™œ์šฉ์„ ํฌํ•จํ•˜๊ณ  ์ „์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ ์€๋‘”์ž adjoint๋ผ๊ณ  ๋ถ€๋ฅด๊ณ  ์‹ถ๋‹ค๋ฉด ๋ฌด์—‡์„ ์ „์น˜๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๊นŒ? ์„ค๋ช…์—์žˆ๋Š” ๋‚ด์šฉ์„ ์‹ค์ œ๋กœ ์ •์˜ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ A๋กœ ํ‘œ์‹œ๋˜๋Š” A์˜ Hermitian adjoint๋Š” ์„ ํ˜• ๋งต A : V *-> U *์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ผ๋ฐ˜์ ์œผ๋กœ ์ „์น˜ A ^ t๊ฐ€ ์ด์ค‘ ๊ณต๊ฐ„ ์‚ฌ์ด์˜ ์„ ํ˜• ๋งต์ธ ๊ฒƒ์ฒ˜๋Ÿผ ์ผ๋ฐ˜์ ์œผ๋กœ Hermitian adjoint๋Š” ์ด์ค‘ ๊ณต๊ฐ„ ์‚ฌ์ด์˜ ์„ ํ˜• ๋งต์ž…๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์ „์น˜์™€ Hermitian์ด ์ธ์ ‘ํ•˜๋ฉด A : U-> V๋ฅผ V- > U ์—์„œ ๋งต์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ด์— ๋Œ€ํ•ด ๋” ๋…ผ์˜ํ•˜๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๊ณณ์—์„œํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์‹ค์ œ๋กœ ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋” ๋งŽ์€ ๊ฒƒ์„ ๋ฐฐ์šฐ๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ์ €์—๊ฒŒ ์—ฐ๋ฝํ•˜์‹ญ์‹œ์˜ค.

๋˜ํ•œ Banach ๊ณต๊ฐ„์˜ ๋งฅ๋ฝ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ธ์ ‘ํ•˜๋Š” ์ฐธ์กฐ๋Š” http://staff.um.edu.mt/jmus1/banach.pdf ๋ฅผ ์ฐธ์กฐ

Julia Base์˜ ๊ฒฝ์šฐ : ์ €๋Š” ์žฌ๊ท€ Hermitian ํ™œ์šฉ์— ๋ฐ˜๋Œ€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ์ด ์ข…์ข… ์˜ฌ๋ฐ”๋ฅธ ์ผ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์š”์†Œ ์œ ํ˜•์ด Number ์ด ์•„๋‹ ๋•Œ Base๊ฐ€ ์˜๋ฆฌํ•œ ์ž‘์—…์„ ์‹œ๋„ํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. T is number๋ผ๊ณ ํ•ด๋„ Base์—์„œ ๋น„ ์œ ํด๋ฆฌ๋“œ ๋‚ด๋ถ€ ์ œํ’ˆ (๋ฐ ๊ด€๋ จ ์ˆ˜์ • ๋œ adjoint ์ •์˜)์˜ ํ›จ์”ฌ ๋” ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์žˆ์–ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€๋„ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฃผ๋œ ๋™๊ธฐ๋Š” ๋ธ”๋ก ํ–‰๋ ฌ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ ๊ฑฐ๊ธฐ์—์„œ๋Š” ํŠน์ˆ˜ ๋ชฉ์  ์œ ํ˜• (Base ๋˜๋Š” ํŒจํ‚ค์ง€)์ด ํ›จ์”ฌ ๋” Julian์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. @andyferris ๋„ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋‚˜๋จธ์ง€ LinAlg ์™€๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. LinAlg ๋Š” ๋ธ”๋ก ํ–‰๋ ฌ์˜ ๊ฐœ๋…์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์‹ฌ์ง€์–ด inv (ํ–‰๋ ฌ ๋ถ„ํ•ด ๋“ฑ์€ ์ œ์™ธ)์™€ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ๊ฒƒ๊นŒ์ง€๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์žฌ๊ท€ Hermitian ํ™œ์šฉ์ด ์—ฌ๊ธฐ์— ๋จธ๋ฌผ๋Ÿฌ ์žˆ๋‹ค๋ฉด (์ข‹์Šต๋‹ˆ๋‹ค), ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด dot ๋ฐ vecdot ๊ฐ€ ์š”์†Œ์— ๋Œ€ํ•ด ์žฌ๊ท€ ์ ์œผ๋กœ ์ž‘๋™ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. dot ๋Š” ์š”์†Œ์— ๋Œ€ํ•ด x'y ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  (์š”์†Œ๊ฐ€ ํ–‰๋ ฌ ์ธ ๊ฒฝ์šฐ ๋™์ผํ•˜์ง€ ์•Š์Œ) vecdot ๋Š” dot ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ์š”์†Œ์—. ๋”ฐ๋ผ์„œ ํ–‰๋ ฌ ๋ฒกํ„ฐ์˜ ๊ฒฝ์šฐ ์‹ค์ œ๋กœ ์Šค์นผ๋ผ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†์Šต๋‹ˆ๋‹ค. ์‚ฌ๋žŒ๋“ค์ด ํ˜„์žฌ ๊ตฌํ˜„์ด ์žฌ๊ท€ ์  adjoint ๊ณผ ์‹ค์ œ๋กœ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋ฐ ๋™์˜ํ•œ๋‹ค๋ฉด PR์„ ์ค€๋น„ํ•˜๊ฒŒ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

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

Triage๋Š” @ Sacha0 ์ด ์ œ์•ˆ 2๋ฅผ ์ง„ํ–‰ํ•˜์—ฌ ์‹œ๋„ํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์žฌ๊ท€ ์  adjoint๊ฐ€ ์ˆ˜ํ•™์ ์œผ๋กœ ์ผ๊ด€๋œ ์œ ์ผํ•œ ์˜ต์…˜์ด ์•„๋‹ˆ๋ผ ์„ ํƒ์ด๋ผ๋Š” @ttparker์— ๊ฐ•๋ ฅํ•˜๊ฒŒ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„๋‹จํžˆ ์„ค๋ช… ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1- LinAlg , AbstractVector v ๋Š” (์Šค์นผ๋ผ) ๊ธฐ๋ณธ ๊ฐ€์ค‘์น˜๊ฐ€์žˆ๋Š” length(v) ์ฐจ์› ๋ฒกํ„ฐ์ž…๋‹ˆ๋‹ค. v[1] , v[2] , ..., v[length(v)] .

(๊ทธ๋ฆฌ๊ณ  ์œ ์‚ฌํ•˜๊ฒŒ AbstractMatrix ).

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

ํ˜„์žฌ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

2- LinAlg , AbstractVector v ๋Š” length(v) ์ถ”์ƒ ๋ฒกํ„ฐ์˜ ์ง์ ‘ ํ•ฉ๊ณ„์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ Number ์™€ ๊ฐ™์€ ์Šค์นผ๋ผ ์œ ํ˜•์— ๋Œ€ํ•œ ์ถฉ๋ถ„ํ•œ ์ •์˜๋ฅผ ํฌํ•จํ•˜์—ฌ LinAlg ๊นŒ์ง€ ์œ ํšจํ•œ 1 ์ฐจ์› ์„ ํ˜• ์—ฐ์‚ฐ์ž / ๋ฒกํ„ฐ๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ (๋ธ”๋ก) ํ–‰๋ ฌ์— ๋Œ€ํ•ด์„œ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ MATLAB, numpy, eigen ๋“ฑ์˜ ์„ ํ˜• ๋Œ€์ˆ˜ ๊ตฌํ˜„๋ณด๋‹ค ํ›จ์”ฌ ๋” ์ผ๋ฐ˜ํ™”๋˜์—ˆ์œผ๋ฉฐ, ์ด๊ฒƒ์ด ์‹คํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” Julia์˜ ๊ฐ•๋ ฅํ•œ ์œ ํ˜• / ๋””์ŠคํŒจ์น˜ ์‹œ์Šคํ…œ์„ ๋ฐ˜์˜ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ์˜ต์…˜ 2 ๊ฐ€ ๋ฐ”๋žŒ์งํ•˜๋‹ค๊ณ  ๋ณด๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ด์œ ๋Š” Julia์˜ ์œ ํ˜• / ํŒŒ๊ฒฌ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ํ›จ์”ฌ ๋” ๊ด‘๋ฒ”์œ„ํ•œ ๋ชฉํ‘œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

3- LinAlg ์—์„œ๋Š” + , * , conj ์•„๋ž˜์˜ ์„ ํ˜•์„ฑ์„ ์ถฉ์กฑํ•˜๋Š” ๊ฐ์ฒด (๋“ฑ)์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜๋Š” ์ผ๋ฐ˜ ์„ ํ˜• ๋Œ€์ˆ˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ค๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค

์ •๋ง ๋ฉ‹์ง„ ๋ชฉํ‘œ (๋‚ด๊ฐ€ ์•Œ๊ณ ์žˆ๋Š” ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด / ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ณด๋‹ค ํ›จ์”ฌ ๋›ฐ์–ด๋‚จ)๋Š” ์™„์ „ํžˆ ์žฌ๊ท€ adjoint ๋ฐ 2์— ๋™๊ธฐ๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค ( + , * ๊ทธ๋ฆฌ๊ณ  conj ์ž์ฒด๊ฐ€ ์žฌ๊ท€)์™€ Sacha0์˜ ์ œ์•ˆ์ด์™€ ์„ ๋ณ„ ๊ฒฐ์ •์ด ์ข‹์€ ์„ ํƒ ์ธ ์ด์œ  @์ž…๋‹ˆ๋‹ค :)

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

๊ฑด๋ฐฐํ•ฉ์‹œ๋‹ค! ๋‚˜๋Š” ๋” ์˜คํ”„๋ผ์ธ์—์„œ ์ฑ„ํŒ…์„ ๊ธฐ๋Œ€ํ•ฉ๋‹ˆ๋‹ค :). ๋ฒ ์ŠคํŠธ!

๋ฉ‹์ง„ ์š”์•ฝ Andy! :)

Andy๋Š” ์ตœ์†Œํ•œ adjoint (๋Œ“๊ธ€์˜ ์ฃผ์ œ)์— ์™„์ „ํžˆ ๋™์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚ด๊ฐ€ ์˜์›ํžˆ ํ‰ํ™”๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์ „์— ๋น„์žฌ ๊ท€์  transpose ๋Œ€ํ•œ ๋งˆ์ง€๋ง‰ ํƒ„์›์ž…๋‹ˆ๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์ด์žˆ๋Š” ๋น„ ์žฌ๊ท€ ์ „์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

  • ๋น„ ์žฌ๊ท€ transpose ๋ฐ ์žฌ๊ท€ adjoint ํ•˜๋ฉด conj(transpose(a)) ๋ฐ ์žฌ๊ท€ ์ „์น˜ conj(adjoint(a)) ์™€ ๊ฐ™์€ ๋น„ ์žฌ๊ท€ adjoint๋ฅผ ์‰ฝ๊ฒŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ์ „ํžˆ ๋ชจ๋“  ๊ฒƒ์ด LinAlg ์™€ ์ž˜ ์ƒํ˜ธ ์ž‘์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹จ์ ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋‚˜๋Š” ์•„๋ฌด๋„ ๋ณด์ง€ ์•Š๋Š”๋‹ค. ๋‚˜๋Š” ์•„์ง๋„ ๊ทธ ๋ˆ„๊ตฌ๋„ ์ˆ˜ํ•™์  ์˜๋ฏธ์—์„œ transpose ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋‚ด ์ฃผ์žฅ์„์ง€์ง€ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋” ์ด์ƒ ๋…ผ์Ÿ์„ ์‹œ๋„ํ•˜๋Š” ๋Œ€์‹  ์žฌ๊ท€ ์ „์น˜๊ฐ€ ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์œ ์šฉํ•˜๋ฉฐ ์‹ค์ œ๋กœ ์ˆ˜ํ•™์  tanspose ์ธ ๊ตฌ์ฒด์ ์ธ ์˜ˆ๋ฅผ ๋ˆ„๊ฐ€ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์—ฌ๊ธฐ์—๋Š” ์‹ค์ œ๋กœ adjoint ํ•˜๋ ค๊ณ ํ–ˆ์ง€๋งŒ ์‹ค์ˆ˜ ๋งŒ์žˆ๋Š” ์˜ˆ๋Š” ์ œ์™ธ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ทธ ์ž์ฒด๊ฐ€ ๋ณต์žกํ•œ ๊ฐ’์ธ ๋” ๋งŽ์€ ํ–‰๋ ฌ๋กœ ์ฑ„์›Œ์ง„ ๋ฒกํ„ฐ ๋˜๋Š” ํ–‰๋ ฌ์„ ์ „์น˜ํ•˜๋Š” ์ˆ˜ํ•™์  ์ด์œ ๊ฐ€์žˆ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

์ ์–ด๋„ Mathematica (์ด์— ๋Œ€ํ•ด ์ƒ๋‹นํ•œ ์ƒ๊ฐ์„ํ–ˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š”)๋Š” ์žฌ๊ท€ ์ „์น˜๋ฅผํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

A = Array[1 &, {2, 3, 4, 5}];
Dimensions[A]  # returns {2, 3, 4, 5}
Dimensions[Transpose[A]] # returns {3, 2, 4, 5}

ํŽธ์ง‘ : ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค, ์ด๊ฒƒ์€ ๋˜ํ•œ ์œ„์— ์–ธ๊ธ‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ํ˜ผ๋ž€ ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. transpose ๋Š” ๋น„์žฌ ๊ท€์ ์œผ๋กœ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค๋Š” ๋งค์šฐ ํ™•์‹คํ•œ ํ•ฉ์˜๊ฐ€์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ˆ : https://github.com/JuliaLang/julia/issues/20978#issuecomment -285865225, https://github.com/ JuliaLang / julia / issues / 20978 # issuecomment -285942526, https://github.com/JuliaLang/julia/issues/20978#issuecomment -285993057, https://github.com/JuliaLang/julia/issues/20978#issuecomment- 348464449 ๋ฐ https://github.com/JuliaLang/julia/pull/23424. ๊ทธ๋Ÿฐ ๋‹ค์Œ @ Sacha0 ์€ ๋‘ ๊ฐ€์ง€ ์ œ์•ˆ์„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜๋Š” ์žฌ๊ท€ ์ „์น˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€๋งŒ ๋น„ ์žฌ๊ท€ flip ํ•จ์ˆ˜๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์ด์ „์— ์‹ค์ œ๋กœ ๊ฐ€๋Šฅ์„ฑ์ด ์ œ๊ธฐ๋˜์ง€ ์•Š์•˜์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ฐ•๋ ฅํ•œ ์ง€์›์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. . ๊ทธ๋Ÿฐ ๋‹ค์Œ @JeffBezanson ์€ permutedims ์— ๊ธฐ๋ณธ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋ฅผ ์ฃผ๋ฉด ๊ฒฐ๊ตญ flip ๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ œ์•ˆํ–ˆ์œผ๋ฉฐ, ์ด๋Š” ๋˜ํ•œ ๊ฐ•๋ ฅํ•œ ์ง€์›์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด์ œ ํ•ฉ์˜๋Š” transpose ์˜ ์œ ์ผํ•œ ์‹ค์ œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด "๋’ค์—์„œ"์—ฌ์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ตœ์ข… ์‚ฌ์šฉ์ž๋Š” ์•„๋งˆ ์•Œ์ง€ ๋ชปํ•˜๊ฑฐ๋‚˜ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. . ์‹ค์ œ๋กœ ๋ˆˆ์— ๋„๋Š” ์œ ์ผํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฒ ์ž ๋ณ€๊ฒฝ๋ฟ์ž…๋‹ˆ๋‹ค ( .' ๊ฐ๊ฐ€ ์ƒ๊ฐ ๋ฐ permutedims ๊ธฐ๋ณธ ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜ ์ œ๊ณต).

๋”ฐ๋ผ์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ•ฉ์˜๋Š” ๋งค์šฐ ์งง์€ ์‹œ๊ฐ„ ( @ Sacha0 ์˜ ๊ฒŒ์‹œ๋ฌผ https://github.com/JuliaLang/julia/issues/20978#issuecomment-347360279

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด๊ฒƒ์„ ์ œ์•ˆํ–ˆ๋Š”์ง€ ์žŠ์–ด ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค.ํ•˜์ง€๋งŒ transpose(::AbstractMatrix{AbstractMatrix}) (๊ทธ๋ฆฌ๊ณ  ์•„๋งˆ๋„ transpose(::AbstractMatrix{AbstractVector}) ๋„ ๊ฐ€๋Šฅ) ์žฌ๊ท€ ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด transpose ๋น„์žฌ ๊ท€์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ๋ชจ๋“  ๊ธฐ์ดˆ๋ฅผ ๋‹ค๋ฃฐ ๊ฒƒ ๊ฐ™๊ณ  tranpose ๊ฐ€ ์žฌ๊ท€ ์ ์ด๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ์ƒ๊ฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ ํ•ฉ์˜๋Š” ๋งค์šฐ ์งง์€ ์‹œ๊ฐ„ ( @ Sacha0 ์˜ ๊ฒŒ์‹œ๋ฌผ # 20978 (๋Œ“๊ธ€) ์ฆˆ์Œ)์— ๊ฑฐ์˜ 180๋„ ๋ณ€๊ฒฝ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Sacha์˜ ๊ฒŒ์‹œ๋ฌผ์ด ๋„ˆ๋ฌด ์›…๋ณ€ํ•ด์„œ ๋ชจ๋“  ์‚ฌ๋žŒ์˜ ๋งˆ์Œ์„ ๋ฐ”๊ฟจ๋‚˜์š”? (๊ทธ๋ ‡๋‹ค๋ฉด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ๋ฉฐ์น  ์ „๋งŒํ•ด๋„ ์šฐ๋ฆฌ ๋ชจ๋‘๊ฐ€ ํ‹€๋ ธ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์˜€๋˜ ๊ฒฝ๋กœ๋ฅผ ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.)

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

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

๋‚˜๋Š” AbstractArray์— ๋Œ€ํ•œ ๋น„ ์žฌ๊ท€ ์ „์น˜์™€ ctranspose์— ์ฐฌ์„ฑํ•˜์—ฌ ์ž‘์€ ํˆฌํ‘œ๋ฅผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค AbstractArray {T}์—์„œ ์žฌ๊ท€ ์ ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ T <: AbstractArray.

๋‚˜๋Š” ์žฌ๊ท€ ์  ํ–‰๋™์ด ์–ด๋–ค ๊ฒฝ์šฐ์— '์˜ฌ๋ฐ”๋ฅธ'๊ฒƒ์— ๋™์˜ํ•˜๋ฉฐ, ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ตœ์†Œํ•œ์˜ ๋†€๋ผ์›€์œผ๋กœ ์˜ฌ๋ฐ”๋ฅธ ํ–‰๋™์„ ์–ด๋–ป๊ฒŒ ๋‹ฌ์„ฑ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์„ ๋ด…๋‹ˆ๋‹ค.
์ด ์ œ์•ˆ์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ์œ ํ˜•์— ๋Œ€ํ•œ ์žฌ๊ท€ ์ „์น˜ ๋™์ž‘์€ ์˜ตํŠธ ์ธ์ž…๋‹ˆ๋‹ค. ์œ ํ˜•์„ AbstractArray๋กœ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์ ์ ˆํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•˜์—ฌ ์˜ตํŠธ ์ธํ•ฉ๋‹ˆ๋‹ค.
Base.transpose(AbstractArray{MyType}) ๋˜๋Š” Base.transpose(AbstractArray{T}) where T<: MyAbstractType .
์žฌ๊ท€ ์ „์น˜์— ๋Œ€ํ•œ ๋• ํƒ€์ดํ•‘ ์ „๋žต (๋ฌผ์–ด ๋ณด์ง€ ์•Š๊ณ  ๊ทธ๋ƒฅ ๋ฐ˜๋ณต)์€ ์œ„์—์„œ ์„ค๋ช…ํ•œ๋Œ€๋กœ ๋ช‡ ๊ฐ€์ง€ ๋†€๋ผ์›€์„ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋ณ„๊ฐœ์˜ ctranspose ๋ฐ adjoint๋ฅผ ๋„์ž…ํ•˜๊ฑฐ๋‚˜ conjadjoint ๋ฐ flip๊ณผ ๊ฐ™์€ ๋” ๋ณต์žกํ•œ ์ œ์•ˆ์„ ๋„์ž…ํ•˜๋ฉด ์‚ฌ์šฉ์ž๋Š” ์ด๋Ÿฌํ•œ ์ œ์•ˆ์„ ์ ‘ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๊ฒƒ์ด๋ฉฐ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋Š” ๋ชจ๋‘ ์ง€์›ํ•˜๋ ค๊ณ  ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ์ œ์•ˆ์—์„œ ์ง€์›ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒƒ์˜ ์˜ˆ๋กœ normal, transpose, ctranspose ๋ฐ conj ๋ฐฐ์—ด์€ ๋ชจ๋‘ ReshapedArray ๋ฐ SubArray๋ณด๊ธฐ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š”๋ณด๊ธฐ (๋˜๋Š” ์ง€์—ฐ ํ‰๊ฐ€)๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค. (์ €๋Š” ์ด๊ฒƒ์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ทฐ๋ฅผ ์ƒ์„ฑํ•˜๋Š”์ง€ ์•„๋‹ˆ๋ฉด @view ์‚ฌ์šฉํ•  ๋•Œ๋งŒ ์ƒ์„ฑ๋˜๋Š”์ง€์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.) ์ด๊ฒƒ์€ A*_mul_B* ๋‚ฎ์ถ”๋Š” ์ž‘์—…๊ณผ ํ”Œ๋ž˜๊ทธ 'N'์„ ์‚ฌ์šฉํ•˜๋Š” ๋‚ฎ์€ ์ˆ˜์ค€์˜ BLAS ํ˜ธ์ถœ์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ณณ์—์„œ ์–ธ๊ธ‰ ํ•œ ๋ฐ”์™€ ๊ฐ™์ด ๊ณ ๋ฐ€๋„ ์–ด๋ ˆ์ด์˜ ๊ฒฝ์šฐ 'T'๋ฐ 'C'. normal , transpose , ctranspose , conj ๋ฅผ ์ทจ๊ธ‰ํ–ˆ๋‹ค๋ฉด ์ถ”๋ก ํ•˜๊ธฐ๊ฐ€ ๋” ์‰ฌ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋™๋“ฑํ•œ ๊ธฐ๋ฐ˜์—. BLAS ์ž์ฒด๋Š” ์ผ๋ฐ˜์˜ ๊ฒฝ์šฐ 'N', ์ „์น˜์˜ ๊ฒฝ์šฐ 'T', ctranspose์˜ ๊ฒฝ์šฐ 'C'๋งŒ ์ง€์›ํ•˜๋ฉฐ conj์— ๋Œ€ํ•œ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์‹ค์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ, ๋” ๋†’์€ ์ฐจ์›์˜ ๋ฐฐ์—ด ๋ฐ ๋ชจ์–‘ ๋ณ€๊ฒฝ๊ณผ์˜ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ์ „์น˜ ๋ฐ c ์ „์น˜์˜ ์ ์ ˆํ•œ ์ผ๋ฐ˜ํ™”๋Š” ๋ชจ๋“  ์ฐจ์›์„ ๋ฐ˜์ „ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
transpose (A :: Array {T, 3}) = permutedims (A, (3, 2, 1)).

๊ฑด๋ฐฐ!

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

์ฆ‰, ํ–‰๋ ฌ ์ „์น˜ ๋ฐ adjoint / ctranspose๋Š” ๋‹จ์ผ ๋™๊ธฐ ๋ธ”๋ก ํ–‰๋ ฌ๋กœ https://github.com/JuliaLang/julia/pull/7244 ์—์„œ ๊ฑฐ์˜ ์กฐ์šฉํžˆ ์†Œ๊ฐœ ๋œ ์žฌ๊ท€ ์  ์ธก๋ฉด์—์„œ ๋งŽ์€ ๋…ผ์˜๋ฅผ ์–ป์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. . ์žฌ๊ท€ ์  adjoint์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ์ด์œ ์™€ ๋™๊ธฐ๊ฐ€ ์ฃผ์–ด์กŒ๊ณ  (์‚ฌ์‹ค ์ดํ›„) ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์€ ์ด๊ฒƒ์ด ์ข‹์€ (์œ ์ผํ•œ ๊ฒƒ์€ ์•„๋‹˜) ์„ ํƒ์ด๋ผ๋Š” ๊ฒƒ์— ๋™์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Transpose์—๋Š” ๋‹จ์ผ ๋™๊ธฐ ๋˜๋Š” ์‹ค์ œ ์‚ฌ์šฉ ์‚ฌ๋ก€์กฐ์ฐจ ๋ถ€์กฑํ•ฉ๋‹ˆ๋‹ค.

์ด ํ† ๋ก ์—์„œ๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ณ„๋„์˜ ์ž‘์—…์ด ์ง„ํ–‰๋˜๊ณ  ์žˆ์œผ๋ฉฐ, ์‹ ์†ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜์žˆ๋Š” ๊ณ„ํš์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

  • ์šฐ๋ฆฌ๋Š” LinAlg ์—์„œ ๋ธ”๋ก ํ–‰๋ ฌ (๋ฐ ๋” ์ด๊ตญ์ ์ธ ๊ตฌ์กฐ)์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์น˜๊ฐ€ ์žˆ๋Š”์ง€ ๋…ผ์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ตฌํ˜„ ์„ ํƒ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์žฌ๊ท€ ์  ์š”์†Œ ์—†์Œ ( + , * ๋ฐ conj ์ œ์™ธ), ๋ชจ๋“  ์žฌ๊ท€ ์  ์š”์†Œ (Julia์˜ ์ผ๋ฐ˜ ํ•จ์ˆ˜ ํŠน์„ฑ), ๋˜๋Š” ์š”์†Œ๊ฐ€ ์žฌ๊ท€ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋Š”์ง€ ๋˜๋Š” ์Šค์นผ๋ผ๋กœ ์ฒ˜๋ฆฌ๋˜์–ด์•ผํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์ผ์ข…์˜ ์œ ํ˜• ๊ฒ€์‚ฌ ๋˜๋Š” ํŠน์„ฑ์„ ์‹œ๋„ํ•ฉ๋‹ˆ๋‹ค.
  • ์šฐ๋ฆฌ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ 2D ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด์˜ ์ฐจ์›์„ ๋ณ€๊ฒฝํ•  ์ˆ˜์žˆ๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์›ํ•ฉ๋‹ˆ๋‹ค. ๋น„์žฌ ๊ท€์  transpose , flip , ๋‹จ์ถ• ๋œ permutedims ๊ตฌ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค (์ด PR์€ ๊ตฌํ˜„ํ•  ๋ฌธ์ž ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ๊ธฐ ๋•Œ๋ฌธ์— ๋จผ์ € ์ œ์ถœ๋˜์—ˆ์œผ๋ฉฐ ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ๋‹ค๋ฅธ ์ผ์„ํ•œ๋‹ค๋ฉด), ์š”์†Œ๊ฐ€ ์žฌ๊ท€ ์ „์น˜ (recursive transpose)๋ฅผํ•ด์•ผํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์ผ์ข…์˜ ์œ ํ˜• ๊ฒ€์‚ฌ ๋‚˜ ํŠน์„ฑ (์•„๋งˆ๋„ transpose(x::Any) = x ...).
  • Julia ํŒŒ์„œ๋Š” x' * y -> Ac_mul_B(x, y) ์™€ ๊ฐ™์€ ์ด์ƒํ•œ ๋™์ž‘์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด์ƒ์ ์œผ๋กœ v1.0์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์•ฝ๊ฐ„์˜ ์‚ฌ๋งˆ๊ท€์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋น ๋ฅธ BLAS (์ถ”๊ฐ€ ์‚ฌ๋ณธ ์—†์Œ)๋ฅผ ์ง€์›ํ•  ์ˆ˜์žˆ์„ ๋•Œ๊นŒ์ง€ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ ์ง€์—ฐ ํ–‰๋ ฌ ์ „์น˜ ๋ฐ ์ธ์ ‘ํ•ฉ๋‹ˆ๋‹ค.
  • LinAlg ์˜ ์ฝ”๋“œ๋Š” ์ƒ๋‹นํžˆ ํฌ๊ณ  ์ˆ˜๋…„์— ๊ฑธ์ณ ๊ตฌ์ถ•๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ–‰๋ ฌ ๊ณฑ์…ˆ๊ณผ ๊ฐ™์€ ๋งŽ์€ ๊ฒƒ๋“ค์€ ์•„๋งˆ๋„ ์ƒˆ๋กœ์šด broadcast ์™€ ๊ฐ™์€ ๋””์ŠคํŒจ์น˜ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋” ํŠน์„ฑ ์นœํ™”์ ์œผ๋กœ ๋ฆฌํŒฉํ† ๋ง ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฐ์—ด (์ŠคํŠธ๋ผ์ด๋“œ ํ–‰๋ ฌ์˜ ๋ณ€ํ˜• ๋œ ๋ณ€ํ˜• ๋œ ๋ทฐ์˜ PermuteDimsArray๋ฅผ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค)์„ BLAS๋กœ ๋” ์‰ฝ๊ฒŒ ๋ณด๋‚ผ ์ˆ˜์žˆ๋Š” ๊ณณ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ v1.0์„ ๋งŒ๋“ค์ง€ ์•Š์„ ๊ฒƒ์ด๋ฉฐ ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ๋ฅผ ํ›จ์”ฌ ๋” ์•…ํ™”์‹œํ‚ค์ง€ ์•Š์œผ๋ฉด ์„œ ์„ฑ๋Šฅ ํšŒ๊ท€๋ฅผ ํ”ผํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Sacha๊ฐ€ ์ง€์ ํ–ˆ๋“ฏ์ด ์š”์†Œ (์žฌ๊ท€ ์  ์ธ์ ‘, ์žฌ๊ท€ ์ „์น˜, ํ™œ์šฉ, ์•„๋ฌด๊ฒƒ๋„ ์—†์Œ)์— ๋Œ€ํ•œ ๋‹ค์–‘ํ•œ ๋™์ž‘์„ ๊ฐ€์ง„ ์ „์น˜ ๋ทฐ๋ฅผ ๊ฐ–๋Š” ๊ฒƒ์€ ์ผ์„ ๊ณ„์† ์ž‘๋™์‹œํ‚ค๋Š” ์ถ”๊ฐ€ ๋ณต์žก์„ฑ๊ณผ ์ƒˆ๋กœ์šด ๋ฐฉ๋ฒ•์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์•„๋ฅด.

v1.0์ด ์–ธ์–ด๋ฅผ ์–ด๋Š ์ •๋„ ์•ˆ์ •ํ™”์‹œํ‚ค๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์–ด๋–ค ์˜๋ฏธ์—์„œ ํ–‰๋™์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์šฐ์„  ์ˆœ์œ„๋Š” ์„ธ ๋ฒˆ์งธ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋งํ•˜๊ณ  ์‹ถ๋‹ค : ์–ธ์–ด (ํŒŒ์„œ ํฌํ•จ)๋Š” ๊ฐ€์žฅ ์•ˆ์ •์ ์ด์–ด์•ผํ•˜๊ณ  Base ๋‹ค์Œ์œผ๋กœ stdlib ( LinAlg ํฌํ•จํ•˜๊ฑฐ๋‚˜ ํฌํ•จํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ)๊ฐ€ ๋’ค ๋”ฐ๋ฅด์ง€๋งŒ ๊ฑฐ์˜ ํ™•์‹คํ•˜๊ฒŒ ํฌํ•จ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. BLAS , Sparse ๋“ฑ 1 ์ผ). ์‚ฌ์šฉ์ž (๋Œ€๋ถ€๋ถ„ ๋„์„œ๊ด€ ๊ฐœ๋ฐœ์ž)์—๊ฒŒ ์‹ค์ œ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š๋Š” ๋ณ€ํ™”์ด๋ฏ€๋กœ ์—ฌ๊ธฐ์—์„œ ์‚ฌ๋žŒ๋“ค์˜ ์˜๊ฒฌ์ด ๋‹ค๋ฅด๋”๋ผ๋„ ๋†€๋ผ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Andy๋ฅผ ์ฐพ์•„๋ผ! :)

์—ฌ๊ธฐ์„œ ๋‚จ์€ ๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ adjoint ์™€ transpose ๊ฒŒ์œผ๋ฅด๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ ๋ฟ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋‹ซ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋‹ค์Œ ๋‹จ๊ณ„ : "์Šค์นผ๋ผ ์‚ฌ์šฉ์€ ์‹ฌ๊ฐํ•˜๊ฒŒ ์ „์น˜ํ•ฉ๋‹ˆ๋‹ค."

๊ทธ๋Ÿฌ๋‚˜ ์ง„์ง€ํ•˜๊ฒŒ, PDE ์†”๋ฒ„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋‹ค๋ฅธ 3D ์ „์น˜ ๋ฐ ํ…์„œ ๊ณฑ์…ˆ์„ ์ง€์ •ํ•˜๊ธฐ์œ„ํ•œ ์ข‹์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ง„์ง€ํ•˜์ง€๋งŒ,์ด ๊ด‘๊ธฐ์˜ ๋‹ค์Œ ๋ฐ˜๋ณต์˜ OP๊ฐ€ ๋  ์ˆ˜ ์žˆ์„์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์•„๋‹ˆ

:)

PDE ์†”๋ฒ„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋‹ค๋ฅธ 3D ์ „์น˜ ๋ฐ ํ…์„œ ๊ณฑ์…ˆ์„ ์ง€์ •ํ•˜๊ธฐ์œ„ํ•œ ์ข‹์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ™•์‹คํžˆ ํŒจํ‚ค์ง€์˜ ์ข‹์€ ์ฃผ์ œ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ 3D ์ „์น˜ ๋ฐ ํ…์„œ ๊ณฑ์…ˆ์„ ์ง€์ •ํ•˜๊ธฐ์œ„ํ•œ ์ข‹์€ ์ธํ„ฐํŽ˜์ด์Šค

TensorOperations.jl ์ด ์—ฌ๊ธฐ์„œ ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๊นŒ? (์ด ์ˆ˜์ค€์—์„œ "์ข‹์€ ์ธํ„ฐํŽ˜์ด์Šค"๋Š” Tensor ๋„คํŠธ์›Œํฌ ๋‹ค์ด์–ด๊ทธ๋žจ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ TensorOperations ์˜ ๊ตฌ๋ฌธ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ๊ฐ€ ์•ฝ๊ฐ„ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.)

์˜ˆ, TensorOperations.jl์ด ์ข‹์•„ ๋ณด์ž…๋‹ˆ๋‹ค. ๋†๋‹ด ์ด์—ˆ์ง€๋งŒ ํ•„์š”ํ•œ ๊ฒƒ์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค ๐Ÿ‘.

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