LoginSignup
6
7

More than 3 years have passed since last update.

Octaveコマンドまとめ1 -基本操作(主にベクトル)-

Last updated at Posted at 2019-08-30

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文, 関数についてまとめようと思います.

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7