logo

ジュリアで列ごとに行列を正規化する方法 📂ジュリア

ジュリアで列ごとに行列を正規化する方法

概要

Julia行列正規化を簡単にするヒントを紹介する1。基本的には行列を行ごと、列ごとにスカラー倍する方法eachcol()関数、LinearAlgebraモジュールnorm()関数を混ぜて使っただけだが、一行で終わり、使う機会が多いので覚えておくと役に立つ。

コード

julia> using LinearAlgebra

julia> X =  reshape(1:15, 5, :)
5×3 reshape(::UnitRange{Int64}, 5, 3) with eltype Int64:
 1   6  11
 2   7  12
 3   8  13
 4   9  14
 5  10  15

与えられた行列Xを列ごとに正規化normalizeするのは、X ./ norm.(eachcol(X))'の一行で可能だ。実行自体と実際にうまく正規化されたかを確認した結果は以下の通りだ。

julia> Z = X ./ norm.(eachcol(X))'
5×3 Matrix{Float64}:
 0.13484  0.330289  0.376192
 0.26968  0.385337  0.410391
 0.40452  0.440386  0.444591
 0.53936  0.495434  0.47879
 0.6742   0.550482  0.512989

julia> norm.(eachcol(Z))
3-element Vector{Float64}:
 1.0
 1.0
 1.0

全コード

using LinearAlgebra

X =  reshape(1:15, 5, :)
Z = X ./ norm.(eachcol(X))'
norm.(eachcol(Z))

環境

  • OS: Windows
  • julia: v1.9.0