Julia早引きノート［17］多次元配列 (1)初期化

###多次元配列 (1)初期化 (書き方例)

```ruby:note17

# 値が初期化されていない(任意の値の)配列を生成
array1 = Array{Int}(undef, 2, 3)

# 2行3列配列の各要素を設定する(行列アドレスを指定)
array1[1,1] = 10
array1[1,2] = 15
array1[1,3] = 20
array1[2,1] = 50
array1[2,2] = 55
array1[2,3] = 60

# 全ての要素を0に初期化
array2 = zeros(Int, 2, 3)

# 全ての要素を1に初期化
array3 = ones(Int, 2, 3)

# 一様分布でランダムに初期化した配列を生成
array4 = rand(Float32, 2, 3)

# 正規分布でランダムに初期化した配列を生成
array5 = randn(Float32, 2, 3)

# 全ての要素をxで初期化した配列を生成
array6 = fill(10.0, 2, 3)

# 配列Aを値xで初期化した配列を生成
array7 = Array{Int}(undef, 2, 3)
fill!(array7, 100)

# 配列Aのサイズを変更(column-major order型で並ぶ)
array8b = reshape(array8, 2, 3)

# 配列のコピー
array9b = copy(array9)

# 配列のコピー(deepcopy)
array9c = deepcopy(array9)

# 指定した型でstartからendまで、step刻みで一次元配列を生成
array11 = collect(Float32, 0:0.1:1)

# 要素を並べて直に生成(これらの宣言ではMatrix型になります)
　# 1次元配列
　array12 = [1 2 3]
　# 2次元配列
　array13 = [1 2; 3 4; 5 6]
　# 3次元配列
　array14 = [1 2 3; 4 5 6; 7 8 9]

```

##解説
・多次元配列は**Array{T,N}型**となります。Tは要素の型、Nは次元の数です。
・Juliaの配列は**インデックス番号が1**から始まります。
・要素の順番は**column-major order型**で並びます。
　column-major orderとは、配列の要素が下図のようなインデックス順序で数えられることを言います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/b0845d4a-60fb-4c8e-6f22-19aaa25670d4.png)
　これに対する型はrow-major order型で、以下のような順序で数えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/52c42e6e-6bf5-7e9d-12ed-d2906867ad57.png)


・多次元配列を使用する際には、まず初期化を行います。以下に説明します。
・また、要素を直に並べて簡易的に配列を生成することもできます。

####:large_blue_diamond: 多次元配列の初期化

多次元配列を使用する際に、以下のような関数を用いて初期化を行います。ここで、Tは要素の型、dimsは配列のサイズを表します。

#####①Array{T}(undef, dims...)
値が初期化されていない(任意の値の)配列を生成します。以下の例では2行3列の配列を生成しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/f945a170-771d-ae10-1826-f723d3e6f945.png)
この後、各要素に整数を設定するには、例えば以下のように行います。
いずれも以下のような2x3次元配列で設定するものとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/4604eb59-8832-fede-9fde-b45b178b47fd.png)
2行3列配列の各要素を設定する(行列アドレスを指定)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/215e406a-638a-59eb-bbeb-b14d57a24d9b.png)
2行3列配列の各要素を設定する(インデックス番号を指定)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/c1915b6e-ffe5-bc46-cdbd-d2c7663dea68.png)
#####②zeros(T, dims...)
全ての要素を0に初期化します。以下の例では2行3列の配列を生成しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/b875a7f8-76c3-da44-4ced-1fbce5466b27.png)
#####③ones(T, dims...)
全ての要素を1に初期化します。以下の例では2行3列の配列を生成しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/9f7d574f-5def-ee56-ef02-b822cf6e56c2.png)
#####④rand(Int, dims...)
一様分布でランダムに初期化した配列を生成します。以下の例では2行3列の配列を生成しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/6eec707d-411c-afbc-d998-be9a8b5416e4.png)
#####⑤randn(Float32, 2, 3)
正規分布でランダムに初期化した配列を生成します。以下の例では2行3列の配列を生成しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/ef241254-44ca-99c9-bfe8-6df80820c1e9.png)
#####⑥fill(x, dims...)
全ての要素をxで初期化した配列を生成します。以下の例では2行3列の配列を生成しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/0f9fde30-bef2-16cf-39dd-2692cf30df45.png)
#####⑦fill!(A, x)
配列Aを値xで初期化した配列を生成します。以下の例では2行3列の配列を生成しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/39f7fcab-d9f0-b882-89f3-9093ef5c59a7.png)
#####⑧reshape(A, dims...)
配列Aのサイズを変更します。以下の例では1行6列の配列を、2行3列の配列へ変更しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/121705b5-4c69-163d-9e39-001bc5781857.png)
また、以下のようにタプルを指定したり、":"(コロン)で省略表記することもできます。
　`reshape(array8, (タプル))`
　`reshape(array8, 1, :)`

この場合、変更は**column-major order型**で変換されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/226244b8-dd05-0825-1599-b9c5a192886c.png)


#####⑨copy(A)
配列Aをコピーします。コピーは参照コピーではありません。
コピー後、コピー元の配列の値を変えても、コピー後の配列の要素の値は変わりません。

コピー元の要素が複合型などで、さらに配下に値を持つ場合は、次のdeepcopyを使用して下さい。

#####⑩deepcopy(A)
配列Aをコピーします。Aの要素も再帰的にコピーします。
配列Aの要素が複合型で、さらにその下に値を持つ場合など、要素の再帰性を保持した配列をコピーし、新たな配列とします。

