【吴恩达机器学习教学视频笔记】

 

第五章 Octave教程

第一节 基本操作

本节主要讲述了octave的基本操作方法,这里将用代码注释的方法进行记录。

octave的界面和语言都与matlab相似,其界面如下图所示。

 在命令窗口可以直接输入命令,并获得结果。

下面是一些基本运算和逻辑运算命令

>> 5+6
ans = 11
>> 3-2
ans = 1
>> 5*8
ans = 40
>> 1/2
ans = 0.500000000000000
>> 2^6
ans = 64
>> 1 == 2
ans = 0
>> 1 ~=2
ans = 1
>> 1 && 0
ans = 0
>> 1||0
ans = 1
>> xor(1,0)
ans = 1
>> b = 'hi'
b = hi
>> c = (3>=1);
>> c
c = 1
>> a=pi;
>> a
a = 3.141592653589793
>> disp(a)
3.141592653589793
>> format long
>> a
a = 3.141592653589793

接着是构建矩阵的命令

>> A=[1 2;3 4;5 6]
A =

   1   2
   3   4
   5   6

>> A=[1 2;
3 4;
5 6]
A =

   1   2
   3   4
   5   6

>> V=[1 2 3]
V =

   1   2   3

>> V = [1;2;3]   %分号表示换行
V =

   1
   2
   3

>> V =1:0.1:2    %按0.1的步进值从1到2,构成一个1*11的矩阵
V =

 Columns 1 through 5:

    1.000000000000000    1.100000000000000    1.200000000000000    1.300000000000000    1.400000000000000

 Columns 6 through 10:

    1.500000000000000    1.600000000000000    1.700000000000000    1.800000000000000    1.900000000000000

 Column 11:

    2.000000000000000

>> V=1:6
V =

   1   2   3   4   5   6

>> ones(2,3)    %构建一个2行3列元素全部为1的矩阵
ans =

   1   1   1
   1   1   1

>> 2*ones(2,3)
ans =

   2   2   2
   2   2   2

>> w=zeros(1,3)
w =

   0   0   0

>> w=rand(1,3)  %构建一个随机矩阵,元素值都属于(0,1)
w =

   0.629182528699651   0.234908433675450   0.832400319321844

>> rand(3,3)
ans =

   2.324011709020529e-01   7.930071341110331e-01   2.186022910072198e-01
   2.490873393654987e-01   5.915629445652747e-01   3.664270909746951e-01
   9.010128556408735e-01   9.998934689263728e-02   6.703283820881172e-01

>> randn(1,3)   %元素按照高斯分布且标准差为1,构建一个矩阵
ans =

  -4.968970798942585e-02   7.520563907008045e-02   1.697239783577829e+00

>> I=eye(4)   %构建单位矩阵
I =

Diagonal Matrix

   1   0   0   0
   0   1   0   0
   0   0   1   0
   0   0   0   1



>> w =-6+sqrt(10)*(randn(1,10000));

接着介绍了绘图函数

>> w =-6+sqrt(10)*(randn(1,10000));
>> hist(w)

得到下图:

如果需要增加图像列数,可以执行以下命令:

>> hist(w,50)   %图像为50列

 第二节 移动数据

这一节主要介绍如何将数据加载到octave和如何将数据存入矩阵,以及对矩阵中数据的操作。

首先介绍一下如何加载数据到octave和保存数据,具体代码如下:

>> pwd   %octave location
ans = C:\Users\ZY
>> cd 'C:\Users\ZY\Desktop'  %change directory
>> load fx.dat  %将文件的数据导入,导入的数据会存放在名称为fx的矩阵中
>> load ('fx.dat') %按照字符串形式导入
>> save hello.mat A  %将矩阵A的数据存入文件hello.mat
>> save hello.txt A  -ascii  %将矩阵A的数据存入文本文档hello.txt中,

接着介绍一下如何查看现有的变量

>> who  %查看现有变量名称
Variables visible from the current scope:

A    I    V    a    ans  b    c    w

>> whos  %查看现有变量的具体信息
Variables visible from the current scope:

variables in scope: top scope

  Attr   Name        Size                     Bytes  Class
  ====   ====        ====                     =====  =====
         A           3x2                         48  double
         I           4x4                         32  double
         V           1x6                         24  double
         a           1x1                          8  double
         ans         1x11                        11  char
         b           1x2                          2  char
         c           1x1                          1  logical
         w           1x10000                  80000  double

Total is 10043 elements using 80126 bytes

>> clear w  %清除变量w
>> whos
Variables visible from the current scope:

variables in scope: top scope

  Attr   Name        Size                     Bytes  Class
  ====   ====        ====                     =====  =====
         A           3x2                         48  double
         I           4x4                         32  double
         V           1x6                         24  double
         a           1x1                          8  double
         ans         1x11                        11  char
         b           1x2                          2  char
         c           1x1                          1  logical

Total is 43 elements using 126 bytes

最后是对矩阵操作的一些代码:

>> A
A =

   1   2
   3   4
   5   6

>> size(A)  %查看矩阵大小
ans =

   3   2

>> size(A,1)  %矩阵行数
ans = 3
>> size(A,2)  %矩阵列数
ans = 2
>> V
V =

   1   2   3   4   5   6

>> length(V)  %向量长度
ans = 6

>> A
A =

   1   2
   3   4
   5   6

>> A(3,2)   %显示第三行第二列的元素
ans = 6
>> A(2,:)   %显示第二行
ans =

   3   4

