julia> a=[1 2] julia> v=[1;2] julia> a*v 1-element Array{Int64,1}: 5 julia> [5] 1-element Array{Int64,1}: 5 |
[5] から を得るには、第1要素を取り出せば良いので、 [5][1] とする (うへえ)。 A=[5] として A[1] と書く分には違和感がないかな?
Array は 次元ベクトル、つまり の要素とみなして良いが、 の双対空間の要素に相当するものが用意されている。
Array を transpose() すると、 の要素 (双対ベクトル) になる。 それと Array (-element Array) をかけると、 スカラー ( の要素) になる。
julia> g=transpose([1,2]) 1×2 LinearAlgebra.Transpose{Int64,Array{Int64,1}}: 1 2 julia> v=[1,2] 2-element Array{Int64,1}: 1 2 julia> g*v 5 |
tanspose() に似ているものに ' 演算子がある。 ' は Hermite 共役を作る。
julia> g2=[1,2]' 1×2 LinearAlgebra.Transpose{Int64,Array{Int64,1}}: 1 2 julia> v=[1,2] 2-element Array{Int64,1}: 1 2 julia> g2*v 5 julia> g3=[1,2im]' julia> g3*v 1×2 LinearAlgebra.Adjoint{Complex{Int64},Array{Complex{Int64},1}}: 1+0im 0-2im julia> g3*v 1 - 4im |
MATLAB で 1:3 とすると、 [1 2 3] という横ベクトルが得られるが、 Julia でそれに近いことをするには Array(1:3) とする。 ただし、これは 3 次元縦ベクトル [1,2,3] である。
https://docs.julialang.org/en/v1/stdlib/LinearAlgebra/
inv(a) は a の逆行列を計算する。
zeros(m,n) は零行列、 zeros(n) は zeros(n,1) と同じ (MATLAB だと zeros(n,n) と同じになる)。 zeros(Int64,m,n) のように成分の型を指定できるが、 省略すると Float64 になる。
ones(m,n) は全ての成分が1の行列である。 ones(n) は ones(n,1) と同じ。 これでも ones(Int64,m,n) のように成分の型を指定できる。
rand(m,n) というのもある。 rand(n) は rand(n,1) と同じ。
Diagonal() は対角部分を取り出す。
Array A に対して、 A(i,:) とすると 行目、 A(:,j) とすると 列目が取り出せる。 ただしどちらも縦ベクトルになる (縦ベクトルを偏愛している)。 前者は -element Array, 前者は -element Array である。
単位行列 (ここは良く分かっていない) 単位行列として eye(m,n) というのはなくなった。 単に I というオペレーターを使う (UniformScaling{Bool} true*I であるとか。 1.0I とか UniformScaling(1.0) を使うべきか? どちらも UniformScaling{Float64} 1.0*I)。
julia> using LinearAlgebra julia> a=[1 2; 3 4] julia> a*inv(a)-I 2×2 Array{Float64,2}: 0.0 0.0 8.88178e-16 -4.44089e-16 |
しかし I 単独では、operator であって、 行列とみなす場合のサイズすら定まらない。
どうしても Array が欲しければ
julia> myI=Matrix(1.0I,m,n) |
これだとメモリーを使いすぎるので、対角行列にするべきか?
julia> I3=Diagonal(ones(Float64,3)) 3×3 Diagonal{Float64,Array{Float64,1}}: 1.0 ⋅ ⋅ ⋅ 1.0 ⋅ ⋅ ⋅ 1.0 |
julia> using SparseArrays julia> I3=sparse(Diagonal(ones(Float64,3))) 3×3 SparseMatrixCSC{Float64,Int64} with 3 stored entries: [1, 1] = 1.0 [2, 2] = 1.0 [3, 3] = 1.0 |
色々用意してあるわけだ。