logo

줄리아에서 배열의 차분 계산하는 법 📂줄리아

줄리아에서 배열의 차분 계산하는 법

개요

줄리아에서는 차분을 계산하기 위해 diff() 함수를 제공한다1. circshift() 함수를 사용해도 쉽게 짤 수는 있는데 끝 점의 처리 같은 부분에서 은근히 불편하다보니 알아두면 훨씬 편하다. R매트랩에서의 diff() 함수와 거의 똑같은 방식으로 사용할 수는 있으나, 이들과 달리 2계 차분(차분을 두 번 취하는 것) 같은 건 굳이 구현해놓지 않았다.

코드

기본적인 사용법

julia> x = rand(0:9, 12)
12-element Vector{Int64}:
 3
 1
 9
 7
 1
 0
 6
 5
 3
 2
 9
 9

예를 들어 위와 같은 배열이 있다면, 그냥 diff()를 취해서 앞 원소와 뒤 원소의 차를 계산한 다음의 결과를 얻을 수 있다. 결과에서 배열의 사이즈가 정확히 1만큼 줄어든 것을 확인할 수 있다.

julia> diff(x)
11-element Vector{Int64}:
 -2
  8
 -2
 -6
 -1
  6
 -1
 -2
 -1
  7
  0

다차원 배열

julia> X = reshape(x, 3, :)
3×4 Matrix{Int64}:
 3  7  6  2
 1  1  5  9
 9  0  3  9

julia> diff(X)
ERROR: UndefKeywordError: keyword argument dims not assigned
Stacktrace:
 [1] diff(a::Matrix{Int64})
   @ Base .\multidimensional.jl:997
 [2] top-level scope
   @ c:\Users\rmsms\OneDrive\lab\DataDrivenModel\REPL.jl:7

예를 들어 위와 같은 다차원 배열이 있다면 그냥 diff()를 취했을 때 에러가 나게 된다. 이는 배열을 미는 방향이 주어져 있지 않기 때문이며, 다음과 같이 dims를 인자로 주어서 어떤 차원으로 차분을 계산할지 정해주어야 한다. 1차원에서와 마찬가지로 차분을 했던 방향으로 길이가 1씩 짧아진 것에 주의하라.

julia> diff(X, dims = 1)
2×4 Matrix{Int64}:
 -2  -6  -1  7
  8  -1  -2  0

julia> diff(X, dims = 2)
3×3 Matrix{Int64}:
  4  -1  -4
  0   4   4
 -9   3   6

전체코드

x = rand(0:9, 12)
diff(x)

X = reshape(x, 3, :)
diff(X)
diff(X, dims = 1)
diff(X, dims = 2)

환경

  • OS: Windows
  • julia: v1.8.5