>> A(:,2)  %显示第二列
ans =

   2
   4
   6

>> A(:,2)=[10;11;12]    %修改第二列
A =

    1   10
    3   11
    5   12

>> A=[A,[10;11;12]] %append another column vector to right
A =

    1   10   10
    3   11   11
    5   12   12

>> A(:) % put all elements of A into a single vector
ans =

    1
    3
    5
   10
   11
   12
   10
   11
   12
>> B=[1;2;3]
B =

   1
   2
   3

>> C=[A B]   %按列合并两个矩阵
C =

    1   10   10    1
    3   11   11    2
    5   12   12    3

>> B=[1 2 3]
B =

   1   2   3

>> C=[A;B]   %按行合并两个矩阵
C =

    1   10   10
    3   11   11
    5   12   12
    1    2    3

第三节 计算数据

本节介绍数据的操作运算,来实现算法。

>> A=[1 2;3 4;5 6]
A =

   1   2
   3   4
   5   6

>> B=[11 12;13 14;15 16]
B =

   11   12
   13   14
   15   16

>> C=[1 1;2 2]
C =

   1   1
   2   2

>> A*C   %矩阵相乘
ans =

    5    5
   11   11
   17   17

>> A.*B  %点乘,即每个对应元素相乘
ans =

   11   24
   39   56
   75   96

>> A.^2  
ans =

    1    4
    9   16
   25   36
>> V =[1;2;3]
V =

   1
   2
   3

>> 1./V    %1除以每个元素
ans =

   1.000000000000000
   0.500000000000000
   0.333333333333333
>> log(V)    %做对数运算
ans =

                   0
   0.693147180559945
   1.098612288668110

>> exp(V)    %做指数运算
ans =

   2.718281828459045e+00
   7.389056098930650e+00
   2.008553692318767e+01

>> abs([-1])   %取绝对值
ans = 1

>> V+ones(length(V),1) %每行加1
ans =

   2
   3
   4

>> V+1
ans =

   2
   3
   4

>> A'  %transpose
ans =

   1   3   5
   2   4   6

>> max(A)   求最大的一行
ans =

   5   6

>> a=[1 2 3]
a =

   1   2   3

>> [val,ind]=max(a)
val = 3   %最大值
ind = 3   %最大值的位置

>> a<3
ans =

  0  1  0

>> find( a<3)   %对每个元素进行比较
ans = 2
>> magic(3)
ans =

   8   1   6
   3   5   7
   4   9   2

>> magic(3)    %magic function
ans =

   8   1   6
   3   5   7
   4   9   2

>> A=magic(3)
A =

   8   1   6
   3   5   7
   4   9   2

>> [r,c]=find(A>=7)  %找大于7的元素
r =

   1
   3
   2

c =

   1
   2
   3

>> sum(a)  %add
ans = 9
>> prod(a) %multiply
ans = 24
>> ceil(a)  %设置为整型
ans =

   4   2   3

>> max(A,[],1)  %按列求和
ans =

   8   9   7

>> max(A,[],2)  %按行求和
ans =

   8
   7
   9

>> max(A(:))  %对所有元素求和
ans = 9
>> flipud(eye(9)) %对矩阵翻转
ans =

Permutation Matrix

   0   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   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   0
>> pinv(magic(3))    %求伪逆矩阵
ans =

   1.472222222222226e-01  -1.444444444444453e-01   6.388888888888940e-02
  -6.111111111111209e-02   2.222222222222424e-02   1.055555555555544e-01
  -1.944444444444396e-02   1.888888888888878e-01  -1.027777777777772e-01

>> magic(3)*pinv(magic(3))   %伪逆矩阵乘原来的矩阵可以得到一个近似的单位矩阵
ans =

   1.000000000000005e+00  -1.143529715363911e-14   6.272760089132134e-15
  -2.740863092043355e-16   1.000000000000000e+00  -1.942890293094024e-16
  -6.203371150093062e-15   1.254552017826427e-14   9.999999999999929e-01


第四节 数据绘制

简单的图可以检测算法是否正常,本节主要讲述画图的方法。

>> t=[0:0.01:0.98];
>> y1=sin(2*pi*4*t);
>> plot(t,y1);  %画图1
>> y2=cos(2*pi*4*t);
>> plot(t,y2);  %画图2

 图一

图二

>> hold on;     %固定画面
>> plot(t,y2,'r');%用红色线画y2
>> xlabel('time')
>> ylabel('value')
>> legend('sin','cos')
>> title('my plot')    %设置图表格式

可以得到下图

>> print -dpng 'one.png'
>> figure(1);plot(t,y1);
>>  figure(2);plot(t,y2);
>> subplot(1,2,1);% divides plot a 1*2 grid,access first element
>> plot(t,y1);
>> subplot(1,2,2);
>> plot(t,y2);
>> axis([0.5 1 -1 1]) %设置x轴显示范围
>> clf; %清屏

可以获得下图:

接着是根据矩阵绘制图像

>> A=magic(5)
A =

   17   24    1    8   15
   23    5    7   14   16
    4    6   13   20   22
   10   12   19   21    3
   11   18   25    2    9

>> imagesc(A)

 也可以变成灰度显示

>> imagesc(A),colorbar,colormap gray;

用灰度显示数值大小。

>> A=magic(15);
>> imagesc(A),colorbar,colormap gray;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值