版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011240016/article/details/85409972
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.