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

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。目下、データ分析・語学に力点を置いています。

MENU

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

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

2. Juliaの言語機能

2.5 コレクション

 \mathrm{Julia}では\mathrm{Python}などと同様に基本的なコレクションが標準ライブラリとして用意されている。また\mathrm{DataStructures.jl}パッケージには有用なデータ構造が提供されている。
 \mathrm{Julia}では慣用的に関数名の最後に!を付与したものは引数のすべてまたは一部を変更もしくは破棄することを意味する。\mathrm{mutable}なコレクションでは、コレクションに要素を追加したり削除したりする機能が提供されているため、それらを行なう関数名の末尾には!が付与される。

2.5.1 タプル

 タプルは複数のオブジェクトをまとめるデータ構造で括弧()で表記する。任意の数の型パラメータを持つ。タプルはたとえば\mathrm{Array}型のサイズを表現するのに用いる。
 タプルの各要素には1から始まるインデックスによってアクセスする。タプルは\mathrm{immutable}型で、値の変更はできない。

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

# インデックス(1ではじまる数字)で各要素にアクセス
println(t[1]) 

# タプルは後から値を変更できない
try
    t[1] = 4
catch
    "タプルは値を変更できません。"
end
# Array型のサイズ表現にタプルを用いる
array = rand(4,3)
println(array)

println(size(array)) # サイズ

# 関数の可変長引数はTuple型のオブジェクト
f(x...) = x

y = f(1,2,3)
println(y)
println(typeof(y))
2.5.2 名前付きタプル

 各要素に名前を付けることのできるタプルを名前付きタプル(named tuple)という。

######################
### 名前付きタプル ###
######################

tuple1 = (a = 1, b = 2,c = 3)
println(tuple1)

# key()とvalues()でキーと値それぞれにアクセスできる
println(keys(tuple1))
println(values(tuple1))

# インデックスでも名前でも各要素にアクセスできる
println(tuple1.a)
println(tuple1[1])
2.5.3 リスト

 \mathrm{Julia}には\mathrm{Python}などと同じリストを持つ。\mathrm{Julia}では1次元の\mathrm{Array}型をリストとして用いる。値の追加や削除には\mathrm{push!}\mathrm{pop!}\mathrm{insert!}\mathrm{deleteat!}などを用いる。
 リストは[]で定義する。

list = []

list = [1, 2]

# 末尾に要素を加える
push!(list,3)

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

# すべての要素を出す
list

# i番目に要素を挿入する
insert!(list,2,4) # 2番目の引数に挿入したい番号iを与え、3番目に挿入したい値を入れた

# i番目の要素を削除する
deleteat(list,1) #2番目の引数に与えたインデックスの値を削除する
2.5.4 辞書

 辞書はキーと値のペアを格納するコレクションである。キーは重複が許されない。
 \mathrm{Julia}の辞書は\mathrm{Dict}\{K,V\}型でキーと値に関する2つの型パラメータを持つ。

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

d = Dict{String,Int64}() # 辞書の定義

d["a"] = 1; d["b"] = 2

println(d)

### 値にアクセス
println(d["a"])

try
    println(d["c"])
catch
    println("cはないです")
end


### ある値がキーにあるかを判定
println(haskey(d, "a")) # あればtrue
println(haskey(d, "c")) # なければfalse
2.5.5 集合

 集合はキーのみを保持する辞書である。データからユニークな要素だけを取り出したりその数を数えたりする際に用いる。

# 集合の定義
s = Set([1,2])

#
println(typeof(s))

# 値の追加
println(push!(s,3))

# 和集合
println(union(s, [3, 4]))

# 積集合
println(intersect(s,[1,9]))

# 部分集合になっているか判定
issubset([1,2],[1,2,3])
[1,2][1,2,3] # 上と同じ \subseteq
2.5.6 コレクション共通の関数
  
関数
概要
   \mathrm{isempty(collection)} コレクションがからかどうかを返す
   \mathrm{empty!(collection)} コレクションを空にする
   \mathrm{length(collection)} コレクションの要素数
   \mathrm{eltype(collection)} コレクションの型パラメータ
2.5.7 コレクションのイテレーション

 コレクションのイテレーションを一般化すると以下のように書ける。

next = iterate(collection)

while next !== nothing
   (x, start) = next
    next = iterate(collection, state)
end

 自作のコレクション型に対してイテレーションを実現するには\mathrm{iterate}関数を実装すればよい。

プライバシーポリシー お問い合わせ