Week 3: Julia言語入門1
今日やること
アイスブレイク
教員が自己紹介した後、受講生の方々に自己紹介をしていただきます。以下は成績などに一切考慮しないので、自由に意見を述べてください。
苗字の五十音順に自己紹介をしてください。
まず一人で発言内容を考えてください(1分)
自己紹介を行ってください。名前、科類、第二外国語、出身地域、出身高校、趣味、入ろうとしているサークル、などなど、言える範囲で大丈夫です。
【授業】苗字の五十音順に、3人ずつのチームに分けます。以下を議論し、その後発表してください。
まず一人で発言内容を考えてください(1分)
チームに分かれて議論します(5分)
数週間東大の授業を受けてみた感想はどうでしょうか。簡単?難しい?
これからさらに学びたいことはありますか?
チームで発表してください。
【情報】次に、名前の五十音順に、3人ずつのチームに分けます。以下を議論し、その後発表してください。
まず一人で発言内容を考えてください(1分)
チームに分かれて議論(5分)
今もってきているパソコンはWindows?マック?その他?
プログラミングの経験はある?ない?(高校のころの部活や、趣味など?)何か作ったことがあるといった場合は是非紹介してください。
情報系に関して気になっているキーワードはありますか?(AIとか?)
チームで発表してください。
【生活】次に、名前の最後の文字の五十音順に、3人ずつのチームに分けます。その後発表してください。
まず一人で発言内容を考えてください(1分)
チームに分かれて議論(5分)
日々の生活で困っていることや、共有したいTipsはありますか?
チームで発表してください。
連絡用のGoogle Spacesへの招待
教員と学生みなさんの連絡用にGoogle Spacesを用います。Spaceへの招待は既に行ってあります。
g.eccに関してGmailを開き、左側の「Chat」というところを押すとアクセスできます。「2025初年次ゼミJuliaで学ぶ最適化と機械学習」というSpaceがあるはずです。
そこでは教員+受講生が全員参加しています。気軽にやり取りを行ってください。どんな小さなことでも自由に書き込んでもらってOKです。今後連絡はこのSpaceを使って行います。
Google Colaboratoryの設定
さて、ここから初期設定を始めます。先ほどの「名前の最後の音で五十音」のチームに分かれ、以下の設定を行ってください。わからなければチームの人に相談してみましょう。それでもわからなければ教員に聞いてみてください。
この講義では、Google Colaboratory上でプログラミングを実行します。Colaboratoryとは、ブラウザ上でプログラミングを実行できる仕組みです。東京大学アカウントを持っているものは誰でも使用できます。
Colaboratoryの使い方については東京大学数理・情報教育センターによる「Pythonプログラミング入門」の「Colaboratory (Colab) の使い方」を参考にしてください。このサイトはPython言語のためのものですが、Colaboratoryの使い方の部分は共通です。
ブラウザにGoogleアカウント(東大公式のECCSを推奨しますが、個人用でもいいです)でログインした後に、以下を開いてください。これがColaboratoryのトップページです。
ここで、「Notebookを新規作成」として進めます。
Notebookの使い方
さて、それではこれからプログラミングを行う仕組みを解説します。普通、プログラミングとはmain.jlのようなテキストファイル(メモ帳で作った単なる文字データ)を書き、それをコマンドで実行(julia main.jl)することが基本です。しかし、今回皆さんには、最近流行している「Notebook」という仕組みを使ってもらいます。これは、上記の「ファイルを書く」「実行する」という二段階の処理を合体し、かつそれをブラウザ上で実行可能にすることで、プログラミング作業をよりインタラクティブに実行できるものです。皆さんは2年生や3年生になるとc言語やpython言語を習い通常のプログラミングを勉強することになります。ここでは、その前段階として、Notebookを使ったプログラミングを体験しましょう。
さて、あらためてColaboratoryの画面に注目しましょう。初期状態ではPython言語用になっているので、これをJulia言語楊にします。上の「ランタイム」から「ランタイムのタイプを変更」を押し、「ランタイムのタイプ」を「Julia」にして保存しましょう。これで準備完了です。

これでNotebookを編集できます。ちなみに、Colaboratoryは今どのファイルを編集しているかとか、今開いているファイルはどこに保存されているかが分かり辛いのですが、初期状態ではGoogleドライブのマイドライブ直下の「Colab Notebooks」というフォルダに保存されます。
さて、それでは早速何かを書いてみましょう。右側に四角い領域があると思います。これが「セル」です。ためしにセルの中に
a = 3
と書いてみましょう。ここでは半角英数字を使ってください。このように記載された文章をコードと呼びます。コンピュータは、このようにして記載された文章を実行します。セルの中には自由にコードを書けます。そしてこのセルを実行してみましょう。左側の「▶」をを押してもいいですし、Ctrlキーを押しながらEnterキーを押してもいいです。あるいは、Shiftキーを押しながらEnterでも大丈夫です。すると次のようになります。

ここでは、セルの直後に、そのセルの実行結果が表示されます。これが、セルの実行です。
さて、セルを追加してみましょう。画面中央上部にある「+コード」を押すと、セルが追加されます。今度はそこに
3 + 5
と書き、実行してみましょう。次のようになります。

