Octave
Octave : Basic Operation
Octave : Moving Data Around
size : Find the size of any matrix :
length : Find the length of any vector (or matrix's longest side) :
可以使用 Linux 相關語法
pwd, ls, cd ...
load : 載入文件
who : 可以查看目前所有變數
whos : who + details
save : 可以將變數另存成新檔 (存放地點可用 pwd 查)
clear : 清空所有變數
矩陣操作
冒號的用途
可以修改特定行或列
可以插入特定行或列
matrix 強制轉成 vector
合併矩陣
Octave : Computing on Data
假設我們有以下三個矩陣 :
矩陣相乘
Element-wise
相乘
會將矩陣每一個對應的位子相乘
``` matlab
A .* B
prints: 11 24 39 56 75 96
Divide
``` matlab
1 ./ A
prints: 1.00000 0.50000 0.33333 0.25000 0.20000 0.16667
```
幾乎每個數學式都可以直接跟矩陣一起運作
abs
``` matlab
abs([-1;2;-3])
prints: 1 2 3
addition
``` matlab
v + 1
prints: 2 3 4
ceil
``` matlab
a = [1, 15, 2, 0.5]
ceil(a)
prints: 1 15 2 1
```
對矩陣操作
sum
``` matlab
a = [1 2; 3 4];
sum(a)
sum(a(:))
prints: 4 6 10
prod
``` matlab
a = [1 2; 3 4];
prod(a)
prod(a(:))
prints: 3 8 24
max
``` matlab
a = [1 2 3 4]
max(a) // prints: 4
[val, index] = max(a)
prints: val = 4 index = 4
find
``` matlab
find(a < 3)
prints: 1 2
矩陣運算
Transpose
``` matlab
A'
prints: 1 3 5 2 4 6
Octave : Plotting Data
以下介紹一些函數來讓 data 視覺化
假設我們有以下的 variables
plot(x, y) : 可以生成 x-y 圖表
要同時 show 出兩個圖表在同一張上
可以對圖表做一些標記
將圖表存成 png 檔於當前目錄
figure(n) : 開新視窗來展示圖表
subplot(n, m, z) : 生成一個 n*m 的大視窗,然後目前使用第 z 個 plot
imagesc(A) : 將 matrix 添加顏色展示出來
補充一點 : 在 Octave 可以在單行輸入多個 sequential 指令
或是
Octave : Control Statements (if, for, while)
For loop
while
if
Octave 可以直接抓到當前目錄下的任何 file 中的 function
我們可以透過
addpath(path)
來讓 Octave 不管在哪個 working directory 都可以抓到該目錄的 function文件名稱即為 function 的名稱
假設我有一個 file 叫作
addTwoDigits.m
,內容如下 :就可以在 Octave 呼叫該函數
現在我們就可以用以上所學來計算 cost function
定義一個 file :
costFunctionJ.m
接著定義 training data
因為會完美符合 training sets 所以 cost function 應該會是 0
假設把 theta1 也改成 0 (代表我全部的 prediction 都是 0)
那麼 cost function 應該會是
Octave : Vectorization
Vectorization 的計算方式將會比 Unvectorization $a$ 還要快速
Vectorization 在底層是由一些的專家所設計,速度快
所以在實作時,盡量把問題轉換為 vectorization 來解決
在 C++, Java, Python 這類開發工具也應該要這麼解決
計算速度更快、code 行數減少
以計算 Cost function 為例
若使用 unvectorization 的方法來計算 :
而使用 vectorization 來計算 :
以計算 Gradient Descent 為例
原公式如下 (n = 2) :
要把他計算成 vectorization 的話,大致上要把公式弄成這樣 :
其中
Last updated