【機器學習】Octave矩陣,向量的表示與基本操作
阿新 • • 發佈:2019-01-04
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.