줄리아에서 거리 행렬 계산하는 법 📂줄리아

줄리아에서 거리 행렬 계산하는 법

How to Calculate a distance matrix in julia

개요

거리 행렬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

최적화


  1. https://discourse.julialang.org/t/pairwise-distances-from-a-single-column-or-vector/29415/3 ↩︎

댓글