ジュリアで距離行列を計算する方法
概要
距離行列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