無事足し算が実行できました。このように、セルは自由に追加できます。最初のセルの左側には通し番号が見えており、それは[1]となっていることがわかります。
また、セルをの右側のゴミ箱アイコンを押すと、セルを削除することができます。
セルの実行は、何度でも可能です。セルをクリックし、Ctrl(またはShift)+Enterで可能です。Shiftの場合は、自動的に次のセルを作ります。セルが増えるにつれ、左側の通し番号の[x]がどんどん増えていきます。
また、Notebookはしばしば挙動がおかしくなったり、結果が出ずに固まったりします。 その場合、上部の「ランタイム」から「セッションを再起動する」を押してください。するとNotebookが再起動され、再び実行することが可能になります。 ここで、通し番号がリセットされて[1]に戻ることがわかります。 通し番号が振られているうちは、変数などの状態が記憶されているのですが、リセットされるとそれらが消えます。
また、Notebookは実際はファイルなので、Ctrl+sを押すことで保存が可能です。
以上をまとめますと、
セルを追加したり、セルの中身を編集したりする
好きなセルを実行する
結果もその場に表示される
というようにして、インタラクティブにプログラミング作業を進めるのが、Notebookです。
Julia言語入門1
さて、それでは基本的な文法を勉強しましょう。来週のWeek4は少し多めにやりますが、その後は毎週少しずつJulia言語について勉強していきます。 今週はとても基本的なことを学びましょう。
先程、以下のような処理を実行しました。
a = 3
ここで、aのようにアルファベットで書かれたものを変数と呼びます。これは、数学の変数に似ている概念です。しばしば「箱」に例えられます。この変数(箱)の中に、値を代入することが出来ます。 変数としてはacbでもhogeでもfuga123でも、なんでも大丈夫です。123abcのように数字から始まるものは許されません。 さて、ここで= 3の部分を見てみましょう。Juliaを始め多くのプログラミング言語では、=は「右辺の値を左辺に代入する」という意味になります。イメージとしては
という感じです。これは、数学の=とは違う意味になります。数学の=はお互いが常に等しいということですが、プログラミングの=は右辺の値を左辺に入れているだけです。試しに、次のように書いてみましょう。
a = 3
a = 5
ちなみに、セルの内部では上記のように改行できます。このセルを実行すると、aの中身が3から5に変わります。これは、最初にaに3を代入した後、aに5を代入したためです。このように、変数は値を上書きすることができます。
ちなみに、ここではNotebookが気を利かせて、セルを実行した際に最後の行を表示してくれるので、画面に「5」と表示されると思います。自分で明示的に表示することもできます。例えば以下のようにしてみましょう。
a = 3
b = 10
println(a)
ここで、println(a)は、「aの中身を表示しろ」という関数です。こうすると、「3」が表示されることがわかります。 上記のように、変数はいくつでも作ることができます。また、あるセルで作り、実行した変数は、他のセルからもアクセスできます。
さて、Juliaは言語レベルでベクトル・行列をサポートしています。例えば次のようにしてみましょう。
x = [1 2 3]
この結果は以下のようになります。
1×3 Matrix{Int64}:
1 2 3
すなわち、この書き方で1x3の横ベクトルを作ることができました。
同様に、以下のようにして縦ベクトルも作れます。
y = [4;
5;
6]
縦ベクトルを作るには、セミコロンを使います。この結果は以下になります。
3-element Vector{Int64}:
4
5
6
無事、縦ベクトルが出来ました。また、セミコロンのあとの空白は無くてもいいため、上記は単純に次のように書いてもいいです。
y = [4; 5; 6]
さて、次に行列です。上記2つの記載方式を組み合わせて、行列を作れます。
A = [7 8 9;
10 11 12]
この結果は以下になります。
2×3 Matrix{Int64}:
7 8 9
10 11 12
また、ここからわかるように、変数名には大文字を使ってもいいです。
要素は小数でも大丈夫です。
B = [1.0 2.0 3.0;
4.0 5.0 6.0]
この結果は以下になります。
2×3 Matrix{Float64}:
1.0 2.0 3.0
4.0 5.0 6.0
ここでは、Int64となっていたものがFloat64になっていることがわかります。これは、数字を表す表現形式が、「64ビットを用いた整数表現」か、「64ビットを用いた小数表現」かを表しています。これらは変数の型と呼ばれます。多くの言語では変数の型を意識することは極めて重要ですが、Juliaはとりあえず気にしなくてもよしなにやってくれるという特徴があります。
さて、行列の足し算・引き算をやってみましょう。あるセルで以下を実行し、2x2の行列を作ってください。
A = [1 2; 3 4] # セミコロン後の改行を省略。これは2x2の行列
上記のように、「#」以降にはコメントといって、コードを実行する際には無視される、説明文章を付けることが出来ます。
さて、次に別のセルで以下を実行してください。
B = [5 6; 7 8]
ここで、さらに別のセルで以下を実行してみてください。
A + B
以下のような結果になるはずです。
2×2 Matrix{Int64}:
6 8
10 12
無事、行列の足し算が行われていることがわかります。
また、a = 3で見たように、結果を別の変数に代入することもできます。例えばベクトルの足し算を以下のようにしてみましょう。
x = [1; 2; 3]
y = x + [6; 7; 8]
ここでは、
3-element Vector{Int64}:
7
9
11
となります。
やってみよう:
小数の色々なサイズの行列を作り、足したり引いたりしてみましょう。手計算結果と比較してみてください。
行列のサイズが合わないときは、どうなりますか?
行列の掛け算もやってみましょう。
A * Bの表記でOKです。これは行列積になります。