1. 程式人生 > >【機器學習】Octave矩陣,向量的表示與基本操作

【機器學習】Octave矩陣,向量的表示與基本操作

CS229中需要用到Octave來做,張量的儲存是必備的知識點,記錄一下備用:

% The ; denotes we are going back to a new row.
A = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12]

% Initialize a vector 
v = [1;2;3] 

% Get the dimension of the matrix A where m = rows and n = columns
[m,n] = size(A)

% You could also store it this way
dim_A =
size(A) % Get the dimension of the vector v dim_v = size(v) % Now let's index into the 2nd row 3rd column of matrix A A_23 = A(2,3)

矩陣加/減/乘/除法

% Initialize matrix A and B 
A = [1, 2, 4; 5, 3, 2]
B = [1, 3, 4; 1, 1, 1]

% Initialize constant s 
s = 2

% See how element-wise addition works
add_AB =
A + B % See how element-wise subtraction works sub_AB = A - B % See how scalar multiplication works mult_As = A * s % Divide A by s div_As = A / s % What happens if we have a Matrix + scalar? add_As = A + s

舉個例子

在這裡插入圖片描述

程式碼:

house_sizes = [1,2104; 1,1416; 1,1534; 1, 852]
W = [-40; 0.25]
res = house_sizes *
W % 輸出 res = 486.00 314.00 343.50 173.00

矩陣乘以矩陣

% 矩陣乘以矩陣
A = [1,3,2; 4,0,1]
B = [1,3; 0,1; 5,2]
C = A * B

% 輸出
C =
   11   10
    9   14

再看一個具體的例子
我們需要經常想想的是:矩陣乘以向量,得出的還是向量,但維度變成矩陣的行數。

因此,在矩陣乘矩陣的場景下,右邊的矩陣可以視作多個列向量的組合,所以得出的結果,也是多個列向量,且列向量的個數與右邊矩陣的列向量個數一樣,但是向量的維度則是左邊矩陣的行數。

在這裡插入圖片描述

這個截圖案例裡,是把多個假設同時放在右邊矩陣中,每個列向量是一個假設,得出的結果裡,每個列向量是一個對應值。

% 矩陣乘矩陣案例
house_sizes = [1,2104; 1,1416; 1,1534; 1, 852]
hypotheses = [-40, 200, -150; 0.25, 0.1, 0.4]

res = house_sizes * hypotheses

% 輸出
res =

   486.00   410.40   691.60
   314.00   341.60   416.40
   343.50   353.40   463.60
   173.00   285.20   190.80

用這些案例,可以從中體會到向量化的重要性,基於向量化,我們可以避免資料處理時的迴圈,從而加快執行效率。

單位矩陣

% 單位矩陣
I_2 = eye(2)
I_7 = eye(7)

% 輸出
% I_2
   1   0
   0   1
   
% I_7
   1   0   0   0   0   0   0
   0   1   0   0   0   0   0
   0   0   1   0   0   0   0
   0   0   0   1   0   0   0
   0   0   0   0   1   0   0
   0   0   0   0   0   1   0
   0   0   0   0   0   0   1

注意,矩陣的Octave表示,一行內的資料不一定非要用逗號隔開,可以用空格。

A = [3 4; 2 16]
A = [3,4; 2,16]

兩種都是可以的。

矩陣的求逆

A = [3 4; 2 16]

% 輸出
reverse =

   0.400000  -0.100000
  -0.050000   0.075000

% 檢驗
A * reverse
% 輸出
ans =

   1.0000e+00   5.5511e-17
  -2.2204e-16   1.0000e+00

注意到,計算機裡表示的浮點數0,是很小很小的數字,但不是絕對的精準的0.

矩陣的轉置

% 矩陣轉置
A = [1 2 0; 3 5 9]
A_T = transpose(A)

% 輸出
ans =

   1   3
   2   5
   0   9

END.