줄리아에서 2차원 배열 연산에 관한 함수들

줄리아에서 2차원 배열 연산에 관한 함수들

1460

$A = \begin{pmatrix} 1 & 2 & 1 \\ 0 & 3 & 0 \\ 2 & 3 & 4\end{pmatrix}$라고 하자.

전치행렬

julia> A =[1 2 1;
          0 3 0;
          2 3 4]
3×3 Array{Int64,2}:
 1  2  1
 0  3  0
 2  3  4

julia> transpose(A)
3×3 LinearAlgebra.Transpose{Int64,Array{Int64,2}}:
 1  0  2
 2  3  3
 1  0  4

julia> A'
3×3 LinearAlgebra.Adjoint{Int64,Array{Int64,2}}:
 1  0  2
 2  3  3
 1  0  4

행렬의 원소가 실수라면 transpose()'는 같은 행렬을 반환하지만 자료형이 미묘하게 다르다. 그 이유는 '가 정확하게는 transpose가 아니라 conjugate transpose이기 때문이다. 따라서 실수 행렬일 때는 사실상 같은 행렬을 반환하고 복소수 행렬일 때는 전혀 다른 결과를 반환한다.

julia> A_complex=[1+im 2 1+im;
                     0 3 0+im;
                     2 3+im 4]
3×3 Array{Complex{Int64},2}:
 1+1im  2+0im  1+1im
 0+0im  3+0im  0+1im
 2+0im  3+1im  4+0im

julia> transpose(A_complex)
3×3 LinearAlgebra.Transpose{Complex{Int64},Array{Complex{Int64},2}}:
 1+1im  0+0im  2+0im
 2+0im  3+0im  3+1im
 1+1im  0+1im  4+0im

julia> A_complex'
3×3 LinearAlgebra.Adjoint{Complex{Int64},Array{Complex{Int64},2}}:
 1-1im  0+0im  2+0im
 2+0im  3+0im  3-1im
 1-1im  0-1im  4+0im

거듭제곱

julia> A =[1 2 1;
          0 3 0;
          2 3 4]
3×3 Array{Int64,2}:
 1  2  1
 0  3  0
 2  3  4

julia> A^2
3×3 Array{Int64,2}:
  3  11   5
  0   9   0
 10  25  18

julia> A*A
3×3 Array{Int64,2}:
  3  11   5
  0   9   0
 10  25  18

julia> A^3
3×3 Array{Int64,2}:
 13   54  23
  0   27   0
 46  149  82

julia> A*A*A
3×3 Array{Int64,2}:
 13   54  23
  0   27   0
 46  149  82

A^2A*A는 완전히 같은 결과를 반환한다. 마찬가지로 A^3A*A*A는 서로 같다.

원소별 곱셈, 원소별 나눗셈

julia> A =[1 2 1;
          0 3 0;
          2 3 4]
3×3 Array{Int64,2}:
 1  2  1
 0  3  0
 2  3  4

julia> A.*A
3×3 Array{Int64,2}:
 1  4   1
 0  9   0
 4  9  16

julia> A./A
3×3 Array{Float64,2}:
   1.0  1.0    1.0
 NaN    1.0  NaN
   1.0  1.0    1.0

각 원소별로 곱하거나 나눈 결과를 반환한다.

좌우반전, 상하반전

julia> A =[1 2 1;
          0 3 0;
          2 3 4]
3×3 Array{Int64,2}:
 1  2  1
 0  3  0
 2  3  4

julia> reverse(A,dims=1)
3×3 Array{Int64,2}:
 2  3  4
 0  3  0
 1  2  1

julia> reverse(A,dims=2)
3×3 Array{Int64,2}:
 1  2  1
 0  3  0
 4  3  2

reverse(A,dims=1)은 행렬 $A$를 위아래로 뒤집은 행렬을 반환하고 매트랩에서 flipud(A)와 같다. reverse(A,dims=2)는 행렬 $A$를 좌우로 뒤집은 행렬을 반환하고 매트랩에서 fliplr(A)와 같다.

역행렬

julia> A =[1 2 1;
          0 3 0;
          2 3 4]
3×3 Array{Int64,2}:
 1  2  1
 0  3  0
 2  3  4

julia> inv(A)
3×3 Array{Float64,2}:
  2.0  -0.833333  -0.5
  0.0   0.333333   0.0
 -1.0   0.166667   0.5

행렬 $A$의 역행렬을 반환한다. 역행렬을 구할 수 없으면 에러가 뜬다.

환경

  • OS: Windows10
  • Version: 1.5.3 (2020-11-09)
댓글