Octaveの基本的な使い方
機械学習のプロトタイプを作るのはOctaveが効率的らしい。 RやPythonなどを使う人もいるが、入門者が学習目的で学びながら作成したり、 プロトタイプを作るのにはOctaveが一番効率的、とのこと*1
基本的な演算
加減乗除冪
%はコメントです。
5+6 % 加 3-2 % 減 5*8 % 乗 1/2 % 除 2^6 % 冪
比較
1 == 2 % eq 1 ~= 2 % not eq
論理演算
1 && 0 % AND 1 || 0 % OR xor(1,0) % XOR
画面表示にまつわるTips
- コンソールの表示を変える
octave:1> PS1(">>"); >>
これで下記の例だと一行目のアプリ名が省略されシンプルになる。*2
- セミコロン(;)を文末に加えることで代入じの画面表示を抑制
>> a = 3 a = 3 >> a =3; %次の行の出力で何も表示されない >>
- フォーマット文字列
octave:2> disp(sprintf('pi is: %0.2f',pi)) pi is: 3.14 octave:3> disp(sprintf('pi is: %0.5f',pi)) pi is: 3.14159
formatコマンドで通常時の出力の形式を指定することも可能
octave:10> pi ans = 3.14159265358979 octave:11> format short octave:12> e ans = 2.7183
行列・ベクトル
列はスペース区切り、行はセミコロン(;)で分割
octave:13> [1 2; 3 4; 5 6] ans = 1 2 3 4 5 6
便利な生成方法
繰り返しによる指定
>> v = 1:0.1:2 % 開始:増分:終了 v = 1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000 1.8000 1.9000 2.0000
各要素が1または0の行列作成
もちろん列数を1とすることでベクトルも生成可能
>>ones(5,2) %ones(行数,列数) ans = 1 1 1 1 1 1 1 1 1 1 >>zeros(4,5) ans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
各要素が乱数になる生成
>>rand(3,3) ans = 0.73882 0.56016 0.60064 0.11604 0.50570 0.85379 0.39978 0.77641 0.19745 >>rand(3,3) %乱数なので毎度結果が異なる ans = 0.89295 0.34303 0.34988 0.56998 0.35830 0.72597 0.94476 0.56983 0.84483
正規分布
>>randn(3) ans = -1.432169 -0.156601 -1.509394 -0.015477 -0.704944 0.749234 -0.653065 0.098928 -0.296580
ヒストグラム
>>w = rand(1,1000); >>hist(w,100)
行列・ベクトルのサイズ
size(m) % 行数 列数の1*2の行列を返す length(v) % 行列の長さのうち長い方を返す
どちらも行列、ベクトル双方に利用可能だが、混乱の元になるので 行列にはsizeを配列にはlengthを利用するのが良い。
ワークスペースにある変数の操作
どのような変数があるか調べる
>>who Variables in the current scope: a ans v w
>>whos %型まで表示する Variables in the current scope: Attr Name Size Bytes Class ==== ==== ==== ===== ===== a 1x4 32 double ans 1x1 1 logical v 1x11 24 double w 1x1000 8000 double Total is 1016 elements using 8057 bytes
変数を消す
>>clear a % clear <消す変数(指定がなければ全部削除)> >>who Variables in the current scope: ans v w >>clear >>who >>
ファイル操作
ファイルに保存する
>>save matrix.mat m; % save <保存ファイル名> <保存する値> >>ls matrix.mat
vim で保存したが、読めないことはない。
# Created by Octave 4.2.1, Fri Jan 19 13:01:52 2018 JST <俺の個人情報> # name: m # type: matrix # rows: 3 # columns: 2 1 2 3 4 100 200
ASCIIのTEXTとして保存する
save matrix.text -ascii % acii形式で保存する
vim で開いてみた なんか有効数字的なのがついてる
1.00000000e+00 2.00000000e+00 3.00000000e+00 4.00000000e+00 1.00000000e+02 2.00000000e+02
保存したファイルを開く
load matrix.mat
で保存したデータを読み込める
>>who >>load matrix.mat >>who Variables in the current scope: m
データ操作
A = [1 2; 3 4; 5 6]
indexで行列の要素を指定する
A_32に当たる
>>A(3,2) ans = 6
>>A(2,:) % 二行目全て ans = 3 4
>>A(:,2) %2列目全て ans = 2 4 6
>>A([1 3],:) % 1、3行目全て ans = 1 2 5 6
indexで代入する
>>A(3,2) = 100 A = 1 2 3 4 5 100
>>A(:,2) = [10;11;12] %2列目に代入 A = 1 10 3 11 5 12
>>A = [A,[100;200;300]] % ベクトルを連結 A = 1 10 100 3 11 200 5 12 300
小ネタ
行列の要素を全て連結してベクトルを作る
>>A(:) ans = 1 3 5 10 11 12 100 200 300
行列の連結
A = [1 2;3 4;5 6] B = [11 12; 13 14; 15 16]
横に連結
>>C = [A B] C = 1 2 11 12 3 4 13 14 5 6 15 16
縦に連結
>>C = [A;B] C = 1 2 3 4 5 6 11 12 13 14 15 16