Machine Learning Andrew Ng -5. Octave Tutrial (Matlab)

5.1 Basic operations

5.2 Moving data around

5.3 Computing on data

5.4 Plotting data

5.5 For while if statement and functions

5.6 Vectorization

看过前两节课后,觉得matlab语言貌似和octave没差, 因此第五节学习打算利用matlab进行学习

基本操作

???怎么代码块都是一个颜色??```matlab 识别不出来??丑…

>> 5 + 6

ans =        % matlab命令行中 ans 就是这个样子,占地方就占地方吧,不愿修改格式qaq

    11    

>> 3 - 2

ans =

     1

>> 5 * 8

ans =

    40

>> 2^6

ans =

    64

>> 1 == 2    %false

ans =

     0

>> 1 ~= 2     %true  [注] 这里不等于写作 ~= 而不是 !=  (区别于其他编程语言)   

ans =

     1

>> 1 && 0    %AND

ans =

     0

>> 1 || 0   %OR

ans =

     1

>> xor(1,0)

ans =

     1

变量

>> a = 3

a =

     3

>> a = 3;           %  semicolon ";" supressing output  不输出a
>> b = 'hi';
>> c = (3 >= 1);
>> c

c =

     1

>> b

b =

hi

>> a = pi;
>> a

a =

    3.1416

>> disp(a)                %disp
    3.1416

>> disp(sprintf('2 decimals: %0.2f', a))     
2 decimals: 3.14

>> disp(sprintf('6 decimals: %0.6f', a))
6 decimals: 3.141593

>> format long            %format
>> a

a =

   3.141592653589793

>> format short
>> a

a =

    3.1416

向量和矩阵

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

A =

     1     2
     3     4
     5     6

>> A = [1 2;            %另一种输入矩阵A的方式
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         %从 1 到 2 步长为 0.1

v =

    1.0000    1.1000    1.2000    1.3000    1.4000    1.5000    1.6000    1.7000    1.8000    1.9000    2.0000

>> v = 1 : 6

v =

     1     2     3     4     5     6

>> ones (2, 3)           %ones 全 1 矩阵

ans =

     1     1     1
     1     1     1
 
>> C = 2*ones(2, 3)

C =

     2     2     2
     2     2     2

>> w = zeros(1, 3)       %zeros 全 0 矩阵

w =

     0     0     0

>> w = rand(1, 3)        %rand 0~1 随机数

w =

    0.8147    0.9058    0.1270

>> w = rand(3, 3)

w =

    0.9134    0.2785    0.9649
    0.6324    0.5469    0.1576
    0.0975    0.9575    0.9706

>> w = randn(1, 3)        %randn 高斯随机数

w =

    0.7254   -0.0631    0.7147

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

w =

   -5.6077   -1.4568  -12.2009   -6.6252   -9.8195    3.1959   -3.3904   -1.6393   -9.3463   -7.4819

>> hist(w)                  %hist 绘w的直方图  (图在代码后给出)
>> w = -6 + sqrt(10)*(randn(1, 100));
>> hist(w)
>> w = -6 + sqrt(10)*(randn(1, 10000));
>> hist(w)
>> hist(w,50)               %规定列数
>> eye(4)                   %eye 单位矩阵

ans =

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

>> help eye                %help文档
 eye Identity matrix.
    eye(N) is the N-by-N identity matrix.
 
    eye(M,N) or eye([M,N]) is an M-by-N matrix with 1's on
    the diagonal and zeros elsewhere.
 
    eye(SIZE(A)) is the same size as A.
 
    eye with no arguments is the scalar 1.
 
    eye(..., CLASSNAME) is a matrix with ones of class specified by
    CLASSNAME on the diagonal and zeros elsewhere.
 
    eye(..., 'like', Y) is an identity matrix with the same data type, sparsity,
    and complexity (real or complex) as the numeric variable Y.
 
    Note: The size inputs M and N should be nonnegative integers. 
    Negative integers are treated as 0.
 
    Example:
       x = eye(2,3,'int8');
 
    See also speye, ones, zeros, rand, randn.

    eye 的参考页
    名为 eye 的其他函数

>> 

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

>> clear         %清除工作区中所有变量
>> A = [1 2;3 4; 5 6]

A =

     1     2
     3     4
     5     6

>> size(A)       %size 矩阵 A 大小

ans =

     3     2

>> sz = size(A)

sz =

     3     2

>> size(sz)

ans =

     1     2

>> size(A, 1)    %A矩阵的第一维度的大小 即矩阵行数

ans =

     3

>> size(A, 2)    %A矩阵的第二维度的大小  即矩阵列数

ans =

     2

>> v = [1 2 3 4]

v =

     1     2     3     4

>> length(v)     %最大维度的大小

ans =

     4

>> length(A)     %但一般 length 多用于求向量长度

ans =

     3

>> length([1; 2; 3; 4; 5])

ans =

     5

>> pwd       %pwd 当前路径

ans =

C:\Users\asus\Documents\MATLAB
 
>> cd 'C:\Users\asus\Desktop'      %cd 修改路径(到桌面Desktop)
>> ls                              %ls 当前路径下文档
                     
2020winter                        Sublime Text 3.lnk                lab01.zip             
Adobe Dreamweaver CC 2018.lnk     Typora.lnk                                    

>> load featureX.dat
>> load priceY.dat
>> load('featureX.dat')
>> who                       %列出所有变量

您的变量为:              %汉化了的matlab

A         ans       featureX  priceY    sz        v         

>> whos                %列出所有变量详细信息
  Name           Size            Bytes  Class     Attributes

  A              3x2                48  double              
  ans            1x30               60  char                
  featureX      19x2               304  double              
  priceY        19x1               152  double              
  sz             1x2                16  double              
  v              1x4                32  double              

>> featureX

featureX =

        2104           3
        1400           3
        2400           3
        1416           2
        3000           4
        1985           4
        1534           3
        1427           3
        1330           3
        1494           3
        1940           4
        2000           3
        1890           3
        4478           5
        1238           3
        2300           4
        1320           2
        1236           3
        2609           4

>> size(featureX)

ans =

    19     2

>> size(priceY)

ans =

    19     1

>> clear featureX        %清除某一变量
>> whos
  Name         Size            Bytes  Class     Attributes

  A            3x2                48  double              
  ans          1x2                16  double              
  priceY      19x1               152  double              
  sz           1x2                16  double              
  v            1x4                32  double              

>> v = priceY(1:10)      %取priceY前十列

v =

        3399
        3299
        3609
        2320
        5399
        2999
        3149
        1989
        2120
        2425

>> who

您的变量为:

A       ans     priceY  sz      v       

>> whos
  Name         Size            Bytes  Class     Attributes

  A            3x2                48  double              
  ans          1x2                16  double              
  priceY      19x1               152  double              
  sz           1x2                16  double              
  v           10x1                80  double              

>> save hello.mat v;        %save 存储文件
>> clear                       
>> load hello.mat
>> whos
  Name       Size            Bytes  Class     Attributes

  v         10x1                80  double              

>> v

v =

        3399
        3299
        3609
        2320
        5399
        2999
        3149
        1989
        2120
        2425
        
>> save hello.txt v -ascii   %save as text(ASCII)

hello.txt

在这里插入图片描述

索引

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

A =

     1     2
     3     4
     5     6

>> A(3, 2)          %index

ans =

     6
 
>> A(2,:)          % ":" means every element along that row/column

ans =

     3     4

>> A(:,2)

ans =

     2
     4
     6

>> A([1 3], :)      %第一行和第三行

ans =

     1     2
     5     6

>> A(:,2) = [10; 11; 12]     %替换列

A =

     1    10
     3    11
     5    12

>> A = [A, [100; 101; 102]]    %append another column vector to the right

A =

     1    10   100
     3    11   101
     5    12   102

>> A(:)    %把A的所有元素放入一个列向量

ans =

     1
     3
     5
    10
    11
    12
   100
   101
   102

>> 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 = [A B]          %左右重组

C =

     1     2    11    12
     3     4    13    14
     5     6    15    16

>> C = [A; B]         %上下重组

C =

     1     2
     3     4
     5     6
    11    12
    13    14
    15    16

>> size(C)

ans =

     6     2
>> 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           %A,B相对应的元素相乘   .一般表示元素之间的运算

ans =

    11    24
    39    56
    75    96

>> A

A =

     1     2
     3     4
     5     6

>> A .^ 2        %这里^ 与 2 之间要加空格!

ans =

     1     4
     9    16
    25    36

>> v = [1; 2; 3]

v =

     1
     2
     3

>> 1 ./ v

ans =

    1.0000
    0.5000
    0.3333

>> 1 ./ A

ans =

    1.0000    0.5000
    0.3333    0.2500
    0.2000    0.1667

>> log(v)

ans =

         0
    0.6931
    1.0986

>> exp(v)

ans =

    2.7183
    7.3891
   20.0855

>> abs(v)

ans =

     1
     2
     3

>> abs([-1; -1; -3])

ans =

     1
     1
     3

>> -v

ans =

    -1
    -2
    -3

>> v + ones(length(v),1)           %对v中每个元素加一

ans =

     2
     3
     4

>> v + 1                  %对v中每个元素加一的另一种方法

ans =

     2
     3
     4

>> A'              %转置

ans =

     1     3     5
     2     4     6

>> (A')'

ans =

     1     2
     3     4
     5     6

>> a = [1 15 2 0.5]

a =

    1.0000   15.0000    2.0000    0.5000

>> val = max(a)          %A中元素最大值

val =

    15

>> [val, ind] = max(a)     %ind=index 索引 最大值元素的位置

val =

    15


ind =

     2

>> max(A)        %A的每一列的最大值

ans =

     5     6

>> a < 3         %a的每一个元素与3进行比较

ans =

     1     0     1     1

>> a

a =

    1.0000   15.0000    2.0000    0.5000

>> find(a < 3)      %返回值为其索引值

ans =

     1     3     4

>> A = magic(3)        % magic矩阵  每行每列元素的和都是同一个数

A =

     8     1     6
     3     5     7
     4     9     2

>> [r, c] = find( A >= 7)    %r=row  c=column

r =

     1
     3
     2


c =

     1
     2
     3
 
>> a

a =

    1.0000   15.0000    2.0000    0.5000

>> sum(a)

ans =

   18.5000

>> prod(a)      %四个元素乘积

ans =

    15

>> floor(a)

ans =

     1    15     2     0

>> ceil(a)

ans =

     1    15     2     1

>> ceiling(a)
未定义函数或变量 'ceiling'。

%Andrew Ng老师说ceiling=ceil 但在matlab中没有这个命令 可能仅适用于octave
 
>> rand(3)    %3*3随机矩阵

ans =

    0.0581    0.1216    0.3025
    0.3230    0.7500    0.6023
    0.8535    0.4727    0.2124

>> max(rand(3),rand(3))     %由两个3*3矩阵中对应较大元素组成的

ans =

    0.6958    0.7344    0.7514
    0.8546    0.9334    0.9937
    0.3971    0.8652    0.4279
 
>> A

A =

     8     1     6
     3     5     7
     4     9     2

>> max(A,[],1)       %A矩阵每一列最大值

ans =

     8     9     7

>> max(A,[],2)      %A矩阵每一行最大值  max默认求每一列最大值

ans =

     8
     7
     9

>> max(max(A))    %求A中最大元素

ans =

     9

>> A(:)

ans =

     8
     3
     4
     1
     5
     9
     6
     7
     2

>> max(A(:))     %求A中最大元素另一种方法

ans =

     9

>> A = magic(9)

A =

    47    58    69    80     1    12    23    34    45
    57    68    79     9    11    22    33    44    46
    67    78     8    10    21    32    43    54    56
    77     7    18    20    31    42    53    55    66
     6    17    19    30    41    52    63    65    76
    16    27    29    40    51    62    64    75     5
    26    28    39    50    61    72    74     4    15
    36    38    49    60    71    73     3    14    25
    37    48    59    70    81     2    13    24    35

>> sum(A,1)  %取A的每一列相加

ans =

   369   369   369   369   369   369   369   369   369

>> sum(A,2)    %取A的每一行相加

ans =

   369
   369
   369
   369
   369
   369
   369
   369
   369

>> eye(9)

ans =

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

>> A .* eye(9)

ans =

    47     0     0     0     0     0     0     0     0
     0    68     0     0     0     0     0     0     0
     0     0     8     0     0     0     0     0     0
     0     0     0    20     0     0     0     0     0
     0     0     0     0    41     0     0     0     0
     0     0     0     0     0    62     0     0     0
     0     0     0     0     0     0    74     0     0
     0     0     0     0     0     0     0    14     0
     0     0     0     0     0     0     0     0    35

>> sum(sum(A .* eye(9)))     %对角线之和

ans =

   369

>> sum(sum(A .*flipud(eye(9))))   %flipud矩阵垂直翻转  对另一条对角线求和

ans =

   369

>> A = magic(3)

A =

     8     1     6
     3     5     7
     4     9     2

>> pinv(A)       %INVERSE 求A的逆

ans =

    0.1472   -0.1444    0.0639
   -0.0611    0.0222    0.1056
   -0.0194    0.1889   -0.1028

>> temp = pinv(A)

temp =

    0.1472   -0.1444    0.0639
   -0.0611    0.0222    0.1056
   -0.0194    0.1889   -0.1028

>> temp * A

ans =

    1.0000    0.0000   -0.0000
   -0.0000    1.0000    0.0000
    0.0000   -0.0000    1.0000

可视化

>> t = [0: 0.01: 0.98];
>> y1 = sin(2 * pi * 4 * t);
>> plot(t, y1);

在这里插入图片描述

>> y2 = cos(2 * pi * 4 * t);
>> plot(t, y2);

在这里插入图片描述

>> plot(t, y1);
>> hold on;       %在同一个图绘制两条曲线
>> plot(t, y2);   %plot(t, y2, 'r')  红色线

在这里插入图片描述

>> xlabel('time')
>> ylabel('value')
>> legend('sin','cos')
>> title('mt plot')
>> print -dpng 'myPlot.png'     %保存到本地
>> close     %关闭图像

在这里插入图片描述

>> figure(1);plot(t, y1);
>> figure(2);plot(t, y2);   %两个图像
>> subplot(1, 2, 1);  %Divides plot a 1*2 grid, access first element 将图像分成1*2的网格,现在使用第一个格子
>> plot(t, y1);
>> subplot(1, 2, 2);  
>> plot(t, y2);

在这里插入图片描述

>> axis([0.5 1 -1 1])  %改变x轴和y轴

在这里插入图片描述

>> 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;

在这里插入图片描述

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

在这里插入图片描述

控制语句

>> v = zeros(10, 1)

v =

     0
     0
     0
     0
     0
     0
     0
     0
     0
     0

>> for i = 1 : 10,    %这里空格没有意义,  只是为了让结构更加明显
       v(i) = 2^i;     % for
   end;
>> v

v =

           2
           4
           8
          16
          32
          64
         128
         256
         512
        1024

>> indices = 1 : 10;
>> indices

indices =

     1     2     3     4     5     6     7     8     9    10

>> for i = indices,
       disp(i);
   end;
     1

     2

     3

     4

     5

     6

     7

     8

     9

    10
>> v

v =

           2
           4
           8
          16
          32
          64
         128
         256
         512
        1024

>> i = 1;
>> while i <= 5,          %while
        v(i) = 100;
        i = i + 1;
  end;
>> v

v =

         100
         100
         100
         100
         100
          64
         128
         256
         512
        1024

>> i = 1;
>> while true,
         v(i) = 999;
         i = i + 1;
         if i == 6, 
            break;         %break
         end;
       end;
>> v

v =

         999
         999
         999
         999
         999
          64
         128
         256
         512
        1024

函数

>> pwd

ans =

C:\Users\asus\Documents\MATLAB

>> cd 'C:\Users\asus\Desktop'   
%在桌面上事先建立一个suqareThisNumber.m文档, 用写字板打开后是一个函数

%function y = suqareThisNumber(x)

%y = x^2;

%这里推荐用写字板而不是记事本打开文件

>> squareThisNumber(5)

ans =

    25

>> addpath('C:\Users\asus\Desktop')   %不必修改路径, 而是将路径添加到搜索路径中
>> cd 'C:\'
>> squareThisNumber(5)

ans =

    25

>> pwd

ans =

C:\
>> %返回多个值
%建立一个文件在桌面 squareAndCubeThisNumber.m  内容如下
%function [y1, y2] = squareAndCubeThisNumber(x)

%y1 = x^2;
%y2 = x^3;

>> [a, b] = squareAndCubeThisNumber(5);
>> a

a =

    25

>> b

b =

   125

Cost function

%costFunction.m
function J = costFunctionJ(X, y, theta)

%X is the "design matrix" containing our training examples.

%y is the class labels

m = size(X, 1);   %Number of training examples.
predictions = X*theta;    %Predictions of hypothesis on all m examples.
sqrErrors = (predictions - y) .^ 2;    %square errors.

J = 1/(2*m) * sum(sqrErrors);
>> X = [1 1; 1 2; 1 3]

X =

     1     1
     1     2
     1     3

>> y = [1; 2; 3]

y =

     1
     2
     3

>> theta = [0; 1];
>> j = costFunction(X, y, theta)

j =

     0

>> theta = [0; 0];
>> j = costFunction(X, y, theta)

j =

    2.3333

向量化

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

发布了44 篇原创文章 · 获赞 0 · 访问量 1349

猜你喜欢

转载自blog.csdn.net/qq_41664688/article/details/104029415