juliaの始め方

インストール

Windows

winget install Julialang.Julia -i

途中Pathに追加にチェックつける。 ターミナル開いてjuliaでREPL起動。

scoopとかでもいい気はするけど試したことない。

Ubuntu

古めなことが多いのでjulialang.orgから直接落としたりlinuxbrew使うのがいいかもしれない。

Mac

brewでいいのでは

Arch、他

わかると思うので割愛。

遊ぶ

julia> 1 + 1

とかで結果が返ってくる。

julia> \alpha[tab]

のようにLaTeXのキーワードのあとにtabを押すとそのUnicode文字に変換してくれる。

julia> \:white_check_mark:
julia> \^1

のように絵文字や上付き・下付き文字も使える。

モードがいくつかあって、主なものは

  • ?でヘルプモード。
    • 関数や型のドキュメントを参照できる。
      • 具体的にはソースコードのdocstring1が見れる。
      • docstringは何にでもつけられるので存在すれば色々見れる。
    • 困ったときにはこれを使おう。
  • ]でPkgモード。
    • 標準ライブラリのPkg.jlが使えるようになる。
    • ?を打てば使える関数一覧表示。
    • よく使うやつ
      • add:追加
      • update:更新
      • status:確認
      • activate hoge:環境セットアップ(Manifest.tomlに記録される)
      • test:パッケージのテスト
  • ;でShellモード。
    • cdとかで移動したり、lsしたり。
    • Windowsではcmdでもpowershellでもないが、cmdやpowershellを実行することはできる。
  • C-rで履歴のインクリメンタルサーチ。

生き方

だいたいPythonとかCとかと似た書き方。 コメントは#。 配列は[1, 2, 3, ]。 型は勝手につく。 (Matlabみたいに)func.(Vector)でブロードキャスト(要素1個ずつ適用)できる(非常に便利)。 func!()は破壊的なやつ(引数の変数が上書きされる)。 @から始まるのはマクロ2。 難しいのでわかってない。

あとはQiitaとかの記事を見るといいと思うよ3

生き方+

チョットワカル向け。 飛ばして構わない。

パイプ演算子|>がある。 もちろんブロードキャストできる.|>。 リスト内包表記使える。 関数合成f \circ gできる。

型は木構造をなしていて、全てAny型のsubtype。 supertype(type)で親の型を、subtypes(type)で子の型が得られる。 型の包含の演算子は<:

parametric typeという引数を持った型がある。 Array{T, N}のように配列も次元や中の型のパラメータを持つ。 他にTuple{T, S}など。 パラメータに関してはwhereで包含を扱う。

配列は1次元と2次元に関しては、Vector{T}Matrix{T}というaliasがある。

julia> Array{T, N}(init_num, size::Tuple)

で初期化できたり。 標準ライブラリのLinearAlgebraSparseArraysでは行列の性質を反映した型が大量に出てくるので公式ドキュメントを見よう!

よく使う4パッケージのインストール

]add CSV, DataFrames, Plots, OhMyREPL, PackageCompiler, GLM, Unitful, PhysicalConstants, Measurements

TeXが入ってるなら

]add Latexify, LaTeXStrings, UnitfulLatexify

Makie5を使いたいなら

]add Makie, GLMakie, WGLMakie, CairoMakie

よく使う4やつの使い方

OhMyREPL

using OhMyREPL

すると色がつく(初回起動重めなのでPackageCompilerによる事前コンパイル推奨)。 fzfが入ってるとC-rで使ってくれるのでfzfも入れてるとok(winget install fzf)。

Plots

多重ディスパッチでいい感じにプロットしてくれる。 plot()で大体完結する。 plot!()すると上書き。 第一引数にplt = plot(...)を指定すればそのオブジェクトに上書きしてくれる。 Recipeというのを使ってどんなプロットをするか判断してる。 主なrecipeは

plot(func) # 関数プロット
plot(array_x, array_y) # 配列プロット

など。

DataFrames, CSV

tidyにデータを扱おう! Matrixと同じようなアクセスや、.を使ったcolumnの選択ができる。 colnames::Symbol型。

Unitful

次元と単位込で数値を扱う。 物理的に意味のある計算のみが許される。 基本、u"m"のようにu"..."で単位を解釈してくれる。 1 * u"m"とすれば1 mになるし、1 * u"m" |> u"mm"とすれば、convertしてくれる。 最終手段ustripPlots.jlに対して、軸ラベルに(単位)を後ろにくっつけるrecipeが付属してる。

Measurements

誤差を扱ってくれる。 線形誤差伝播で誤差伝播してくれたり、UUIDで変数が独立しているかや依存する変数を管理してる。 Plots.jlに対して、エラーバーを付与するrecipeを提供している。

Latexify

julia> latexify("x / y")
L"$\frac{x}{y}$"

のようにjuliaの式をLaTeX形式に変換してくれる。 Plots.jlのプロットに入れることもできる。

最後に

公式ドキュメントを読もう! Documenter.jlによる統一的なドキュメントが整備されててドキュメント漁りは楽。


  1. Markdown ↩︎

  2. @benchとか@.とか@latexifyとか@sprintfとか。u"m"とかL"x"とかも@u_strとか@L_strというマクロらしい。 ↩︎

  3. 自分がそうだったので。 ↩︎

  4. 実験データの処理的に ↩︎ ↩︎

  5. https://docs.makie.org/v0.18.2/ ↩︎