読者です 読者をやめる 読者になる 読者になる

プログラミングの実験場

Haskell/Webアプリ/画像処理/可視化/ITによる生産性向上 など

Julialangでの多次元配列使用のメモ: 配列の作成

多次元配列に関するドキュメントなど

自分のための覚書、チートシート。Juliaのバージョンは0.3を使用。

公式ドキュメント

Multi-dimensional Arrays — Julia Language 0.3.6-pre documentation

これらも参照

http://sebastianraschka.com/Articles/2014_matrix_cheatsheet_table.html

100 julialang exercises - Qiita

http://bogumilkaminski.pl/files/julia_express.pdf

初期化

zeros, ones, eye

julia> zeros(3)
3-element Array{Float64,1}:
 0.0
 0.0
 0.0

julia> zeros(3,1)
3x1 Array{Float64,2}:
 0.0
 0.0
 0.0
 
julia> zeros(3,4)
3x4 Array{Float64,2}:
 0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0

julia> ones(4,2)
4x2 Array{Float64,2}:
 1.0  1.0
 1.0  1.0
 1.0  1.0
 1.0  1.0

julia> eye(3)
3x3 Array{Float64,2}:
 1.0  0.0  0.0
 0.0  1.0  0.0
 0.0  0.0  1.0

julia> eye(Int,3)
3x3 Array{Int64,2}:
 1  0  0
 0  1  0
 0  0  1

julia> eye(3,4)
3x4 Array{Float64,2}:
 1.0  0.0  0.0  0.0
 0.0  1.0  0.0  0.0
 0.0  0.0  1.0  0.0

julia> eye(3,4,2)
ERROR: `eye` has no method matching eye(::Int64, ::Int64, ::Int64)
  • 2次元のNx1 Arrayと1次元のN-element Arrayは別の型を持つ。
  • 最初の引数で数値の型を指定できる。デフォルトはFloat64
  • eyeは正方行列じゃなくても使える。

rand

julia> rand()
0.8480348007358423

julia> rand(1,3)
1x3 Array{Float64,2}:
 0.327055  0.251911  0.37398

julia> rand(1:4,1,10)
1x10 Array{Int64,2}:
 3  4  3  4  1  3  2  3  2  3

julia> rand(1.0:0.3:9.0,1,10)
1x10 Array{Float64,2}:
 1.9  5.5  1.0  1.3  2.2  5.2  6.4  2.2  4.9  2.5
  • 最初の引数で型あるいは乱数の範囲を指定できる。 範囲は以下の様な指定方法がある。
1:4 # == 1, 2, 3, 4
1:2:10 # == 1, 3, 5, 7, 9
1:1.5:10 # == 1, 2,5, ...8.5, 10.0

範囲型の値は[]で囲むことで1次元の配列に変換できる。

julia> [1:1.5:10]'
1x7 Array{Float64,2}:
 1.0  2.5  4.0  5.5  7.0  8.5  10.0

'は転置行列を作る後置演算子。

内包表記

  • 以下の式において、x,a,zがそれぞれ指定された範囲を動き、x+a+zを各セルの値とする。
  • 変数名はなんでも良い。変数の登場順(この場合、x, a, z)に行、列、第3次元となる。
julia> a = [x+a+z for x=0:2, a=0:5, z=0:1]
3x6x2 Array{Int64,3}:
[:, :, 1] =
 0  1  2  3  4  5
 1  2  3  4  5  6
 2  3  4  5  6  7

[:, :, 2] =
 1  2  3  4  5  6
 2  3  4  5  6  7
 3  4  5  6  7  8