Arry型(配列型)の簡単な演算
- juliaでは配列型をArrayという
- 演算はPythonなどと異なる結果になるので要注意
一般的な方法で代入
data1_ary = [1,2,3]
#=
3-element Vector{Int64}:
1
2
3
=#
配列を増やしたいときの注意点
2倍にすると「データの値自身が2倍に」
data2_ary = data1_ary*2 #配列数は増えずに値が変わる。
#=
3-element Vector{Int64}:
2
4
6
=#
pythonの場合「配列自身が2倍」になる
# python 3
print(data1_ary*2)
# [1, 2, 3, 1, 2, 3]
したがって以下などは要注意
#配列を0x10個埋め尽くしたい
zero10_arry = [0]*10
#zero10_arry は[0]となっている
#内包表記など別手段で
zero10_arry =[0 for i in 1:10]
データを演算するときの注意点
各データにアクセスするときはドット演算子を使う
data2_ary = data1_ary .*2 #ドット演算子は配列内のデータにアクセスする。(配列単位ではなくデータ単位での演算)
#=
3-element Vector{Int64}:
2
4
6
=#
文字列を扱うとき やはりドット演算子なしではできない。
dataStr1_ary = ["1","2","3"]
dataStr2_ary = dataStr1_ary *2 #MethodError: no method matching *(::String, ::Int64)
ドット演算子を使って各データを演算すればOK
dataStr2_ary = dataStr1_ary .*"&"
#=
3-element Vector{String}:
"1&"
"2&"
"3&"
=#
ベクトル演算をするときの簡単な注意点
[a,b,c]*[d e f]型の場合
2次元以上ならば可能だが1次元だとできない
data1_ary*[2 1]
#=
3×2 Matrix{Int64}:
2 1
4 2
6 3
=#
data1_ary*[2 2 3]
#=
3×3 Matrix{Int64}:
2 2 3
4 4 6
6 6 9
=#
data1_ary*[2]
#上の2つはできるがこれはエラー MethodError: no method matching *(::Vector{Int64}, ::Vector{Int64})
[a,b,c].*[d e f]型の場合 (ドット演算子アリ)
data1_ary.*[2] #こちらはOK
#=
3-element Vector{Int64}:
2
4
6
=#
data1_ary.*[2 4]
#=
3×2 Matrix{Int64}:
2 4
4 8
6 12
=#
data1_ary.*[2 3 4]
#=
3×3 Matrix{Int64}:
2 3 4
4 6 8
6 9 12
=#