「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。データ分析・語学に力点を置いています。 →現在、コンサルタントの雛になるべく、少しずつ勉強中です(※2024年1月21日改訂)。

MENU

Juliaを基礎からゆっくりと(その05/18)

 \mathrm{R}\mathrm{Python}\mathrm{C}言語関係など覚えたいもの、覚えるべきものはたくさんある一方で、注目が集まっているから、やってみたい。ということでプログラミング言語としての\mathrm{Julia}を学んでいく。

2. Juliaの言語機能

2.5 コレクション

 コレクションは一連のデータを格納する型あるいはオブジェクトを指す。ここでは\mathrm{Julia}に標準で用意されている主要なコレクションについて説明する。
 \mathrm{Julia}では慣用的に関数名の最後に!を付与すると、引数のすべてまたは一部を変更または破棄することを意味する。\mathrm{mutable}なコレクションでは要素を追加・削除する機能があるため、関数名の末尾には!を付与する場合がある。

2.5.1 タプル

 タプルは複数のオブジェクトをまとめておくデータ構造である。\mathrm{Tuple}型のオブジェクトの要素は1で始まるインデックスでアクセスする。タプルは\mathrm{immutable}であるため、値を変更できない。
 タプルはたとえば\mathrm{Array}型のサイズを表現するのに用いる。実際、行列のサイズを取る\mathrm{size}関数の出力はタプルである。

##############
### タプル ###
##############

# タプルの生成
t = (1,2,3)

# 型のチェック
println(typeof(t))

# 要素へのアクセス
println(t[1])

try
    t[1] = 4
catch
    println("One cannot rewrite any elements in a tuple!")
finally
    println(t[1])
end

### タプルはたとえばArray型のサイズとして用いられる
array = rand(4,3)

s = size(array)

println(typeof(s))

### また関数の可変長引数もタプルである
f(x...) = x

y = f(1,2,3)

println(y)
println(typeof(y))
2.5.2 名前付きタプル

 各要素に名前を付けることができるタプルを名前付きタプルという。

### 名前付きタプルへのアクセス
named_tuple = (a = 1, b = 2)

println(named_tuple)
println(typeof(named_tuple))

# 要素にアクセス
println(named_tuple.a)
println(named_tuple[1])
println(named_tuple[:a])

# キーと値の取得
println(keys(named_tuple))
println(values(named_tuple))
2.5.3 リスト

 ここでは系列データを格納し値の追加や削除ができるコレクションを指してリストと呼ぶ。\mathrm{Julia}では1次元の\mathrm{Array}型をリストとして用いる。値の追加や削除には、\mathrm{push!},\mathrm{pop!},\mathrm{insert!}および\mathrm{deleteat!}などを用いる。

##############
### リスト ###
##############

# リストの定義
list = []

list = [1,2]

# リストに値を加える
push!(list,3)

println("リストの追加:",list)

# 末尾の要素を取り出す
println("末尾の要素を取り出す:",pop!(list))

# i番目に要素を挿入する
insert!(list,2,4) # 第1引数のリストの第2引数の場所に第3引数を追加する
println("i番目に要素を追加する:",list)

# i番目の要素を削除する
deleteat!(list,2)
println("i番目の要素を削除する:",list)
2.5.4 辞書

 辞書はキーと値のペアを格納するコレクションである。基本的には\mathrm{Dict(K,V)}という形式で宣言する。過去のVer.では\mathrm{V}の部分の型宣言を省略可能なことがあったものの、\mathrm{Julia\ 1.8.0}では省略不可能になっていた。

############
### 辞書 ###
############

# 定義方法
d = Dict{String, Int64}()
d["a"] = 1; d["b"] = 2

println(d)

# 2つ目の型指定を省略すると、Anyでしたことになる
#  => テスト環境(Julia 1.8.0)では省略不可

try
    d2 = Dict{String}()
catch
    println("第2引数は省略できません。")
    d2 = Dict{String,Any}()
    d2["a"] = 1; d2["b"] = 2
end

println(d2)

println("")
println("**********************")
println("")

# 値へのアクセス:基本的にキーを用いる
println("値へのアクセス方法1:",d["a"])

try
    println("値へのアクセス方法2":d["c"])
catch
    println("キーにない値でアクセスするとエラーを返す")
end


try
    println("値へのアクセス方法2":d[1])
catch
    println("インデックス(番号)でのアクセスはできない")
end

# 値の書き換え
d["a"] = 5
println(d)

# キーとしてある文字列の有無はhaskey()で検索可能
println("aの有無:",haskey(d,"a"))
println("cの有無:",haskey(d,"c"))
2.5.5 集合

 キーのみを保持する辞書を集合という。データからユニークな要素のみを取り出したり、その数を数えるのに頻用される。

############
### 集合 ###
############

# 集合の定義
s = Set([1,2]) # リストをSet()の引数として与える

typeof(s)

println("")
println("**********************")
println("")

# 値を加える
println("初期状態:",s)
push!(s,3) # あるスカラーを加える

println("元に3を追加:",s)

s = union(s, Set([4,5])) # 和集合を取る
println("[4,5]との和集合:",s)

# 古い書き方ではunion(s, Set([4,5]))とすれば勝手にs = union(s, Set([4,5]))となっていた
# 今はしっかりとs = と値を渡してやること

println("")
println("**********************")
println("")

# 共通部分
s = intersect(s, [3,4])
println("[3,4]との共通部分:",s)
2.5.6 コレクション共通の関数

 多くのコレクションに共通で使える関数がある:

 
関数
戻り値の型
概要
  \mathrm{isempty(collecton)} \mathrm{Bool} コレクションが空か否か
  \mathrm{empty!(collection)} \mathrm{collection} コレクションを空にする
  \mathrm{length(collection)} \mathrm{Int} コレクションの要素数
  \mathrm{eltype(collection)} \mathrm{Type} コレクションの型パラメータ
2.5.7 コレクションのイテレータ

 コレクションの要素は\mathrm{for}文で1つずつ順番に列挙できる。

xs = [1,2,3,4,5]

i = 0

for x in xs
    i += 1
    println("xsの",i,"番目の値は",x) 
end
プライバシーポリシー お問い合わせ