吴恩达 octave
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,如何向量化,加速运算