• トップ
  • ブログ一覧
  • 【基礎編】Julia入門~高速な動的型付け言語~
  • 【基礎編】Julia入門~高速な動的型付け言語~

    メディアチームメディアチーム
    2020.10.27

    IT技術

    【基礎編】Julia入門~高速な動的型付け言語~

    「Julia」に入門してみよう!

    Julia は、Python に継ぐ高速な動的型付け言語として、MIT が開発しているプログラミング言語です。

    その歴史は浅く、2012年にオープンソース化されたばかり。

    2020年8月には、最新版「Julia 1.5」がリリースされたことも、記憶に新しいですね!

    Julia のコンセプトは、高速な処理ができることはもちろん、数理研究者向けな言語であること。

    例えば、次のようなことが、できるようになっています。

    1. 並列処理
    2. 数学的なコーディング
    3. グラフ描画

    さらには、「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のインストール

    もちろん、インストールしたアプリを直接起動しても、同じようになります。

    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プラグイン (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です。

    【GitHub:Julia プラグイン修正版】やり方

    Julia環境完成

    これで、PyCharm での Julia 環境はできました!

    プロジェクト作成に、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フレームワーク編はこちら!

    【Webフレームワーク編】Julia入門~高速な動的型付け言語~2020.11.03【Webフレームワーク編】Julia入門~高速な動的型付け言語~Webフレームワーク編~Juliaに入門してみよう~前回は、Julia の環境構築の方法や、文法などを紹介しました。今...

    こちらの記事もオススメ!

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
    featureImg2020.07.28機械学習 特集知識編人工知能・機械学習でよく使われるワード徹底まとめ!機械学習の元祖「パーセプトロン」とは?【人工知能】ニューラルネ...

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    メディアチーム
    メディアチーム
    Show more...

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background