Week 9: グループワーク2(2回目)
今日やること
はじめに
最初に少し講義をします。
その後、チームに分かれて作業を行います。
ドット構文
juliaでは、「ある一つの要素を引数にとった処理」に対し、ドットをつけることでそれを「ベクトルに対する処理」に拡張できます。
例をみてみましょう。sin
は引数1つをとってそのsin
を返します。
sin(1.5)
これに対し、当然値が返ってきます。
0.99749
では、sin
にベクトルをいれるとどうなるでしょうか?
sin([1, 2, 3])
これはエラーになります。sin
の引数は単一の数字が来ることが仮定されているからです。
ここで、sin
関数にドットをつけてsin.
としてみましょう。すると、これは「引数がベクトルの場合、そのそれぞれの要素にsin
を適用する。出力は入力と同じサイズのベクトル」という意味になります。やってみましょう。
sin.([1, 2, 3])
3-element Vector{Float64}:
0.8414709848078965
0.9092974268256817
0.1411200080598672
ここでは引数のベクトルのそれぞれにsin
を適用したものが返されました。
ドット演算は行列に対しても同様の処理となります。
sin.([1 2 3; 4 5 6])
2×3 Matrix{Float64}:
0.841471 0.909297 0.14112
-0.756802 -0.958924 -0.279415
また、別の例として、掛け算を表す*
にドットをつけて.*
とすることで、*
は行列積ではなく要素積(アダマール積)となります。以下を考えましょう。
a = [1, 2, 3]
b = [4, 5, 6]
a * b
上記では、3次元のベクトルa
, b
を作っています。これに対し行列積を表す*
を適用しても、エラーになります(3x1
の行列を3x1
の行列の間には行列積が定義できないので)
ここで、ドットを付けると、次のように要素積の結果が得られます。
a .* b
3-element Vector{Int64}:
4
10
18
やってみよう:
上記のドット演算の法則は、自分で書いた関数に対しても成り立ちます。それを確認してみましょう。
チーム作業
先週に引き続き、チームに分かれて作業してもらいます。最適化や数値計算の内容について、Juliaで実際に計算してみてください。次回に発表してもらいます。
発表時間は「1チーム5分」を目安にしてください。
今回は必ず「スライドpdf」も作り、共有するようにしてください。
今日終わらなければ、次回までに頑張って作ってきてください。