【基礎編】Julia入門~高速な動的型付け言語~
IT技術
「Julia」に入門してみよう!
Julia は、Python に継ぐ高速な動的型付け言語として、MIT が開発しているプログラミング言語です。
その歴史は浅く、2012年にオープンソース化されたばかり。
2020年8月には、最新版「Julia 1.5」がリリースされたことも、記憶に新しいですね!
Julia のコンセプトは、高速な処理ができることはもちろん、数理研究者向けな言語であること。
例えば、次のようなことが、できるようになっています。
- 並列処理
- 数学的なコーディング
- グラフ描画
さらには、「Web フレームワーク」や「機械学習フレームワーク」も用意されているのです。
というわけで本連載では、Julia の魅力をたくさん紹介していこうかと思います!
※本記事で使用するのは、「Julia ver 1.5」です。バージョンの違いによっては、動作が異なる場合がありますので、注意してください。
Juliaのインストール
まずは、以下の公式HPから、Julia のインストーラをダウンロードしましょう!
【 Julia 公式サイト】
https://julialang.org/
Julia をインストールしたら、一応パスも通しておいてください。
もし、macOS で zsh をシェルとして使用しているのであれば、次の手順でできます。
1$ echo "alias julia='/Applications/Julia-1.5.app/Contents/Resources/julia/bin/julia'" >> .zshrc
2$ exec $SHELL
Julia のバーションやシェル ( bash または zsh ) は、みなさんの環境に合わせて読み替えてくださいね。
パスが通っていれば、下画像のように、julia コマンドが使えるようになっているはずです。
もちろん、インストールしたアプリを直接起動しても、同じようになります。
Juliaを対話モード(REPL)で使ってみる
Julia は、Python と同じように1行ずつ処理していくため、対話モード( REPL )でコードを実行することができます。
1julia> 3 + 2
25
3
4julia> ans # 直前の結果はansに格納される
55
6
7julia> x = 5
85
9
10julia> typeof(x)
11Int64
12
13julia> y = .1
140.1
15
16julia> typeof(y)
17Float64
18
19julia> z = x + y
205.1
21
22julia> typeof(z)
23Float64
24
25julia> pi # 数学でよく使う定数は、定義済み
26π = 3.1415926535897...
パッケージ管理
Julia の大きな特徴は、パッケージ管理も行えること。
インストールも、対話モード( REPL )でできます。
例えば、「Plots」というグラフ描画用のライブラリをインストールするなら、次のようにしましょう!
1julia> import Pkg
2julia> Pkg.add('Plots')
また、複数のパッケージをインストールしたいなら、パッケージモード ( Pkg mode )を利用すると良いです。
パッケージモードは、Julia を立ち上げて、] コマンドで切り替えられます。
1(@v1.5) pkg> add Plots Statistics
ちなみに、status とすれば、インストールされたパッケージを確認できます。
1(@v1.5) pkg> status
2Status `~/.julia/environments/v1.5/Project.toml`
3 [91a5bcdd] Plots v1.6.4
4 [10745b16] Statistics
パッケージモードから抜けて、Julia モードに戻るには「delete キー」を押しましょう。
Juliaファイルを実行する
まずは、Julia の実行環境を整えていきます。
もし、PyCharm などの Jetbrains 社の IDE を使うなら、事前にプラグインもインストールしておきましょう!
そうすれば、快適にコーディングができます。
Juliaプラグイン (for Jetbrains IDE)
Julia プラグインは、Marketplace から直接インストールできます。
ただ、環境によっては、次のようなエラーが出るかもしれません…。
「requires "com.intellij.modules.java" plugin to be installed」
そういう人は、以下のリンクより、修正版をダウンロードしてインストールしてみましょう。
【GitHub:Julia プラグイン修正版】
https://github.com/JuliaEditorSupport/julia-intellij/files/3942247/julia-intellij_0.4.1_patched.zip
歯車アイコンから、「Install Plugin from Disk...」でインストールし、再起動さればOKです。
Julia環境完成
これで、PyCharm での Julia 環境はできました!
プロジェクト作成に、Julia が追加されているはずです。
早速コードを書いてみる
それでは、以下のように適当にコードを書いてみましょう!
ファイル拡張子は「.jl」です。
1lang = "Julia"
2
3println("Hello, $lang !")
これを実行してみると、「Hello, Julia !」と表示されるはずです。
さて、Julia の独特な構文が現れました。
次から、Julia の文法について、サクッと見ていきましょう!
Juliaの文法
ここからは、Julia の文法を一挙にまとめます。
1#=
2Juliaの文法を紹介
3複数行コメントは #= =#で囲む!
4=#
5
6# 単行はPythonと同じ
7
8#============#
9# 1. 四則演算
10println(0 + 1 - 2) # > -1 (加算・減算)
11println(3 * 4) # > 12 (乗算)
12println(5 ^ 6) # > 15625 (累乗)
13println(7 / 8) # > 0.875 (除算・実数)
14println(div(910, 11)) # > 82 (除算・整数)
15println(1213 ÷ 14) # > 86 上に同義
16println(1516 % 17) # > 3 (余り)
17
18println(+(1, 2, 3, 4, 5)) # > 15 (+も関数の一種)
19println(*(1, 2, 3, 4, 5)) # > 120 (*はメソッド扱いだが使い方は+と一緒)
20println(-(5, 3)) # > 2 (-もメソッドで、/なども同様)
21
22print("\n")
23#============#
24# 2. 変数定義
25# - 2.1 基本
26x = 10 # 通常の動的型付けによる変数定義
27y = 5.
28println(typeof(x)) # > Int64
29println(typeof(y)) # > Float64
30
31# - 2.2 Unicodeによる変数定義と文字列への変数展開
32変数 = "Hello," # 日本語OK
33α = "Julia!" # \alpha[tab] のようにLaTeXコードでギリシャ文字も使える
34
35print("$変数 $α\n") # > Hello, Julia (文字列内での変数展開は$を使う)
36
37print("\n")
38#============#
39# 3. 数学的コーディング (基本)
40# - 3.1 乗算演算子の省略
41z = 2(x + y) # 定数と変数(または括弧)による乗算は * いらない
42println(z) # > 30.0
43
44# - 3.2 予め定義されている定数
45println("2π = $(2pi)") # > 2π = 6.283185307179586 (複数の因数や項ならば$()を使う)
46println("4π = $(4π)") # > 4π = 12.566370614359172
47println("e = $(1ℯ)") # > e = 2.718281828459045 ("e"ではなく"ℯ (\euler)"じゃないとエラーが起きる)
48println("e = $(1MathConstants.e)") # > e = 2.718281828459045 ("e"を使うならこうする)
49println("φ = $(1MathConstants.φ)") # > φ = 1.618033988749895 (黄金比: なぜかφだけだとエラーが起きる??)
50
51# - 3.3 よく使う数学的関数
52println("abs(-5) = $(abs(-5))") # > abs(-5) = 5 (絶対値)
53println("sqrt(2) = $(sqrt(2))") # > sqrt(2) = 1.4142135623730951 (平方根)
54println("cbrt(3) = $(cbrt(3))") # > cbrt(3) = 1.4422495703074083 (立方根・三乗根)
55
56println("round(1.49) = $(round(1.49))") # > round(1.49) = 1.0 (四捨五入・整数)
57println("round(1.49) = $(round(1.49, digits=1))") # > round(1.49) = 1.5 (四捨五入・小数点以下第1位)
58println("floor(1.51) = $(floor(1.51))") # > floor(1.51) = 1.0 (床関数)
59println("ceil(1.51) = $(ceil(1.51))") # > ceil(1.51) = 2.0 (天井関数)
60
61println("e³ = $(exp(3))") # > ℯ³ = 20.085536923187668 (ネイピア数)
62
63println("gcd(168, 264) = $(gcd(168, 264))") # > gcd(168, 264) = 24 (最大公約数)
64println("lcm(168, 264) = $(lcm(168, 264))") # > lcm(168, 264) = 1848 (最大公倍数)
65
66println("logₑ(2) = $(log(2))") # > logₑ(2) = 0.6931471805599453 (自然対数)
67println("log₁₀(2) = $(log10(2))") # > log₁₀(2) = 0.3010299956639812 (常用対数)
68println("log₂(2) = $(log2(2))") # > log₂(2) = 1.0 (二進対数)
69
70println("sin(π/3) = $(sin(pi/3))") # > sin(π/3) = 0.8660254037844386
71println("cos(π/3) = $(cos(pi/3))") # > cos(π/3) = 0.5000000000000001 (64bit不動小数点の限界が見える)
72println("tan(π/3) = $(tan(pi/3))") # > tan(π/3) = 1.7320508075688767
73
74# - 3.4 行列
75mat1 = [1 2 3] # 横行列
76mat2 = [4, 5, 6] # 縦行列 [4; 5; 6]も同義
77println(mat1) # > [1 2 3]
78println(mat2) # > [4, 5, 6]
79
80mat3 = [1 2; 3 4] # 2×2行列
81println(mat3) # > [1 2; 3 4]
82println(mat3') # > [1 3; 2 4] (転置)
83println(inv(mat3)) # > [-1.9999999999999996 0.9999999999999998; 1.4999999999999998 -0.4999999999999999] (逆行列)
84 # これも64bit不動小数点の限界が見える...
85
86mat4 = [
87 5 6 7;
88 8 9 10
89]
90println("mat3⋅mat4 = $(mat3*mat4)") # > mat3⋅mat4 = [21 24 27; 47 54 61] (内積)
91
92#=
93連立一次方程式を解く
94 x + y + z = 6
95 x + 2y + 2z = 11
962x + 3y - 4z = 3
97=#
98A = [1 1 1; 1 2 2; 2 3 -4]
99b = [6; 11; 3]
100x, y, z = A\b
101println("x = $x, y = $y, z = $z") # > x = 1.0, y = 3.0, z = 2.0
このように、何もパッケージを使わずとも、標準で多様なコーディングができます。
コードを見てみると、「やっぱり数学に特化したプログラミング言語だ」ということも、伝わってきますね!
Webフレームワーク編へつづく!
今回は、Julia 入門として、環境構築と基本的な文法について紹介してみました!
Julia は、Python ほどメジャーではなく、サポートするプラグインも充実しているわけではありません。
ですが、「機械学習にも強い言語にしたい」と開発者の強い意志もあるので、これからが楽しみな言語でもありますね!
すでに、Julia 用の機械学習フレームワークはいくつか公開されているので、いずれは本連載で紹介できればと思います。
さて次回は、Julia 専用の Web フレームワーク Genie を使っていきますよ!
Webフレームワーク編はこちら!
こちらの記事もオススメ!
2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
2020.07.28機械学習 特集知識編人工知能・機械学習でよく使われるワード徹底まとめ!機械学習の元祖「パーセプトロン」とは?【人工知能】ニューラルネ...
ライトコードでは、エンジニアを積極採用中!
ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。
採用情報へ
「好きを仕事にするエンジニア集団」の(株)ライトコードです! ライトコードは、福岡、東京、大阪、名古屋の4拠点で事業展開するIT企業です。 現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。 いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。 システム開発依頼・お見積もり大歓迎! また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」を積極採用中です! インターンや新卒採用も行っております。 以下よりご応募をお待ちしております! https://rightcode.co.jp/recruit