吴恩达机器学习——第6章 Octave/Matlab 教程

1 概述

octave是学习机器学习的非常方便的框架,下面对octave的语法做一个系统的介绍。
mac下安装过程比较简单:brew install octave

2 语法介绍

输入octave命令,进入octave环境。

矩阵操作

// 定义3*2矩阵
A=[1 2;3 4; 5 6;]
// 定义值都是1的矩阵
ones(m,n)
// 定义值都是0的矩阵
zeros(m,n)
// 定义单位矩阵
eye(m)
// 随机矩阵
rand(m,n)
// 转置:单引号
A'

移动数据

size函数获取矩阵的大小;length函数返回最大的维度;save函数保存数据到文件。

octave:14> size(A)
ans =

   3   2

octave:15> size(A,1)
ans =  3
octave:16> size(A,2)
ans =  2
octave:17> length(A)
ans =  3
octave:18> pwd
ans = /Users/didi
octave:19> ls
2.sql				VIA
3.sql				a.txt
octave:20> cd /opt/work/test
octave:21> pwd
ans = /opt/work/test
octave:22> save A.data A
octave:23> save A.txt A -ascii

定位数据:

octave:24> A
A =

   1   2
   3   4
   5   6

octave:25> A(3,2) % 第三行、第二列的值
ans =  6
octave:26> A(3,:)
ans =

   5   6

octave:27> A([1,3],:) %冒号代表所有行或列,此处的含义是第1、3行所有列
ans =

   1   2
   5   6

octave:28> A(:,2)=[10;11;12] % 赋值语句,意思是每行的第2列替换为后面的向量
A =

    1   10
    3   11
    5   12

octave:29> A=[A,[100;101;102]] % 在A的右边增加一个纵向量
A =

     1    10   100
     3    11   101
     5    12   102
octave:30> A(:) % 把A所有元素使用纵向量表示
ans =

     1
     3
     5
    10
    11
    12
   100
   101
   102

octave:31> B=[201;202;203]
B =

   201
   202
   203

octave:32> C=[A,B] % A的右边追加向量B
C =

     1    10   100   201
     3    11   101   202
     5    12   102   203

octave:33> C=[A;B] % A的下面增加横向量,B'是B的转置
error: vertical dimensions mismatch (3x3 vs 3x1)
octave:33> C=[A;B']
C =

     1    10   100
     3    11   101
     5    12   102
   201   202   203

计算数据

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

   1   2
   3   4
   5   6

octave:38> C = [1 2 3;4 5 6]
C =

   1   2   3
   4   5   6

octave:39> A * C % 矩阵相乘
ans =

    9   12   15
   19   26   33
   29   40   51
octave:41> A.+1 %A的每个元素加1,.代表每个元素
ans =

   2   3
   4   5
   6   7

octave:42> A.*A % A的每个元素相乘
ans =

    1    4
    9   16
   25   36

octave:43> B=[1 0;0 1;1 1]
B =

   1   0
   0   1
   1   1

octave:44> A.*B % A的每个元素乘以B对应位置的每个元素
ans =

   1   0
   0   4
   5   6

octave:45> A.^2 %A每个元素的平方
ans =

    1    4
    9   16
   25   36

octave:46> log(A) % A每个元素的对数
ans =

   0.00000   0.69315
   1.09861   1.38629
   1.60944   1.79176

octave:47> exp(A) %以e为底,以A每个元素为指数的幂运算
ans =

     2.7183     7.3891
    20.0855    54.5982
   148.4132   403.4288

octave:51> abs(-A) %求绝对值
ans =

   1   2
   3   4
   5   6

octave:52> A+1 %相当于A.+1,每个元素加1
ans =

   2   3
   4   5
   6   7

octave:54> max(A) % 求每个列最大的值
ans =

   5   6
octave:67> max(A,[],1) % 求A每个列最大值,返回值是行向量
ans =

   5   6

octave:68> max(A,[],2)% 求A每行最大值,返回值是列向量
ans =

   2
   4
   6

octave:55> V=[1 2 4 6 8]
V =

   1   2   4   6   8

octave:56> max(V)
ans =  8
octave:57> V<4 % 值小于4的位置返回1,其它位置返回0
ans =

  1  1  0  0  0

octave:58> find(V<4) %返回值小于4的值
ans =

   1   2

octave:59> magic(5) %生成幻方矩阵,幻方矩阵是行、列、对角线相加都相等的矩阵
ans =

   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

octave:60> sum(V) 
ans =  21
octave:61> prod(V) % 乘积
ans =  384
octave:62> floor(V) % 取整数
ans =

   1   2   4   6   8

octave:63> rand(3,2) % 随机矩阵
ans =

   0.56038   0.35228
   0.35527   0.93846
   0.78689   0.82490

octave:65> ceil(rand(3,2)) % 四舍五入
ans =

   1   1
   1   1
   1   1
octave:70> sum(A,1) %每列求和
ans =

    9   12

octave:72> sum(A,2) % 每行求和
ans =

    3
    7
   11

octave:73> flipud(A) % 向下翻转180度
ans =

   5   6
   3   4
   1   2

octave:74> pinv(A) %求逆矩阵,属于伪逆,任何情况都有解
ans =

  -1.33333  -0.33333   0.66667
   1.08333   0.33333  -0.41667

绘图

plot(t1,y1) % 绘制图形
hold on %在旧图上绘制新图形
xlabel('time') %x轴标识
ylabel('value') %y轴标识
legend('sin','cos') % 两个图形的图例
title('title') % 整个图的标题
print -dpng 'myplot.png' %保存图片
close % 关闭图形
figure(1);plot(t1,y1) % 在画布1上画图
figure(2);plot(t1,y1) % 在画布2上画图
subplot(1,2,1) %把画布分成1行2列,现在使用第一列
axis([0.5 1 -1 1]) % x轴的坐标范围为0.5-1,y轴的范围是-1到1.
clf %清除图形
imagesc(A) % 彩色矩阵

控制语句

if else

octave:87> i = 2,
i =  2
octave:88> if(i ==1)
> disp('i == 1')
> elseif('i==2')
> disp('i==2')
> else
> disp('i !=1 and 2')
> end;
i==2
octave:89> c

for

octave:80> for i = 1:10,
> disp(i);
> end;
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10

while

octave:81> i=0,
i = 0
octave:82> while(i<10),
> disp(i);
> i=i+1;
> end;
0
 1
 2
 3
 4
 5
 6
 7
 8
 9

函数,在当前目录下定义一个.m文件,里面是函数的定义,下面的函数的意思是返回值是y1 y2,入参是x:

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

调用该函数

fun(3)
发布了48 篇原创文章 · 获赞 34 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/u013252773/article/details/100068667