LoginSignup
5
1

More than 5 years have passed since last update.

Juliaと要素1の行列

Last updated at Posted at 2017-05-24

要素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になったぞ、やったぜ

5
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1