줄리아에서 거리 행렬 계산하는 법
개요
거리 행렬distance matrix은 파티클 다이나믹스particle dynamics 및 무빙 에이전트moving Agent 기반 시뮬레이션 등에 흔히 사용되나, 막상 찾아보면 딱 정리된 함수로는 없고 직접 계산하는 코드를 짜려면 막막한 게 보통이다. 줄리아에서는 pairwise()
와 Distances
패키지의 Euclidean()
함수를 사용해서 다음과 같이 손쉽게 거리 행렬을 계산할 수 있다1.
dims
옵션을 통해 행과 열의 방향을 정할 수 있는데, 보다시피 $\mathbb{R}^{5 \times 3}$ 행렬이 주어져있을 때 $3$차원 벡터 $5$개의 거리를 계산하거나 $5$차원 벡터 $3$개의 거리를 계산하는 식으로 사용할 수 있다.
코드
using Distances
coordinate = [2 3 4; 5 1 3; 1 7 5; 1 7 6; 2 4 3]
pairwise(Euclidean(), coordinate; dims=1)
pairwise(Euclidean(), coordinate; dims=2)
위 코드를 실행시킨 결과는 다음과 같다.
julia> using Distances
julia> coordinate = [2 3 4; 5 1 3; 1 7 5; 1 7 6; 2 4 3]
5×3 Array{Int64,2}:
2 3 4
5 1 3
1 7 5
1 7 6
2 4 3
julia> pairwise(Euclidean(), coordinate; dims=1)
5×5 Array{Float64,2}:
0.0 3.74166 4.24264 4.58258 1.41421
3.74166 0.0 7.48331 7.81025 4.24264
4.24264 7.48331 0.0 1.0 3.74166
4.58258 7.81025 1.0 0.0 4.3589
1.41421 4.24264 3.74166 4.3589 0.0
julia> pairwise(Euclidean(), coordinate; dims=2)
3×3 Array{Float64,2}:
0.0 9.64365 7.07107
9.64365 0.0 3.31662
7.07107 3.31662 0.0