logo

ジュリアで距離行列を計算する方法 📂ジュリア

ジュリアで距離行列を計算する方法

概要

距離行列distance matrixは、パーティクルダイナミクスparticle dynamicsムービングエージェントmoving Agentベースのシミュレーションなどによく使用されるが、実際には準備された関数がなく、自分で計算するコードを書くことは大変なことが多い。Juliaでは、pairwise()DistancesパッケージのEuclidean()関数を使用して、以下のように簡単に距離行列を計算できる1

dimsオプションを使用すると、行と列の方向を指定できる。見ての通り、$\mathbb{R}^{5 \times 3}$行列が与えられたときに、$5$次元ベクトルの$3$個の距離を計算したり、$3$次元ベクトルの$5$個の距離を計算することができる。

コード

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

最適化