此文是转载内容!!!!!
本次课主要是关于编程,帮助你学会如何编程实现学习算法。编程需要的工具是Octave或者Matlab。本部分介绍关于Octave/Matlab的知识,以及如何提交相关编程作业.
Lesson 1 Octave/Matlab教程
Part 1 基本操作
本节主要介绍关于Octave的基本操作 在Octave中可以进行 基本的算术运算,逻辑运算 ,操作如图所示,简单方便,其中%用于注释的作用。注:在Matlab中,符号使用完全相同。
使用ps1('>> ');可以改变提示符的样子,注意这个地方有分号。 可以直接在命令行中给 变量赋值 ,加上分号后可以不直接打印出来,直接输入参数,可以直接打印出相应的值。 用pi对a进行赋值,函数disp(a)用于打印显示变量,sprintf函数也用于显示。disp和sprintf可结合也可心单独使用。format可以使接下来打印的结果格式发生改变。 这里讲解了如何给矩阵和向量赋值。 第一个例子是如何构造列向量,即用分号分隔即可。第二个例子是构造横向量,从1开始到2,每个值间隔0.1
构造横向量,从1到6 构造2X3的全为1的矩阵 ones()函数可以简化构造 ones,zeros构造全为1或者0的矩阵,rand构造全部为随机数的矩阵 randn产生标准正态分布的随机数或矩阵的函数。对于hist,它的全称是histogram,全称直方图,即用直方图的形式统计出各范围内元素的个数,如用hist显示为
其中hist(w,a),这个数字a表示把直方图分为a份。 eye()函数产生单位矩阵 不知道函数的功能,可以用help函数来查询Part 2 对数据进行灵活操作
本节主要讲如何在Octave中对数据进行灵活地处理,即对数据的各种可能的操作方式。打印一个2x3的矩阵,size计算规模,size值仍这向量,可以再计算规模 size(A,1)计算第一个维度,即2x3中的2,size(A,2)计算第二个维度,即3。
length(v)或者length(A)表示计算向量的维度或者矩阵中最大的维数。
pwd显示当前工作目录cd '.....'切换工作目录
ls列出当前目录中文件
who显示当前工作空间中已经定义的变量load X和load('X')的作用一致,都是将文件内容导入。这两个dat文件里边就是关于房价的数据
如featureX.dat
priceY.dat 文本中数据导入后,用矩阵的形式存储,可打印在控制台中whos可以显示更加详细的变量的信息 直接使用clear命令,可以删除所有的变量 clear featuresX则删除某一个变量 priceY(m:n)表示取向量的第m个元素到第n个元素进行赋值 对于矩阵来说,元素编号是从上到下,从左向右依次编号
注意对比,上面两张图的赋值,上上是从已知向量截取再赋值,上图是对一个新的变量赋值。
该命令将向量数据存储到本地文件hello.mat中,但只能用matlab来读取 保存为文本格式,可读。保存为.dat格式也是可以的 A(x,y)表示对矩阵进行索引,使用:表示该行或者列的所有元素 上面表示很奇特,表示将第一和三行的所有元素进行显示 也可以通过这各形式对矩阵赋值 通过上述方式对矩阵增加一列 将所有元素放在一个向量中 可以通过上述方式将两个矩阵进行组合,用;表示将B矩阵放在A矩阵下面,用,或者不用,则表示把矩阵B放在旁边Part 3 数据运算
本节介绍如何对数据进行运算 为方便后续讲解,首先初始化三个矩阵A*C表示A与C矩阵正常相乘
A .* B点乘表示两个矩阵中的每个对应位置的元素相乘
可以理解为.为对每个元素进行依次处理
A .^ 2对矩阵每个元素进行平方
1./A表示对A的每个元素进行除法,用1 来除以第个元素
log(A)表示以e为底,对每个元素求log
exp(A)表示以e的A中每个元素为幂的结果
abs(A)表示对A的每个元素求绝对值
-A表示对A的每个元素求负数
v+1表示对v中每个元素都加1
A‘表示矩阵A的转置
max(v)表示向量v中最大的元素,矩阵的含义有点不同,得到的是一个向量,包含了来自各列的最大元素组成的行向量
A<3表示对每个元素都进行比较,得到的结果为1或者0
find(A<3)得到一个向量,列出相应小于3的元素的索引
magic(n)表示生成nxn的矩阵,每行每列得到的和相同,且元素从1到n^n
上面给了一个使用find的例子。实际上这些功能都不需要记,有知道时,直接使用help就行。 sum将矩阵所有元素进行相加prod将数组元素全部相乘,如果是矩阵,则是对每一列看作向量进行相乘,得到向量
floor对每个元素向下取整
ceil对每个元素向上取整
rand得到3x3的随机数矩阵
pinv求矩阵的逆Part 4 数据可视化
本节主要讲解如何对数据可视化 对变量t进行赋值,构造正弦函数,然后作图,得到如上图所示的结果 hold on将图形保持,使用r追加图像 xlabel对x轴命名legend对每条线进行说明
title追加名字
print保存图像到本地
将图像关闭
对图像命名,出现两个图 将一张图分为两部分,呈现第1部分分别设置x轴和y轴的范围
clf清除现有图像中的内容也可以对矩阵进行可视化,用imagesc
Part 5 循环语句,条件语句和函数
本节讲解编程中的程序结构和函数 这是一个for循环语句的例子 用矩阵,可以直接表示多个值 习惯于循环后打逗号,代码有缩进便于阅读,用end表示代码的结束。和写c代码相似,有分号打分号,无分号打逗号
上面是使用if语句的例子,和c是完全一致的使用quit或者exit可以使matlab退出
用wordpad自定义一个函数,如图所示 切换到路径下,或者用addpath加入搜索路径,可以使用自定义函数。 还可以定义有两个值的函数,一起输出两个值。注:自定义函数的用法,必须创建.m文件,且文件名和函数名称必须一致。
下面举个计算成本函数的例子
有这样一个数据集合,请计算他的成本函数 首先输入数据集合 然后输入自定义函数 直接计算结果Part 6 向量化
本节讲解如何使用计算机和软件自带的库来加速运算。将大量数据向量化,使用矩阵工具进行运算,可以借助机器大大加快处理速度。举一个数据向量化的例子
对于图上面的运算,可以抽象为两个向量
如果不用矩阵,直接运算的话,程序如下图左所示。用矩阵则如图右所示,更简单。
以上图中的运算为例子,如何快速的同步运算thelta,如何向量化,加速运算
仔细体会吧!