俺のための Julia 入門(0)

数値計算への新たな接近

Julia
俺のためのJulia入門
Author

司馬博文

Published

9/05/2020

Modified

7/04/2024

概要
Julia はスクリプト言語とコンパイル言語の良いとこどりを目指して開発された言語である.Matlab のような数学的な記述ができ,C のような実行速度を保ち,Python のような汎用性を持ち,Shell のようなモジュール性を持つ.

1 Julia のすすめ

1.1 はじめに

Julia は Why We Created Julia の文書と共に,2/14/2012 に公開された科学計算向けの言語である.論文 (Bezanson et al., 2017) が発表されて後,2018 年にはバージョン 1.0 がリリースされた.

現在の最新は,12/26/2023 リリースの v1.10.0 である.

1.2 Quarto で始める Julia

Quarto は Jupyter を通じて,Pytho, R だけでなく Julia もサポートしている.1

Code
using Plots

plot(sin, 
    x->sin(2x), 
    0, 
    2π, 
    leg=false, 
    fill=(0,:lavender))
図 1: Parametric Plots
Julia のインストール方法

Quarto で Julia を始めるために,最も簡便なインストール方法は こちら

  1. まずは Julia をインストール

    curl -fsSL https://install.julialang.org | sh

    すると,julia コマンドで対話的セッションを開始できる.これを Julia では REPL (Read-Eval-Print Loop) と呼ぶ.

  2. 続いて,Quarto で julia ブロックを動かすには,IJulia パッケージをインストールする.次を REPL で実行する:

    using Pkg
    Pkg.add("IJulia")
    using IJulia
    notebook()

    これで,Jupyter Notebook で Julia を使うことができる.2

  3. Revise.jl も追加すると,Julia セッションを再起動するためが省ける

    using Pkg
    Pkg.add("Revise")
  4. Jupyter Cache も追加すると,ソースが変わらない限りその出力がキャッシュされ,再実行が控えられる.

    using Conda
    Conda.add("jupyter-cache")
Getting Started
Julia と IJulia のアップデート方法

juliaup を用いれば極めて簡単にできる.

juliaup update

その後,

jupyter kernelspec list

で表示されるカーネルもアップデートする必要がある.アップデートは再インストールによる:

using IJulia
installkernel("Julia")

1.3 パッケージ管理

Julia を始めるにあたって最も心強いのは,Julia 独自のパッケージマネジャー Pkg の存在である.

juliaキーワードで立ち上がる対話的実行環境 REPL(第 [@-sec-REPL] 節)において,] キーでパッケージモードに入り,add でパッケージを追加する.

(@v1.10) pkg> status  # または st

でパッケージの情報が表示される.

(@v1.10) pkg> update  # または up

でアップデートが可能である.

(@v1.10) pkg> status --outdated -m

により,アップデートがあるパッケージの一覧を得ることができる.

ものによっては,アップデートを阻害している依存関係が見れる.

(@v1.10) pkg> rm Example

1.4 プロジェクト

パッケージ管理システム Pkg が提供する環境分離システムの単位を プロジェクト という.3

generateは新たなディレクトリと,Project.tomlsrc/MyPackage.jl を作成する.

(@v1.10) pkg> generate MyProject

activate . はパスを引数に取り,そのディレクトリにある Project.toml を有効化する.

(@v1.10) pkg> activate MyProject

引数なしで activate を実行することで,デフォルトの環境に戻る.

(@v1.10) pkg> instantiate

は,working directory にプロジェクトファイル(Project.tomlManifest.toml)を作成する.

1.5 数学表記

何よりコードの見た目の特徴に,LaTeX コマンドと数学記号が使える ことがある.

law tex を打って tab を押すと処理されるのである!

α = 2  # \alpha と打って tab を押すと処理される.
β = 3
γ = α + β

println("α + β = $γ")
α + β = 5

加えて,プロットのタイトルにも使える:

Code
using Plots

plot(1:10, (1:10).^2, title="Plot of \$y = x^2\$")

これと合わせ,変数名にはUnicodeが許される.÷, ^ などの使用が直感的に行える.

÷
div (generic function with 57 methods)
x = 2^3  # 2の3乗
println("2^3 = $x")
2^3 = 8

また,変数の前に数値をつけると暗黙に乗算と解釈する.

そのほかにも関数定義など,数学的にも直感的に読める,文芸的プログラミングの精神が込められている言語である.

1.6 Shell コマンド

pwd()
cd()

などのコマンドが使える.

2 概要