#####⑪collect(Float32, start:step:end)
指定した型でstartからendまで、step刻みで一次元配列を生成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/222a0e32-7724-86d8-cbb8-ecf0acff839f.png)

####:large_blue_diamond: 要素を直に並べて配列を生成

要素を直に並べて簡易的に配列を生成することもできます。

#####1次元配列

要素と要素の間にカンマを入れずに宣言すると、Matrix型となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/982b557b-3793-9373-e005-244c34a19c7f.png)

#####2次元配列

行を区切る記号として";"(セミコロン)を使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/094f33d2-dd2b-31ff-b9f6-991e433a35c5.png)

#####3次元配列

2次元配列同様に、行を区切る記号として";"(セミコロン)を使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/84e20de7-24e2-691f-7834-41a2987501c2.png)

**※要素取得時の注意**
上記配列はMatrix型ですが、1次元目要素(1行目)を以下のように取得するとVector型に変化しますので注意が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/d5876d7e-ec19-0caa-0f8b-0811b1e02552.png)
1次元目要素(1行目)をMatrix型で取得したい場合は、reshape()関数を追加するとできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/0ee181c7-7734-00fb-a8da-f116e186eeb3.png)


##もくじ
[Julia早引きノート［01］変数・定数の使い方](https://qiita.com/ttabata/items/a1ada2c0cba03672e105)
[Julia早引きノート［02］算術式、演算子](https://qiita.com/ttabata/items/90900d0914fa317f652d)
[Julia早引きノート［03］複素数]
(https://qiita.com/ttabata/items/225c77a4d71fafc3e482)
[Julia早引きノート［04］正規表現](https://qiita.com/ttabata/items/8b6e4a2b7c2ca299de03)
....
<details><summary>もくじを開く</summary><div>
[Julia早引きノート［05］if文]
(https://qiita.com/ttabata/items/4f0bcff1e32f60402dfb)
[Julia早引きノート［06］ループ処理]
(https://qiita.com/ttabata/items/2a53825101b0b75fb589)
[Julia早引きノート［07］try, catch, finally]
(https://qiita.com/ttabata/items/1d6fe990526c99b65b5f)
[Julia早引きノート［08］変数の型(Int, Float, Bool, Char, String)]
(https://qiita.com/ttabata/items/2b84a826e39bfe432b62)
[Julia早引きノート［09］関数 (1)基本編]
(https://qiita.com/ttabata/items/d9b4f2728ec0dbcc6394)
[Julia早引きノート［10］関数 (2)応用編]
(https://qiita.com/ttabata/items/462e216c43d519f1969d)
[Julia早引きノート［11］Nothing型]
(https://qiita.com/ttabata/items/0e5a6b21968d8752cf0b)
[Julia早引きノート［12］複合型(Composite Type)型]
(https://qiita.com/ttabata/items/27469216a3c33101c825)
[Julia早引きノート［13］タプル]
(https://qiita.com/ttabata/items/ebe35dbfec4efbc1c29a)
[Julia早引きノート［14］リスト(Array型一次元配列)]
(https://qiita.com/ttabata/items/7528863ccbb282e8260d)
[Julia早引きノート［15］辞書(dictionary)]
(https://qiita.com/ttabata/items/77a4f1d02b51d067bfb7)
[Julia早引きノート［16］集合]
(https://qiita.com/ttabata/items/ca8137922a785122037e)
[Julia早引きノート［17］多次元配列 (1)初期化]
(https://qiita.com/ttabata/items/01fecbd14363460a27a6)
[Julia早引きノート［18］多次元配列 (2)様々な演算や関数]
(https://qiita.com/ttabata/items/f35896a5fa005fba7fbc)
[Julia早引きノート［19］多次元配列 (3)サブ配列]
(https://qiita.com/ttabata/items/045c00406fe45270b42e)
[Julia早引きノート［20］ファイル入出力]
(https://qiita.com/ttabata/items/5a99c3998060d161ace8)
[Julia早引きノート［21］JSON、XMLファイルの入出力]
(https://qiita.com/ttabata/items/65ebec11830271f9be71)
[Julia早引きノート［22］Python関数やPythonモジュールの呼び出し]
(https://qiita.com/ttabata/items/3afc8cef40d1e98a7b17)
[Julia早引きノート［23］JuliaでのMatplotlibによるグラフ描画]
(https://qiita.com/ttabata/items/96a0e172addfac690cca)
[Julia早引きノート［24］CSVFiles(DataFrameとの連携)]
(https://qiita.com/ttabata/items/51446731a703b5aca524)
[Julia早引きノート［25］線形代数演算(ベクトル・行列計算)]
(https://qiita.com/ttabata/items/5abe14d5c510e8ca0f54)
(※引き続きコンテンツを増やしていきます)
</div></details>

##関連情報

:paperclip: Julia - 公式ページ
https://julialang.org/

:paperclip: Julia - 日本語公式ドキュメント
https://julia-doc-ja.readthedocs.io/ja/latest/index.html

:paperclip: 初めてのJuliaとインストール (Windows & Linux)
https://qiita.com/ttlabo/items/b05bb43d06239f968035

:paperclip: Julia - Mathematics
https://docs.julialang.org/en/v1/base/math/


##ご意見など

ご意見、間違い訂正などございましたらお寄せ下さい。