皆さん、おはこんばんにちは!
夏休みをエンジョイして元気になったみやもとです。
今回の夏休みは1週間ほどあったので、この機会に機械学習のオンライン講座を見ていました。
その動画内で、数学用のインタプリタ言語を使って計算を行っており、これは機械学習の分野でよく使われているそうです。
せっかくの機会なので、触っていきたいと思います。
1.GNU octave
GNU octaveについて
GNU Octave(グヌー・オクターブ)は数値計算用の対話型インタプリタ言語です。
GNU Octaveより引用
GNU Octaveは、C/C++言語、BASIC、FORTRANによく似た基本文法を採用しており、いずれか1つのプログラム言語の文法を知っていれば、簡単にプログラムを書き始めることができます。
また、y=x2のグラフを、以下のわずか3行で表示することが出来る、易しい言語ですので、初心者や学生にも扱うことができます。
GNU octaveを使用
ベクトルと行列の計算はこんな感じです。
b = [4; 9; 2] # Column vector
A = [ 3 4 5;
1 3 1;
3 5 9 ]
x = A \ b # Solve the system Ax = b
GNU Octaveは対話型のインタプリタ言語になっており、上記のコマンドを入力するたびに変数がどのように入っているかを表示してくれます。
>> b = [4; 9; 2] # Column vector
b =
4
9
2
>> A = [ 3 4 5;
1 3 1;
3 5 9 ]
A =
3 4 5
1 3 1
3 5 9
>> x = A \ b # Solve the system Ax = b
x =
-1.5000
4.0000
-1.5000
GNU Octaveでもこのように図として表示することもできます。
>> x = -10:0.1:10; # Create an evenly-spaced vector from -10..10
>> y = sin (x); # y is also a vector
>> plot (x, y);
>> title ("Simple 2-D Plot");
>> xlabel ("x");
>> ylabel ("sin (x)");
GNU Octaveでも関数を定義して計算を行うことができます。
下記の計算は微分積分を図として表示させています。
>> function x_dot = f (x, t)
r = 0.15;
k = 1.6;
a = 1.25;
b = 0.12;
c = 0.89;
d = 0.58;
x_dot(1) = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1));
x_dot(2) = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2);
endfunction
>> x = lsode ("f", [1; 2], (t = linspace (0, 50, 200)'));
>> plot (t, x)
2.まとめ
Pythonでも対話モードで同じようなことが可能なので、何が違うのか確かめてみました。Pythonではベクトルを扱うときは下記のように入力します。
>> import numpy as np
>> x = np.array([5, 6, 3])
>> x
array([5, 6, 3])
GNU Octaveではこのように書くだけでベクトルを使った計算ができるようになるので、計算を行う際は結構便利だと思いました。
それにベクトル内が表示されるため、どのように入っているか確認もできるのは便利でした。
>> b = [5; 6; 3]
b =
5
6
3
コメント