2024年12月11日
AI/BI部のiです。今回は、Julia言語の基本的な書き方を紹介していきます。
ループや関数などのひとまとまりは「ブロック」と呼ばれていて、for — endや function — end で囲います。例えばfor文を使いたい場合は、
for i in 1:N
@show i
end
といった形で書き込むと、1から10まで書き出すことができます。これを関数化することもできて
function loop(N)
for i in 1:N
@show i
end
end
とすることもできます。
この「関数化」はJulia言語において非常に重要になっていきます。
Julia言語もデータ型に関してうまく描かれています。Julia言語の型は type関数で確認することができて、
@show type(1) type(1.0) type("aaa")
# typeof(1) = Int64
# typeof(1.0) = Float64
# typeof("aaa") = String
などとすれば型を調べることができます。
int型の中にint8やint32があるように、型の包含関係も調べることができます。
@show Int8 <: Integer
はtrueですが
@show Int8 <: String
はFalse
と表示されます。
変数を定義する際も型を定義することができて
x::Int = 1
などとすれば型を明示した状態でコーディングを進めることができます
関数に関しても型を明示して利用することができ、例えば function (a::Int, b::Int) return a + b end とすれば型を明示した関数を作ることができます。
Julia言語でも配列を利用することができます。Julia言語における配列は他の言語と書き方が多少異なるので注意が必要です。ベクトルを定義するには
a = [1, 2, 3]
とすると、
3-element Vector{Int64}: 1 2 3
と表示されて縦ベクトルが定義されているのがわかります。実際に
@show size(a)
とすれば
(3,)
と表示されて縦ベクトルであることがわかります。次に
b = [1 2 3]
と入力すれば、
1×3 Matrix{Int64}: 1 2 3
と表示されるため、これは1×3の行列であることがわかります。 実際に、a + b と計算すると、次元が一致していないという内容のエラーが出ます
Julia言語では、配列の要素は1からはじまるため a[3] といった形で配列の各要素にアクセスすることができます。
Julia言語では、ベクトルの各要素に対して関数を定義したいという要望にも対応ができます。例えば、指数関数であるexp()関数をベクトルの各要素に定義させたい場合は
a = [1 , 2, 3]
とした後に
b = exp.(a)
とすれば、b = [e^1, e^2, e^3] といった形で関数を適応することができます。
a.^3 といったような形も使えるため、Pythonライクな書き方に慣れている人でも割と容易に移行ができます。
Julia言語でも外部パッケージを利用することができます。私が個人的にお世話になったパッケージをいくつか紹介します。 Julia言語のパッケージはREPL画面で ] キーを押すか using Pkg とすることで管理できます Pkg.add(“{インストールしたいパッケージ名}”) とすることでパッケージをインストールできます。今回はいくつかのパッケージを紹介します。
Jupyter NotebookでJulia言語を使うためのパッケージです。VSCodeでもjupyterとJulia言語の拡張機能をインストールすれば簡単に使えます。
Julia言語でDataframeを扱うためのパッケージです。CSV.jl等のパッケージと組み合わせることで便利に表形式のデータを処理することができます。
Julia言語でwebアプリケーションを作れるフレームワークです。バックエンドフレームワークとしてのみ使うことをもできます。
今回はJulia言語における基本的な文法を紹介しました。次回はこれらを利用してJulia言語で高速かつ型安定な実装を行う方法を紹介します。