ジュリアにおける配列のスライシングとインデックス化
概要
ジュリアは、R、パイソン、マトラボの利点が混在する言語だ。配列はプログラミングの基本であり、その利用で複数の言語の痕跡が見られる。
コード
行列
julia> M = [1. 2. ; 3. 4.]
2×2 Array{Float64,2}:
1.0 2.0
3.0 4.0
julia> size(M)
(2, 2)
julia> length(M)
4
行列の場合、ほぼマトラボの文法で定義され、使われる。size()
関数はマトラボと同じように使用され、パイソンのnumpy
パッケージのプロパティ.shape
に相当する機能をする。length()
はマトラボと異なり、全要素の数を返す。
二次配列
julia> x = [[1,2,3,4] for _ in 1:4]; x
4-element Array{Array{Int64,1},1}:
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4]
配列内にループを配置して使用することは、パイソンでよく見られる方法だ。これにより、Rのrep()
関数などを似たように再現できる。
スライシング
julia> y = [3,2,5,1,4]
5-element Array{Int64,1}:
3
2
5
1
4
julia> y[[4,2,1,5,3]]
5-element Array{Int64,1}:
1
2
3
4
5
julia> y[3:end]
3-element Array{Int64,1}:
5
1
4
julia> y[3:4] .= -1; y
5-element Array{Int64,1}:
3
2
-1
-1
4
インデキシングは、Rと似ており、インデックスの配列を与えると、その順序で出力する。配列の最後のインデックスをendで表現することから、スライシングはマトラボからの影響があると分かる。最後に、.=を使って、3、4番目の要素に-1を直接代入することも、マトラボに似ている。
インデキシング
julia> x = [1 2; 3 4]
2×2 Array{Int64,2}:
1 2
3 4
julia> x[1,:]
2-element Array{Int64,1}:
1
2
julia> x[[1],:]
1×2 Array{Int64,2}:
1 2
julia> x[1,1] = -1; x
2×2 Array{Int64,2}:
-1 2
3 4
特殊なのは、インデキシングの方法によって、結果が異なる可能性があることだ。概念的には、同じものを入れても、結果が同じになると思うが、入れる時に要素が入れば、結果も要素として得られ、配列が入れば、結果も配列として得ることができる。これはジュリアを使いにくくするが、同時に高度な機能を実装するのに大いに役立つ。
環境
- OS: Windows
- julia: v1.5.0