2.1 クラス構造

  • 組み込み型,組み込み関数はいずれもBaseクラスに属する.

2.2 Read-Eval-Print Loop

julia コマンドで起動される

  • —project
    • —project=@. の略記.
    • 現在のディレクトリ . にある Project.toml によるプロジェクトを有効化する,
    • PERL における activate コマンドに対応する.
    • 環境変数 JULIA_PROJECT@. に変更することと等価.
  • Ctrl+Dexit()で終了
  • ans:直近の evaluated term が格納されて居る.

5つのモードがある.

  1. Juliaモード
  2. help:? で発動.backspace で戻る.使いやすい!
  3. package:] で発動.標準では GitHub のリポジトリ上の任意のモジュールがインストール可能.
  4. shell:; で発動
  5. search

3 Julia パッケージについて

3.1 Pkg

]で package mode に入る.

pkg> add <package name>  # 追加
using <filename without extension>  # 使用
help  # 使用可能なコマンドの一覧
  • st (= statusの alias)
    • 現在のプロジェクトがどの config file によるかの確認
      • デフォルトは Status ~/.julia/environments/v1.5/Project.toml
      • こういうデフォルトプロジェクトはユーザー固有になる(ホームディレクトリの下にあるから)
    • 現在インストールされている外部パッケージの状態
  • rm (= removeの alias)
    • install した package を消去する
  • up (= updateの alias)
    • 引数無しで用いると,install している全ての package の更新
  • gc (garbage collection)
    • package の追加・削除・消去を繰り返すと不要なデータが蓄積するらしい.これを自動的に削除してくれる.

3.2 パッケージの構造

Config file としては TOML 形式を採用している.可読性も高い.

  • ディクショナリ構造に明確にマッピングされるように設計されている

  • Tom’s Obvious, Minimal Language

  • TOML の構文は,大部分がキーと値の組

    1. key = "value"
    2. [テーブル名]
    3. # コメント
  • の3種類からなる.

  • Project.toml

    • 現在の Project が依存している package を管理する.
      • package としてダウンロードした directory にある Project.toml を読んで,依存パッケージもダウンロードするようになっている.
    • プロジェクト自体のメタデータや依存パッケージの一覧が収められているテーブル.
    • 開発者も書き足せる.
      • project 名など.
    • [deps] テーブルには,(package 名) = “UUID” が納められている.
      • こういうのは人間が書くものではない.UUID 複雑.これをするのが Add command の実装に他ならない.
  • Manifest.toml

    • 実際に Julia の実行時に使うべきパッケージの正確な version やインストール場所を管理するテーブル.
    • このファイルは,package maneger が Project.toml を参照しながら依存解決して生成する.

pkg 管理モードのコマンド

  • activate .
    • Project.toml を読み込んで,新たなプロジェクトを実行する.
    • Prompt 名が新たなプロジェクト名に更新される.
    • install されている package も刷新される.
      • これはうまくできているなぁ!
    • REPL じゃない時は—project=@.オプションで julia から実行する.

3.3 Package作成

Julia package に必要な要素は次のとおり.

  • README.md
  • LICENSE
  • Project.toml
  • src
    • source code
    • Package名と同じ名前の.jlファイル.
  • test
    • test code
  • docs
    • documentation
  • deps
    • パッケージの依存ライブラリやビルドスクリプトを収める
    • 継続的インテグレーションのための設定ファイル
  • Manifest.toml は開発環境に特異的で,バージョン管理ツール(GitHub)で共有しないのが一般的.

pkg 管理モードのコマンド

  • generate MyPackage
    • MyPackage ディレクトリを作り,その中に Project.toml と src/MyPackage.jl を作る.
    • Project.toml には,UUID を毎回ランダムに生成し,version や name や author が登録される.
  • こうしてつくった MyPackage はすぐに using MyPackageMyPackage.greet() で呼べる.

References

Bezanson, J., Edelman, A., Karpinski, S., and Shah, V. B. (2017). Julia: A fresh approach to numerical computing. SIAM Review, 59(1), 65–98.

Footnotes

  1. Quarto – Using Julia↩︎

  2. Jupyter Notebook をインストールしていない場合,install Jupyter via Conda, y/n? [y]: n の確認がなされる.これに y で応えると,Conda.jl パッケージを通じて,Miniconda から最小限の Jupyter 環境がインストールされ,グローバル環境は変わらない.↩︎

  3. 正確には,Project.toml(とManifest.toml)により定義される写像がプロジェクトである.↩︎