ジュリアで列ごとに行列を正規化する方法
概要
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