や、言語関係など覚えたいもの、覚えるべきものはたくさんある一方で、注目が集まっているから、やってみたい。ということでプログラミング言語としてのを学んでいく。
前回
2. Juliaの言語機能
2.6 多次元配列
には型という多次元配列が標準で用意されている。ここでは多次元配列の要素の型を、は次元の数を表す。ただし内部的には1次元配列であるため、たとえば長さのベクトル(1次元配列)を行列(2次元配列)に変換することは、値のコピーなく実行できる。
の多次元配列はインデックスがから始まり、要素の順番は列優先である。そのための行列で、同じ列の要素を順番に列挙するのは極めて高速である一方で、同じ行の要素を順番に列挙するのはあまり効率的でない。
2.6.1 初期化
配列の初期化に関する主要な関数は以下のとおりである:
関数 |
概要 |
|
---|---|---|
値が初期化されていない配列 | ||
すべての値が0の配列 | ||
すべての値が1の配列 | ||
一様乱数でランダムに初期化した配列 | ||
正規乱数でランダムに初期化した配列 | ||
すべての値がの配列 | ||
配列を値で埋める | ||
配列と炊事した配列 | ||
配列のサイズを変更する | ||
配列をコピーする | ||
配列をコピーするの要素も再帰的にコピーする |
################## ### 多次元配列 ### ################## ####### A1 = zeros(Float64,3) A2 = zeros(Float64,3,3) A3 = zeros(Int64,3,3,3) println(A1) println(A2) println(A3) println("") println("*************") println("") ####### B1 = ones(Int64,3,3) println(B1) println("") println("*************") println("") ####### C1 = rand(Float64,3,3) println(C1) println("") println("*************") println("") ####### D1 = randn(Float64,3,3) println(D1) println("") println("*************") println("") ####### E1 = fill(3,3,3) println(E1) println("") println("*************") println("") ####### fill!(E1, -1) println(E1) println("") println("*************") println("") ####### # Aと同じ型とサイズの配列を返す F1 = similar(E1,Int64,4,4) println(F1) println("") println("*************") println("") ####### G1 = reshape(zeros(Int64,2,2),4) #2×2を4×1に変更 println(G1) println("") println("*************") println("") ####### H1 = ones(Int64,4,4) H2 = copy(H1) H3 = deepcopy(H1) println(H1) println(H2) println(H3)
2.6.2 基本的な操作
型に関する情報を取得する主要な関数は以下のとおりである:
関数 |
概要 |
|
---|---|---|
の要素の型 | ||
の要素数 | ||
の次元数 | ||
のサイズ | ||
番目の次元におけるのサイズ | ||
のストライド(要素同士が1次元配列上でいくつ離れているか) | ||
番目の次元におけるのストライド |
################## ### 多次元配列 ### ################## ### 基本的な操作 A = rand(Float64,3,3) a1 = eltype(A) a2 = length(A) a3 = ndims(A) a4 = size(A) a5 = size(A,1) a6 = strides(A) a7 = stride(A,1) println("A:",A) println(" Aの要素の型:",a1) println(" Aの要素数:",a2) println(" Aの次元数:",a3) println(" Aのサイズ:",a4) println(" 1番目の次元におけるAのサイズ:",a5) println(" Aのストライド:",a6) println(" 1番目の次元におけるAのストライド:",a7)
2.6.3 インデクシング
配列の値を取得したり値を代入したりする操作は以下で行う。
############################ ### 配列のインデクシング ### ############################ A = collect(reshape(1:9, 3, 3)) # 値の代入 A[3,3] = -9 println(A) # 範囲への代入 A[1:2, 1:2] = [-1 -4;-2 -5] println(A)
2.6.4 多次元配列の演算
関数 |
概要 |
関数 |
概要 |
|
---|---|---|---|---|
との加算 | とスカラーの乗算 | |||
との減算 | との右除算 | |||
との行列乗算 | \ | との左除算(=) |
関数 |
概要 |
関数 |
概要 |
|
---|---|---|---|---|
との要素同士の加算 | との要素同士の乗算 | |||
との要素同士の加算 | とスカラーの乗算 | |||
との要素同士の減算 | との要素単位での除算 | |||
との要素同士の減算 | とスカラーの除算 |
######################## ### 多次元配列の演算 ### ######################## using LinearAlgebra A = 2 * I(3) B = 0.5 * I(3) c = 2 res1 = A + B res2 = A - B res3 = A * B res4 = A * c res5 = A / B res6 = A \ B # B/Aと等価 println("配列の加算 A+B:",res1) println("配列の減算 A-B:",res2) println("配列の行列乗算 A*B:",res3) println("配列のスカラーとの乗算 A*c:",res4) println("配列の行列の右除算 :",res5) println("配列の行列の左除算 :",res6) println("") println("**********************************") println("") res1 = A .+ B res2 = A .+ c res3 = A .- B res4 = A .- c res5 = A .* B res6 = A .* c res7 = A ./ B res8 = A ./ c println("配列の要素単位での加算", res1) println("配列とスカラーでの加算", res2) println("配列の要素単位での減算", res3) println("配列とスカラーでの減算", res4) println("配列の要素単位での乗算", res5) println("配列とスカラーでの乗算", res6) println("配列の要素単位での除算", res7) println("配列とスカラーでの除算", res8)