3
1

More than 1 year has passed since last update.

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

Last updated at Posted at 2020-11-21

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

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
 これに対する型はrow-major order型で、以下のような順序で数えます。
image.png

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

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

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

①Array{T}(undef, dims...)

値が初期化されていない(任意の値の)配列を生成します。以下の例では2行3列の配列を生成しています。
image.png
この後、各要素に整数を設定するには、例えば以下のように行います。
いずれも以下のような2x3次元配列で設定するものとします。
image.png
2行3列配列の各要素を設定する(行列アドレスを指定)
image.png
2行3列配列の各要素を設定する(インデックス番号を指定)
image.png

②zeros(T, dims...)

全ての要素を0に初期化します。以下の例では2行3列の配列を生成しています。
image.png

③ones(T, dims...)

全ての要素を1に初期化します。以下の例では2行3列の配列を生成しています。
image.png

④rand(Int, dims...)

一様分布でランダムに初期化した配列を生成します。以下の例では2行3列の配列を生成しています。
image.png

⑤randn(Float32, 2, 3)

正規分布でランダムに初期化した配列を生成します。以下の例では2行3列の配列を生成しています。
image.png

⑥fill(x, dims...)

全ての要素をxで初期化した配列を生成します。以下の例では2行3列の配列を生成しています。
image.png

⑦fill!(A, x)

配列Aを値xで初期化した配列を生成します。以下の例では2行3列の配列を生成しています。
image.png

⑧reshape(A, dims...)

配列Aのサイズを変更します。以下の例では1行6列の配列を、2行3列の配列へ変更しています。
image.png
また、以下のようにタプルを指定したり、":"(コロン)で省略表記することもできます。
 reshape(array8, (タプル))
 reshape(array8, 1, :)

この場合、変更はcolumn-major order型で変換されます。
image.png

⑨copy(A)

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

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

⑩deepcopy(A)

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

⑪collect(Float32, start:step:end)

指定した型でstartからendまで、step刻みで一次元配列を生成します。
image.png

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

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

1次元配列

要素と要素の間にカンマを入れずに宣言すると、Matrix型となります。
image.png

2次元配列

行を区切る記号として";"(セミコロン)を使用します。
image.png

3次元配列

2次元配列同様に、行を区切る記号として";"(セミコロン)を使用します。
image.png

※要素取得時の注意
上記配列はMatrix型ですが、1次元目要素(1行目)を以下のように取得するとVector型に変化しますので注意が必要です。
image.png
1次元目要素(1行目)をMatrix型で取得したい場合は、reshape()関数を追加するとできます。
image.png

もくじ

Julia早引きノート[01]変数・定数の使い方
Julia早引きノート[02]算術式、演算子
Julia早引きノート[03]複素数
Julia早引きノート[04]正規表現
....

もくじを開く

Julia早引きノート[05]if文
Julia早引きノート[06]ループ処理
Julia早引きノート[07]try, catch, finally
Julia早引きノート[08]変数の型(Int, Float, Bool, Char, String)
Julia早引きノート[09]関数 (1)基本編
Julia早引きノート[10]関数 (2)応用編
Julia早引きノート[11]Nothing型
Julia早引きノート[12]複合型(Composite Type)型
Julia早引きノート[13]タプル
Julia早引きノート[14]リスト(Array型一次元配列)
Julia早引きノート[15]辞書(dictionary)
Julia早引きノート[16]集合
Julia早引きノート[17]多次元配列 (1)初期化
Julia早引きノート[18]多次元配列 (2)様々な演算や関数
Julia早引きノート[19]多次元配列 (3)サブ配列
Julia早引きノート[20]ファイル入出力
Julia早引きノート[21]JSON、XMLファイルの入出力
Julia早引きノート[22]Python関数やPythonモジュールの呼び出し
Julia早引きノート[23]JuliaでのMatplotlibによるグラフ描画
Julia早引きノート[24]CSVFiles(DataFrameとの連携)
Julia早引きノート[25]線形代数演算(ベクトル・行列計算)
(※引き続きコンテンツを増やしていきます)

関連情報

: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/

ご意見など

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

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1