2014年9月27日開催
プログラミング言語「Julia」の集いです。まだまだ利用者の少ないJuliaについて、様々な知見を共有することを目的としています。
JuliaTokyo #2 では、参加者の方々へ利用言語についてのアンケートを行いました。以下が結果です;
総回答者数 81名 (複数回答可)
50 Python
36 R
25 Java
20 Ruby
20 C++
19 その他
18 Excel
15 C
14 Julia
6 Visual Basic
6 Perl
6 Matlab / Octave
5 Scala
2 Fortran
2 Clojure
1 F#
この導入セッションでは、IJuliaのnotebookを使って説明を行います。IJuliaは、iPythonをJuliaで利用するためのパッケージです。
IJulia(iPython)の他にも
といった環境で利用できます。
Vim、Emacs、Sublime Text、Textmate、Notepad++、Kateといったエディタには、Juliaの編集モードが用意されています。
公式サイトで、安定版および開発版(Nightly builds)のバイナリが、Windows、Mac OS X、Ubuntu向けに用意されています。
Max OS XのhomebrewやDebianのaptといったパッケージ管理システムに登録されている場合もありますが、バージョンが最新安定版より古い可能性もあるので注意が必要です。
このチュートリアル実施時の最新安定版は、2014年8月に公開された v0.3 です。以前のバージョンと一部互換性のない部分もありますので、ご注意ください。
バイナリを実行すると、標準REPLが起動します。
$ julia # Juliaを起動
_
_ _ _(_)_ | A fresh approach to technical computing
(_) | (_) (_) | Documentation: http://docs.julialang.org
_ _ _| |_ __ _ | Type "help()" for help.
| | | | | | |/ _` | |
| | |_| | | | (_| | | Version 0.3.0 (2014-08-20 20:43 UTC)
_/ |\__'_|_|_|\__'_| | Official http://julialang.org/ release
|__/ | x86_64-apple-darwin13.3.0
julia>
まず、iPythonをインストールする必要があります。色々なPythonのライブラリをまとめてインストールしてくれるAnacondaを使うと便利です。
次に、JuliaのREPLから
Pkg.add("IJulia")
とすると、IJuliaをインストールできます。
エラーの場合は
Pkg.update("IJulia")
や
Pkg.build("IJulia")
を試してみてください。
IJuliaがインストールされると、シェルから
$ ipython notebook --profile julia
と実行するか、JuliaのREPLから
julia> using IJulia
julia> notebook()
とすることでIJulia notebookを起動できます。
ちなみにこれからは、iPythonからPython部分を除いたものがJupyterというプロジェクトになるので、Juliaもこちらを使うことになります。
1 + 1
+(1, 1)
methods(+)
1 + 2 * 3
typeof(1) # 型を調べる
typeof(1.0)
1 / 3 # 除算の結果は必ず浮動小数点数
3 \ 1 # 右辺を左辺が割る除算
1 // 3 # 有理数
typeof(1 // 3)
names(1 // 3) # 型の構造を調べる
(1 + 2im) * (2 - 3im) # 複素数
typeof(1 + 2im)
names(1 + 2im)
sqrt(-1 + 0im)
2 ^ 8 # べき乗
0.314e1 # 科学技術表記
1_000_000 # アンダースコアによる数値の区切りが可能
e # あらかじめ定義されている数値
π
golden
typeof(golden)
pi
ちなみにタブキーで補完が行えるが、これはLaTex記法の変換にも使える。
> \pi TAB
\pi
x = 10
あ = 10
pi = 3
pi
2pi # *を省略できる
2x^2 + 4x + 1 # シンプルに多項式を記述できる
スタイル規則
c.f.
str1 = "This is a string."
typeof(str1)
str2 = "これは文字列です。"
str2[1]
typeof(str2)
str3 = "\u2200 x \u2203 y s.t. f(y) > x"
str4 = "1 + 1 = $(1 + 1)" # インターポレーション
print("Hello World!")
println("Hello Julia!")
dict = ["one"=> 1, "two"=> 2, "three"=> 3]
dict = ["one"=> 1, "two"=> 2, "three"=> 3.0]
dict["one"]
x = [1, 2, 3] # Int64
x[1] # Indexは1から始まる
x[0]
x[2:3]
x[end]
[1, 2, "Hello"] # Any
[1 2 3] # 1x3
matrix = [1 4 7; 2 5 8; 3 6 9]
matrix[1,3]
[1 2 3] * [1,2,3]
# if /else
x = 1
if x == 1
println("One!")
elseif x == 2
println("Two!")
else
println("Not One or Two!")
end
# for
for i = 1:5
println(i)
end
for str in ["foo","bar","baz"]
println(str)
end
for i = 1:2, j = 3:4
println((i, j))
end
square(x) = x * x
square(3)
f = (x) -> 2x^2 + 4x + 1
f(2)
# FizzBuzz
function fizzbuzz(x::Int64) # 引数の型を指定している
println("This is Int64 fizzbuzz")
for i = 1:x
if (i % 3 == 0) && (i % 5 == 0)
println("FizzBuzz")
elseif i % 3 == 0
println("Fizz")
elseif i % 5 == 0
println("Buzz")
else
println(i)
end
end
end
# 同じ名前で違う引数型の関数
function fizzbuzz(x::Float64)
println("This is Float64 fizzbuzz")
for i = 1:x
if (i % 3 == 0) && (i % 5 == 0)
println("FizzBuzz")
elseif i % 3 == 0
println("Fizz")
elseif i % 5 == 0
println("Buzz")
else
println(i)
end
end
end
function fizzbuzz(x)
println("$(x) is neither Int or Float.")
end
fizzbuzz(10)
fizzbuzz(10.0)
fizzbuzz(10 + 10im)
fizzbuzz("String")