Machine Learning Week 2 - Octave Tutorial - 基本操作
Lesson2からOctaveを使った課題提出がでてきます。このOctave Tutorialをやることで、これまでの数式を実際にソースコードに落とす方法がわかり、数式の意味が一気に理解できるようになりました。
やっぱりソースコード弄りながら実際にグラフを表示するってのは一気に理解度があがりますね。
という事で課題をやる上で覚える必要のあるOctaveの操作メモ
代入系
代入の基本
a=3
とかの代入式は他の言語と同じなので問題無いのですが、入れる変数が指定されてない場合に、自動的にans
変数に入るのは驚いた.
# aという変数に3という値を入れる ❯❯ a = 3 a = 3 # 代入が無くそのまま値を書くと、ansという変数に格納される ❯❯ 5 ans = 5
2次元配列
# 2次元配列の宣言 ❯❯ a = [1 2; 3 4; 5 6] # 配列の大きさはsizeでわかる(この場合2次元なので2つ値がかえってくる ❯❯ size(A) # 行数だけ数える ❯❯ size(A,1) # :でその行or列全部指定できる ❯❯ A(2,:) # 最初の要素の1 and 3行目の、データ全部という指定もできる ❯❯ A([1 3], :) # 連結もできる ❯❯ A(:) ❯❯ A = [1 2; 3 4; 5 6]; ❯❯ B = [11 12; 13 14; 15 16]; # 横に連結 3 * 4になる ❯❯ C = [A B] # 縦に連結 6 * 2になる ❯❯ C = [A; B] # 行列の掛け算 ❯❯ A * B # 要素毎に掛け合わせる # .(ピリオド)は要素単位で操作するときに使う ❯❯ A .* B # Aの要素をそれぞれ2乗する ❯❯ A .^ 2 ❯❯ v = [1;2;3] # 逆行列 ❯❯ 1 ./ v # 転置行列 ❯❯ v'
連続値代入
繰り返しにこの書き方ができるのは楽で良いね。
# vに1から6を入れる ❯❯ v = 1:6 # vに0.1きざみで1から2まで入れる ❯❯ v = 1:0.1:2 # 2次元配列の0or1初期化用にzerosとonesが用意されてる ❯❯ zeros(2,3) ❯❯ ones(2,3) #もちろんこんな感じで全部の値に2をかけることも ❯❯ c = 2 * ones(2,3)
単位行列
数III+Cをやってない文系人間なので、単位行列という用語で詰まった(´ω`) 線形代数を学ぶプログラマは以下の本が良く紹介されるのですが
- 作者: 平岡和幸,堀玄
- 出版社/メーカー: オーム社
- 発売日: 2004/10/01
- メディア: 単行本
- 購入: 27人 クリック: 278回
- この商品を含むブログ (90件) を見る
とりあえず近場の図書館で見つけた下の本で、行列の仕組みについては十分理解でき、単位行列の意味も理解できた
- 作者: 中村厚,戸田晃一
- 出版社/メーカー: 技術評論社
- 発売日: 2010/08/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
# eyeコマンドで単位行列は生成できる ❯❯ eye(5) ans = Diagonal Matrix 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1
変数管理
# 定義された変数は`who`と`whos`で見れる。違いは出力の量 ❯❯ who Variables in the current scope: a ans c w ❯❯ whos Variables in the current scope: Attr Name Size Bytes Class ==== ==== ==== ===== ===== a 3x2 48 double ans 5x5 40 double c 2x3 48 double w 1x3 24 double Total is 40 elements using 160 bytes # 変数はclearで消せる ❯❯ clear a
入出力系
画面出力
変数の数値だけを出力したいときはdisp
。書式指定したい時はsprintf
(使い方はC言語と同じ模様)
❯❯ a = 3.1415; ❯❯ disp(a) 3.1415 ❯❯ disp(sprintf('2 decimals: %0.2f', a)) 2 decimals: 3.14
出力桁数制御
# defaultは後述するformat shortの状態 ❯❯ a = pi a = 3.1416 # 桁数を増やす ❯❯ format long ❯❯ a = pi a = 3.14159265358979 # 桁数short ❯❯ format short ❯❯ a = pi a = 3.1416 # 桁数は指定もできる模様 ❯❯ output_precision(8) ❯❯ a = pi a = 3.1415927
画面出力抑止
出力を抑止したい場合は「;」(セミコロン)を末尾に入れる.結果だけ欲しい時用
❯❯ a = 3; ❯❯
ファイル入出力
読み込みはload
で、吐き出しはsave
。octaveを起動した時のディレクトリのファイルを基本読み込む
# octaveを起動するフォルダのファイル構成 ❯ ls ex1 ex1.pdf featureX.dat hello.mat priceY.dat # octave起動 ❯ octave # フォルダ見るのはLinuxと同じでls ❯❯ ls ex1 ex1.pdf featureX.dat hello.mat priceY.dat # featureX.datを読み込み ❯❯ load featureX.dat # 読み込んだファイルはファイル名の変数で保存される ❯❯ featureX featureX = 2104 3 (以下略) # 保存はsaveで。テキストで保存したい場合はasciiを指定する必要有り ❯❯ save hello.mat v; ❯❯ save hello.txt v --ascii # 現在どこのフォルダに居るのか、ディレクトリの移動等はLinuxと同じコマンドでできる ❯❯ cd hogehoge ❯❯ pwd
その他
細かい関数
❯❯ a = [ 1 15 2 0.5 ] # Maxを取る ❯❯ val = max(a) # 条件にあったデータだけ取得する ❯❯ [r, c] = find(A >= 7) # 合計 ❯❯ sum(a) # 乗算(product) ❯❯ prod(a)
ランダム値の代入
❯❯ w = rand(1,3) w = 0.25161 0.52246 0.58472
魔法陣行列
縦・横・ななめの合計がそれぞれ同じな特殊な行列である魔法陣行列はmagic
で作れる
❯❯ A = magic(3) A = 8 1 6 3 5 7 4 9 2
後はグラフ処理系だけど、長くなったので次で