줄리아에서 배열의 차분 계산하는 법
개요
줄리아에서는 차분을 계산하기 위해 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