要素1の行列をスカラ値として扱うには?
最近Juliaをさわり始めているが、若干使いにくいところが1点ある。
それが、以下のStackoverflowの記事:
Juliaでテスト
要素1の行列、わかりやすい例
# こちらが行列
julia> A = [1];
# スカラ値
julia> B = 1;
# 掛け算すると 1-element Array{*,1} と認識される
julia> A*B
1-element Array{Int64,1}:
1
# スカラ値との演算もできる。やったぜ。
julia> A*B - 2
1-element Array{Int64,1}:
-1
要素1の行列、めんどくさい例
# 要素5の縦ベクトルを作ってみる
julia> C = [1 2 3 4 5]'
5x1 Array{Int64,2}:
1
2
3
4
5
# 行列の積の法則で m(1,x) * n(x,1) = m(1,1) になるはず。
julia> C'*C
1x1 Array{Int64,2}:
55
# 1-element Arrayになってくれない…
まあ、要は 1x1 Array
であれば、他の要素との演算時に型がシュッと縮まって 1x1 Array{Int64,2}:
→ 1-element Array{Int64,1}:
に変わってほしい所存(暗黙の型変換)。ざっと試しただけなので表現が曖昧ですが。。。
そして、今の所明示的に型を変換するには…
Stackoverflowの解答
# このようにしてC'*Cをスカラ値に直してる
julia> reshape(C'*C,1)[1]
55
他に方法ないのかなあ @antimon2 氏からコメントいただきました
Juliaでテスト(正しい記法を使う)
検証は JuliaBox で実施
要素1の行列、めんどくさい例をもう一度
# 要素5の縦ベクトルを作ってみる
julia> VERSION
v"0.5.2"
julia> C = [1, 2, 3, 4, 5]
5-element Array{Int64,1}:
1
2
3
4
5
julia> C'*C
1-element Array{Int64,1}:
55
# 1-element Arrayになったぞ、やったぜ