吴恩达机器学习Octave的使用

1. 基本操作

1.1. 数值运算

>> 5 + 6
ans = 11
>> 3 - 2
ans = 1
>> 5 * 8
ans = 40
>> 1 / 2
ans = 0.5000
>> 2^6
ans = 64
>> 1 == 2 %false
ans = 0
>> 1 ~= 2
ans = 1
>> 1 && 0 %AND
ans = 0
>> 1 || 0 %OR
ans = 1
>> xor(1,0)
ans = 1

1.2. 输出形式

% 改变输出提示符的样式,默认形式为 octave-3.2.4.exe.ll> 
PS1('>> ')
% 后面加分号是阻止a赋值后打印输出
a = 3;
% 格式化输出
>> a = pi
a = 3.1416
>> disp(a)
3.1416
>> disp(sprintf('2 decimals: %0.2f',a))
2 decimals: 3.14
% 打印更多位数
>> format long
>> a
a = 3.141592653589793
>> format short
>> a
a = 3.1416

1.3. 向量和矩阵

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

% 从12以步长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
   
% 元素全为1的矩阵
>> ones(2,3)
ans =

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

   2   2   2
   2   2   2

% 元素全为1的矩阵
>> w = zeros(1,3)
w =

  0  0  0

% 随机矩阵
>> w = rand(1,3) % 随机值介于0~1之间
w =

   0.3486   0.7838   0.8534

>> rand(3,3)
ans =

   0.4068   0.2322   0.5194
   0.4869   0.3902   0.8645
   0.6563   0.9625   0.8374

% 数值服从高斯分布的随机矩阵(均值为0,标准差或方差为1>> w = randn(1,3)
w =

  -0.3099  -0.3265  -0.8470

>> w = -6 +sqrt(10)*(randn(1,10000));
>> hist(w) % 运行结果如下图

image-20211002162136276

>> hist(w,50) % 运行结果如下图

image-20211002162248236

% 单位矩阵
>> eye(4)
ans =

Diagonal Matrix

   1   0   0   0
   0   1   0   0
   0   0   1   0
   0   0   0   1
% help指令
>> help eye
>> help rand

2. 移动数据

% 获取矩阵行列数,返回的依旧是个矩阵
>> A = [1 2;3 4;5 6]
A =

   1   2
   3   4
   5   6

>> size(A)
ans =

   3   2
   
% 获取矩阵A第一维度的数量,即行数量
>> size(A,1)
ans = 3

% 获取矩阵数量最多的维度的数量(一般只对向量操作)
>> v = [1 2 3 4]
v =

   1   2   3   4

>> length(v)
ans = 4
>>

2.1. 补充

>> pwd
ans = C:\Users\10127
% 改变路径命令为 cd ...
% 查看Octave内存中的变量
>> who
>> whos % 显示更详细的信息
% 清除所有变量
>> clear
% 获取矩阵元素(获取矩阵A第i行第j列的元素)
A(i,j)
% 获取矩阵A第i行所有元素
A(i,:)
% 获取矩阵A第j列所有元素
A(:,j)
% 替换矩阵中的元素
>> A = [1 2;3 4;5 6]
A =

   1   2
   3   4
   5   6

>> A(:,2) = [10;11;12]
A =

    1   10
    3   11
    5   12
% 增加一列
>> A = [A,[100; 101; 102]]
A =

     1    10   100
     3    11   101
     5    12   102
% 把矩阵A 中所有元素放入一个单独的列向量
>> A(:)
ans =

     1
     3
     5
    10
    11
    12
   100
   101
   102

3. 计算数据

>> A
A =

   1   2
   3   4
   5   6

>> B
B =

   11   12
   13   14
   15   16

% 矩阵A与B对应元素相乘
>> A .* B
ans =

   11   24
   39   56
   75   96

% 矩阵A与每个元素求平方
>> A .^ 2
ans =

    1    4
    9   16
   25   36

% 向量v每个元素的倒数
>> v = [1; 2; 3]
v =

   1
   2
   3

>> 1 ./ v
ans =

   1.0000
   0.5000
   0.3333

% 对数
>> log(v)
ans =

        0
   0.6931
   1.0986

% 以e为底v中各元素为指数
>> exp(v)
ans =

    2.7183
    7.3891
   20.0855

% 绝对值
>> abs(v)
ans =

   1
   2
   3
  
% 按元素取反
>> -v
ans =

  -1
  -2
  -3

% 按位加1
>> v+1
ans =

   2
   3
   4


% 转置矩阵
>> A = [1 2;3 4;5 6]
A =

   1   2
   3   4
   5   6

>> A'
ans =

   1   3   5
   2   4   6

% 求矩阵最大元素和最大元素所在位置
>> a = [1 15 2 0.5]
a =

    1.0000   15.0000    2.0000    0.5000

>> val = max(a)
val = 15
>> [val, ind] = max(a)
val = 15
ind = 2
% 如果参数是矩阵,则求出矩阵每一列的最大值
>> max(A)
ans =

   5   6

% 判断a中各元素是否小于3,返回布尔值
>> a <3
ans =

  1  0  1  1

% 找出a中所有大于3的元素的位置
>> find(a < 3)
ans =

   1   3   4

% 幻方矩阵(幻方矩阵特殊性质:它任意行、列、对角线的元素和都相等)
>> A = magic(3)
A =

   8   1   6
   3   5   7
   4   9   2

% 找出所有大于7的元素的位置(可以看到,第一个参数表示行位置,第二个参数表示行位置)
>> [r,c] = find(a >= 7)
r = 1
c = 2
>> [r,c] = find(A >= 7)
r =

   1
   3
   2

c =

   1
   2
   3

% 总和和乘积
>> sum(a)
ans = 18.500
>> prod(a)
ans = 15
% 向下取整
>> floor(a)
ans =

    1   15    2    0

% 向上取整
>> ceil(a)
ans =

    1   15    2    1

% 获取矩阵每一列的最大值,这里第二个参数不添加则会让矩阵中每个元素与A进行比较,显示最大值,第三个参数告诉max函数从矩阵的第一维度(列)比较取值
>> max(A, [], 1)
ans =

   8   9   7

>> max(A, [], 2)
ans =

   8
   7
   9

% 获取整个矩阵的最大值
>> max(max(A))
ans = 9
 >> max(A(:))
ans = 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)
ans =

   369   369   369   369   369   369   369   369   369

