logo

ジュリアにおける配列のスライシングとインデックス化 📂ジュリア

ジュリアにおける配列のスライシングとインデックス化

概要

ジュリアは、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