Octave
先日 Coursera の Andrew Ng 先生のMachine Learning を受講し終えたのですが,そのプログラミング課題で使用したOctaveのコマンドをまとめたいと思います.
これからMachine Learningのプログラミング課題を受けるという方にはちょっと便利な記事かもしれない?
Andrew先生曰く Octaveはアルゴリズムを素早く組み立てることができるので,
実際にアルゴリズムを構築する際には Octaveで試作してから python等で実装すると良いとのこと.
本記事はおおよそWeek2の『Octave/Matlab Tutorial』のまとめです.
OctaveはMatlabとの互換性維持に重点を置いているみたいなので, Matlabとほぼ同じです.
一部具体例を踏まえ, 初歩の内容をまとめていきます.
注意点
・Octaveでは基本 (行,列)で書きます.
・一次元配列をベクトル, 二次元配列を行列と呼びます.
・基本的に小文字はベクトル,大文字は行列です.
演算子・論理演算子
| 演算子 | 入力コマンド | 出力 | 注釈 |
|---|---|---|---|
| + | 5 + 6 | 11 | |
| - | 5 - 6 | -1 | |
| * | 5 * 6 | 30 | |
| ÷ | 5 / 6 | 0.83333 | |
| 累乗 | 2 ^ 3 | 8 | |
| 等式 | 2 == 3 | 0 | True:1 , False:0 |
| 非等式 | 2 ~= 3 | 1 | True:1 , False:0 |
| 不等号 | 2 >= 3 | 0 | True:1 , False:0 |
| 論理演算子 | 入力コマンド | 出力 | 注釈 |
|---|---|---|---|
| and | 1 && 0 | 0 | True:1 , False:0 |
| or | 1 ┃┃ 0 | 0 | True:1 , False:0 |
| xor | xor(1,0) | 1 | True:1 , False:0 |
ベクトル・行列
※ 以下において vはベクトル,A,Bは行列とする.
作成
| 入力コマンド | 出力 | 注釈 |
|---|---|---|
| v = [1 2 3] | 1×3 行ベクトル | |
| v = [1,2,3] | 3×1 列ベクトル | |
| v = 1 : 0.1 : 2 | [1 1.1 1.2 ... 1.9 2] | (最初の数値):(刻む数値):(最後の数値) |
| v = 1:6 | [1 2 ... 6] | |
| ones(2,3) | 2×3行列(値がすべて1) | |
| 3*ones(2,3) | 2×3行列(値がすべて3) | |
| zeros(2,3) | 2×3行列(値がすべて0) | |
| rand(2,3) | 2×3行列(値がランダム) | ランダム値は0~1の範囲 |
| randn(2,3) | 2×3行列(値がランダム) | ランダム値はガウス分布から抽出されたもの |
| magic(3) | 3×3行列(縦, 横, 斜めの和が同値) | |
| w = (平均値)+sqrt((分散))*(randn(1,10000)) | 平均,分散を指定してガウス分布作成 | |
| hist(w) | ヒストグラム作成 | |
| hist(w,50) | 50ビンのヒストグラム作成 | |
| eye(3) | 3×3の単位行列 | 単位行列:左上から右下にかけて1, それ以外0の行列 |
確認・操作
| 入力コマンド | 結果 | 注釈 |
|---|---|---|
| size(A) | Aの行×列を返す | |
| size(A,1) | Aの行の次元サイズを返す | |
| size(A) | Aの列の次元サイズを返す | |
| length(v) | vの次元を返す | |
| length(A) | Aの長い方への次元を返す | A = 2×3行列 なら, length(A) = 3 |
| A(3,2) | 3行2列目の値参照 | |
| A(3,:) | 3行目すべて参照 | |
| A([1 3],:) | 1行目2行目すべて参照 | |
| A(:,2) = [1;2;3] | 2列目を置き換え | |
| [A,[1;2;3]] | 列を追加 | |
| A(:) | ベクトルになおす | |
| [A B] | A, B行列を列方向に連結 | |
| [A;B] | A, B行列を行方向に連結 | |
| A' | 転置 | 2×4 → 4×2行列に |
| flipud(A) | 垂直に反転 | |
| pinv(A) | Aの逆行列 |
行列の演算
要素同士の演算に . (ピリオド) がよく使われますが, 足し算の時には不要だったりするので自分で確かめるのが良いみたいです.
| 入力コマンド | 結果 | 注釈 |
|---|---|---|
| A*B | 行列の積 | |
| A.*B | 要素同士の掛け算 | |
| A.^2 | 各要素を2乗 | |
| A+1 | 各要素に+1 | |
| 1./A | 各要素の逆数 | |
| log(A) | 各要素の対数を取る | |
| exp(A) | 各要素のeを底としたときのべき乗 | |
| abs(A) | 各要素の絶対値 | |
| floor(A) | 各要素を整数に切り捨て | |
| ceil(A) | 各要素を整数に四捨五入 | |
| A > 3 | 各要素が3より大きいか否か | True:1 , False:0 |
| [r,c] = find(A > 3) | 値が3より大きいインデックスを返す | r : 行,c : 列 |
| sum(A,1) | 行方向の要素合計 | Aが2×3 → 1×3 ベクトル出力 |
| sum(A,2) | 列方向の要素合計 | Aが2×3 → 2×1 ベクトル出力 |
| sum(sum(A)) | 全要素合計 | |
| prod(A,1) | 行方向の要素積 | |
| prod(A,2) | 列方向の要素積 | |
| max(A,B) | A,Bの各要素同士の大きい方を出力 | A,B行列に同等の次元の行列出力 |
| max(A,[],1) | 列の最大値 | Aが2×3 → 1×3 ベクトル出力 |
| max(A,[],2) | 行の最大値 | Aが2×3 → 2×1 ベクトル出力 |
| max(max(A)) | 全要素の最大値 | max(A(:))と同等 |
便利系
| 入力コマンド | 結果 |
|---|---|
| PS1(' >> ') | コマンドプロンプト上の 『>>』の部分を変更 |
| 末尾に; | 処理結果が表示されない |
| disp(a) | aを表示 |
| disp(sprintf('2decimals : %0.2f', a)) | aを少数2桁にして%0.2fに代入した文字列を表示 |
| format long | デフォルトでより多くの桁数で表示 |
| format short | デフォルトでより少ない桁数で表示 |
| help (コマンド名) | コマンド名の詳細表示 |
| pwd | カレントディレクトリのパス取得 |
以上
今回はとりあえずここまでです.
次回はデータのプロット(グラフ作成), ループ, if文, 関数についてまとめようと思います.