>> sum(A, 2)
ans =

   369
   369
   369
   369
   369
   369
   369
   369
   369

% 对角线元素之和
>> sum(sum(A .* eye(9)))
ans = 369
% 反对角线元素之和
>> sum(sum(A.*flipud(eye(9))))
ans = 369

4. 数据绘制

>> t=[0:0.01:0.98];
>> t
>> 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,'r'); % 第三个参数'r'表示颜色为红色
% 给x轴和y轴取标签(命名)
>> xlabel('time')
>> ylabel('value')
% 给不同函数取标签(命名)
>> legend('sin','cos')
% 给图像取名字
>> title('my plot')
% 将图像存为图片并下载到指定位置
>> cd 'C:\Users\Admin\Desktop'; print -dpng 'myPlot.png'
% 关闭图像,(GUI窗口可以直接点击右上角×关闭)
>> close
% 将窗口分为两部分并绘制不同图像
>> subplot(1,2,1); % 前两个参数表示将窗口分为一个一行二列的矩阵,第三个参数表示使用第一个窗口
>> plot(t,y1);
>> subplot(1,2,2);
>> plot(t,y2);
% 改变x、y轴的刻度(下式表示x轴从0.51;y轴从-11>> axis([0.5 1 -1 1])
% 清除图像
>> 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)

image-20211002151248254

% 下面这行语句表示顺序执行三条指令,以灰度表示数值
>> imagesc(A),colorbar,colormap gray;

image-20211002151435230

5. 控制语句:for,while,if 语句

5.1. 控制语句

% 定义初始变量
>> v=zeros(10,1)
v =

   0
   0
   0
   0
   0
   0
   0
   0
   0
   0

% 令向量v每项为以2为底以向量位置索引为指数的数值
>> for i=1:10,
v(i)=2^i;
end;
>> v
v =

      2
      4
      8
     16
     32
     64
    128
    256
    512
   1024

% 预先定义索引并在for循环中运用索引
>> indides=1:10;
>> indides
indides =

    1    2    3    4    5    6    7    8    9   10

>> for i=indides ,
disp(i);
end;
1
2
3
4
5
6
7
8
9
10
% while循环和break的使用
>> i=1;
>> while true,
 v(i) = 999;
 i = i+1;
 if i==6,
  break;
 end;
end;
>> v
v =

    999
    999
    999
    999
    999
     64
    128
    256
    512
   1024

>> v(1)=999
v =

    999
    999
    999
    999
    999
     64
    128
    256
    512
   1024

% if配合elseif的使用
>> v(1)=2;
>> if v(1)==1
 disp('The value is one');
elseif v(1)==2
 disp('The value is two');
else
 disp('The value is not one or two.');
end;
The value is two
>>

5.2. 读取文件调用函数

5.2.1. 单返回值

在桌面定义一个名为squareThisNumber.m 的文件,.m 为后缀名,存储位置为C:\Users\Admin\Desktop ,文件内容如下:

function y = squareThisNumber(x)
  
  y=x^2;

这个函数是对输入函数求平方并输出

函数的调用:

>> cd 'C:\Users\Admin\Desktop'	% 将octave的路径设为我们存放函数文件的位置
>> squareThisNumber(5)	% 调用函数
ans = 25

% 进阶(添加访问路径,有点类似windows添加系统变量)
>> addpath('C:\Users\Admin\Desktop')
>> cd 'C:\'
>> squareThisNumber (5)
ans = 25
>> pwd
ans = C:\
>>
5.2.2. 多返回值

函数形式如下:

function [y1,y2] = squareThisNumber(x)
  
  y1=x^2;
  y2=x^3;

调用:

>> [a,b] = squareThisNumber (5)
a = 25
b = 125


参考视频:[中英字幕]吴恩达机器学习系列课程

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值