Julia Language
配列
サーチ…
構文
- [1,2,3]
- [1 2 3]
- [1 2 3; 4 5 6; 7 8 9]
- 配列(型、淡色...)
- もの(タイプ、暗い...)
- ゼロ(タイプ、ディムス...)
- トゥルーズ(タイプ、ディムス...)
- 偽物(タイプ、暗闇...)
- プッシュ!(A、x)
- ポップ!(A)
- unshift!(A、x)
- シフト!(A)
パラメーター
パラメーター | 備考 |
---|---|
にとって | push!(A, x) 、 unshift!(A, x) |
A | 追加先の配列。 |
x | 配列に追加する要素。 |
単純な配列の手動構築
Julia配列を手動で初期化するには、角括弧の構文を使用します。
julia> x = [1, 2, 3] 3-element Array{Int64,1}: 1 2 3
コマンドの最初の行には、作成したアレイのサイズが表示されます。また、要素の種類と次元(この場合はInt64
と1
)を示します。 2次元配列の場合は、スペースとセミコロンを使用できます。
julia> x = [1 2 3; 4 5 6] 2x3 Array{Int64,2}: 1 2 3 4 5 6
初期化されていない配列を作成するには、 Array(type, dims...)
メソッドを使用します。
julia> Array(Int64, 3, 3) 3x3 Array{Int64,2}: 0 0 0 0 0 0 0 0 0
関数zeros
、 ones
、 trues
、 falses
全く同じように動作するが、フルアレイ製造方法有する0.0
、 1.0
、 True
またはFalse
それぞれを、。
配列型
Juliaでは、配列には型T
と次元D
( Array{T, D}
)の2つの変数でパラメータ化された型があります。整数の1次元配列の場合、型は次のようになります。
julia> x = [1, 2, 3]; julia> typeof(x) Array{Int64, 1}
配列が2次元行列の場合、 D
は2に等しくなります。
julia> x = [1 2 3; 4 5 6; 7 8 9] julia> typeof(x) Array{Int64, 2}
要素型は、抽象型でもあります。
julia> x = [1 2 3; 4 5 "6"; 7 8 9] 3x3 Array{Any,2}: 1 2 3 4 5 "6" 7 8 9
ここでAny
(抽象型)は結果の配列の型です。
配列作成時の型の指定
上記の方法でArrayを作成すると、Juliaは適切な型を推論するために最善を尽くします。上記の最初の例では、整数のように見える入力を入力したため、JuliaはデフォルトのInt64
型にデフォルト設定されていました。しかし、時々、より具体的になりたいと思うかもしれません。次の例では、 Int8
代わりに型を指定します。
x1 = Int8[1 2 3; 4 5 6; 7 8 9]
typeof(x1) ## Array{Int8,2}
たとえそれがそうでなければ整数として解釈されるかもしれない方法で入力を書いても(例えば1.0
代わりに1
を書いていても)、型をFloat64
ようなものとして指定することさえできます。例えば
x2 = Float64[1 2 3; 4 5 6; 7 8 9]
配列の配列 - プロパティと構造
Juliaでは、他のArray型オブジェクトを保持するArrayを持つことができます。さまざまなタイプの配列を初期化する次の例を考えてみましょう。
A = Array{Float64}(10,10) # A single Array, dimensions 10 by 10, of Float64 type objects
B = Array{Array}(10,10,10) # A 10 by 10 by 10 Array. Each element is an Array of unspecified type and dimension.
C = Array{Array{Float64}}(10) ## A length 10, one-dimensional Array. Each element is an Array of Float64 type objects but unspecified dimensions
D = Array{Array{Float64, 2}}(10) ## A length 10, one-dimensional Array. Each element of is an 2 dimensional array of Float 64 objects
たとえば、ここでCとDの違いを考えてみましょう。
julia> C[1] = rand(3)
3-element Array{Float64,1}:
0.604771
0.985604
0.166444
julia> D[1] = rand(3)
ERROR: MethodError:
rand(3)
は、型Array{Float64,1}
オブジェクトを生成します。 C
の要素の唯一の仕様は、Float64型の要素を持つ配列であるため、これはC
の定義に適合します。しかし、 D
については、要素が2次元配列でなければならないと指定しました。したがって、 rand(3)
は2次元配列を生成しないので、 D
特定の要素に値を代入することはできません
配列内の配列の特定の次元を指定する
配列は配列型の要素を保持すると指定することができますが、それらの要素は2次元配列でなければなりません。たとえば、それらの要素の次元を直接指定することはできません。たとえば、10個の配列を保持する配列が必要であると直接指定することはできません。各配列は5,5です。これは、 Array()
構築に使用されたArray()
関数の構文からわかります。
配列{T}(淡色)
要素型Tの初期化されていない稠密な配列を作成します。dimsはタプルまたは一連の整数引数です。構文Array(T、dims)も使用できますが、非推奨です。
Juliaの配列の型には、次元の数は含まれますが、それらの次元のサイズは含まれません。したがって、この構文には正確な寸法を指定する場所がありません。それにもかかわらず、Arrayの理解を使用して同様の効果を得ることができます。
E = [Array{Float64}(5,5) for idx in 1:10]
注:このドキュメントは、以下のSO回答を反映しています。
空の配列を初期化する
Juliaで[]
を使って空の配列を作成することができます。最も簡単な例は次のとおりです。
A = [] # 0-element Array{Any,1}
型Any
配列は、通常、指定された型の配列と同様に機能しません。たとえば、次のように使用できます。
B = Float64[] ## 0-element Array{Float64,1}
C = Array{Float64}[] ## 0-element Array{Array{Float64,N},1}
D = Tuple{Int, Int}[] ## 0-element Array{Tuple{Int64,Int64},1}
最後の例のソースについては、Juliaのタプルの空の配列の初期化を参照してください。
ベクトル
ベクトルは1次元の配列であり、多次元対応のものとほとんど同じインタフェースをサポートします。しかし、ベクトルは追加の操作もサポートします。
まず、 Vector{T}
はT
がある型であるということはArray{T,1}
と同じ意味であることに注意してください。
julia> Vector{Int}
Array{Int64,1}
julia> Vector{Float64}
Array{Float64,1}
1つはArray{Int64,1}
を "1次元配列のInt64
"として読み込みます。
多次元配列とは異なり、ベクトルのサイズを変更することができます。要素は、ベクトルの前面または背面から追加または削除できます。これらの操作はすべて一定の償却時間です。
julia> A = [1, 2, 3]
3-element Array{Int64,1}:
1
2
3
julia> push!(A, 4)
4-element Array{Int64,1}:
1
2
3
4
julia> A
4-element Array{Int64,1}:
1
2
3
4
julia> pop!(A)
4
julia> A
3-element Array{Int64,1}:
1
2
3
julia> unshift!(A, 0)
4-element Array{Int64,1}:
0
1
2
3
julia> A
4-element Array{Int64,1}:
0
1
2
3
julia> shift!(A)
0
julia> A
3-element Array{Int64,1}:
1
2
3
慣習として、これらの機能のそれぞれはpush!
、 pop!
、 unshift!
、そしてshift!
感嘆符で終わり、それらが引数を突然変異していることを示します。機能がpush!
そしてunshift!
配列を返しますが、 pop!
shift!
削除された要素を返します。
連結
より小さな行列から行列を構築することはしばしば有用です。
水平連結
行列(およびベクトル、列ベクトルとして扱われる)は、 hcat
関数を使用して水平に連結することができます。
julia> hcat([1 2; 3 4], [5 6 7; 8 9 10], [11, 12])
2×6 Array{Int64,2}:
1 2 5 6 7 11
3 4 8 9 10 12
角括弧の表記法と空白を使用すると便利な構文が使用できます。
julia> [[1 2; 3 4] [5 6 7; 8 9 10] [11, 12]]
2×6 Array{Int64,2}:
1 2 5 6 7 11
3 4 8 9 10 12
この表記法は、線形代数で使用されるブロック行列の表記法と厳密に一致します。
julia> A = [1 2; 3 4]
2×2 Array{Int64,2}:
1 2
3 4
julia> B = [5 6; 7 8]
2×2 Array{Int64,2}:
5 6
7 8
julia> [A B]
2×4 Array{Int64,2}:
1 2 5 6
3 4 7 8
[]
構文を使用して1つの行列を水平に連結することはできません。その代わりに、行列の1要素ベクトルを作成することになります。
julia> [A]
1-element Array{Array{Int64,2},1}:
[1 2; 3 4]
垂直連結
垂直連結は水平連結に類似しているが、垂直方向にある。垂直連結の関数はvcat
です。
julia> vcat([1 2; 3 4], [5 6; 7 8; 9 10], [11 12])
6×2 Array{Int64,2}:
1 2
3 4
5 6
7 8
9 10
11 12
あるいは、角括弧の表記法をセミコロンで使用することもできます;
区切り文字として
julia> [[1 2; 3 4]; [5 6; 7 8; 9 10]; [11 12]]
6×2 Array{Int64,2}:
1 2
3 4
5 6
7 8
9 10
11 12
ベクトルも垂直方向に連結することができます。結果はベクトルです:
julia> A = [1, 2, 3]
3-element Array{Int64,1}:
1
2
3
julia> B = [4, 5]
2-element Array{Int64,1}:
4
5
julia> [A; B]
5-element Array{Int64,1}:
1
2
3
4
5
水平と垂直の連結を組み合わせることができます:
julia> A = [1 2
3 4]
2×2 Array{Int64,2}:
1 2
3 4
julia> B = [5 6 7]
1×3 Array{Int64,2}:
5 6 7
julia> C = [8, 9]
2-element Array{Int64,1}:
8
9
julia> [A C; B]
3×3 Array{Int64,2}:
1 2 8
3 4 9
5 6 7