斯坦福机器学习笔记 第2周 五、Octave教程(一)

来源:互联网 发布:js控制标签显示隐藏 编辑:程序博客网 时间:2024/06/07 17:31

五、Octave教程

5.1 基本操作

1.预备知识点:

  • Octave是一种编程语言,类似Matlab。它是一种高级语言,很容易掌握。
  • Octave是一种原始语言(prototyping language),使用Octave你可以快速地实现算法,然后可以再根据需要用C++或Java实现。
  • Matlab比Octave强大,本门课程也可以使用Matlab。
  • 如果你会Python、NumPy或R语言,最好暂时放弃一下,Ng建议在这门课中使用Octave来写程序。提交作业也是使用Octave的。

2.启动Octave
Octave启动

(1)基本数学运算(输入代码,自行查看效果)

5+6 // ans = 113-2 // ans = 15*8 // ans = 401/2 // ans = 0.500002^6 // ans = 64

(2)基本逻辑运算

1==2 // ans = 0 1~=2 // ans = 18>1 && 0 // ans = 09>1 || 0 // ans = 1xor(0,1) // ans = 1(异或运算)10>xor(0,1) // ans = 1

(3)修改Octave提示符

PS1('>> ');

(4)比较下列两行命令

a=3a=3;

如果你想分配一个变量,但不希望在屏幕上显示结果,你可以在命令后加一个分号,可以抑制打印输出,敲入回车后,不打印任何东西。
(5)练习(依次输入)

b = 'hi';bc = (3>=1);ca = pi;adisp(a)disp(sprintf('2 decimals: %0.2f', a))//这是一种旧风格的C语言语法format longaformat shorta

(6)向量和矩阵

A = [1 2; 3 4; 5 6]v1 = [1 2 3]v2 = [1; 2; 3]V = 1:0.2:2 // 有用 起始:增量:终止V = 1:6ones(2,3)  // 2行3列zeros(1,3) // 1行3列rand(3,3) // 随机值矩阵,数值介于0-1之间 
w = rand(1,3)w = -6 + sqrt(10)*randn(1,10000))hist(w) // 绘制直方图hist(w,50)I = eye(6) // 单位矩阵
help eye // 帮助文档help randhelp help

以上是Octave的基本操作,多多练习一下。

5.2 移动数据

参考视频 : 5 - 2 - Moving Data Around (16 min).mkv

问题:

  • 如何把数据加载到Octave中?
  • 怎样把数据存入一个矩阵?
  • 如何保存计算结果?
  • 如何移动这些数据

基本命令:

A = [1 2; 3 4; 5 6];size(A) // ans = 3 2(返回矩阵A的大小)sz = size(A); // size(A)返回结果其实就是一个矩阵size(sz) // ans = 1 2(返回sz是一个1行2列的矩阵)size(A,1) // ans = 3(返回行数)size(A,2) // ans = 2(返回列数)length(A) // ans = 2(返回行列最大的那个数)length([1;2;3;4;5]) // ans = 5(一般用在向量上)

当我们打开Octave时,我们通常已经在在一个默认路径中,这个路径时Octave的安装路径。

pwd // 显示当前路径cd '路径地址' // 改变路径ls // 列出当前路径下的文件featureX.dat // 加载featureX.dat(直接键入文件名)priceY.datload('featureX.dat') // 加载featureX.datwho // 显示变量whos // 显示变量详细信息clear X // 清除变量Xclears // 清除所有变量)

数据保存和读取操作:

V = [1;2;3;4;5;6;7;8;9;10];save hello.mat V // 保存变量V到hello.mat文件中clearsload('hello.mat') // 重新载入变量Vsave hello.txt v -ascii // 把数据保存成一个文本文档

矩阵的索引操作:

A = [1 2; 3 4; 5 6];A(3,2) // ans = 6 返回A{32}A(2,:) // ans = 3 4 返回第2行A(:,2) // ans = [2;4;6] 返回第2列A([1 3],:) // ans = [1 2; 5 6] 返回第1和3行A(:,2) = [10;11;12] // 给A的第2列赋值A = [A, [100;101;102]] // 给A增加一列A(:) // 生成单独的列向量
A = [1 2; 3 4; 5 6]B = [11 12; 13 14; 15 16]C = [A B] // 左右连接矩阵A和BC = [A;B] // 上下连接矩阵A和B

通过几句简单的命令,Octave能够很方便地帮助我们组合复杂的矩阵以及对数据进行移动,好好练习一下这些命令。

5.3 计算数据

参考视频 : 5 - 3 - Computing on Data (13 min).mkv

矩阵计算:A(3*2) B(3*2) C(2*2)

A = [1 2;3 4;5 6];B = [11 12;13 14;15 16];C = [1 1;2 2]A*C // 矩阵相乘A.*B // 元素位运算:对应元素相乘A.^2 // 将A中每一个元素平方V = [1;2;3]'1./V // ans=[1;0.5000;0.3333] 得到每一个元素的倒数log(V) // 求自然对数exp(V) // 求e的幂次运算abs([1;-2;-3]) // 求绝对值运算v+1 // 加一运算

其他:

A = magic(3)[r,c] = find(A>=7)a = [1 15 2 0.5];asum(a) // 求和运算prod(a) // 求积运算floor(a) // 向下四舍五入ceil(a) // 向上四舍五入max(rand(3),rand(3)) // 逐元素比较两个3*3的矩阵,取最大值返回一个3*3的矩阵max(A,[],1) // 返回每一列的最大值max(A,[],2) // 返回每一行的最大值max(max(A)) // 返回最大值A = magic(9)sum(A,1) // 求A每一列的总和sum(A,2) // 求A每一行的最值sum(sum(A)) //矩阵元素之和flipup/flipud(A) //上下翻转矩阵pinv(A) // 求矩阵的逆

如何对矩阵中的数字进行各种操作,在运行完某个学习算法之后,通常最有用的事情是看看你的结果,或者说让你的结果可视化。接下来,我们将学习如何很快地画图。

阅读全文
0 0