【机器学习】Octave矩阵,向量的表示与基本操作

版权声明:本文为博主原创文章,未经博主允许不得转载。 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.

猜你喜欢

转载自blog.csdn.net/u011240016/article/details/85409972
今日推荐