Advertisement

机器学习(第5章)——Octave

阅读量:

Octave

基本操作

1、语法

~:取反
&&:与
%:注释
||:或
XOR:异或
PS1(‘>>’):省略前面的octave前缀
format long:让字符串显示默认位数
format short:默认输出打印少量的小数点后位数

2、变量

a=3 %打印a=3
a=3; %阻止打印,后车后不打印

a=pi;
a
a=3.1416

disp(a);
3.1416

disp(sprintf(‘2 decimals:%0.2f’,a))
2 decimals:3.14

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

V=[1 2 3] %行向量
V= 1 2 3

V=[1;2;3] %列向量
V= 1
2
3

V=1:0.1:2 %从1每次步长0.1一直增加到2
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 %从1每次默认步长1增加到6
V=1 2 3 4 5 6

ones(2,3) %快速生成矩阵
ans=
1 1 1
1 1 1

w=zeros(1,3)
w=
0 0 0

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

w=rand(1,3) %形成1×3的矩阵,数是介于(0,1)之间的随机数
w=
0.9147 0.1435 0.8496

使用 randn 函数生成 1×3 矩阵的元素遵循均值为 0 和方差为 1 的高斯分布。 计算 w 值等于 -6 加上平方根 10 的结果乘以 randn 函数生成的 1×N 块高斯分布随机数(其中 N=默认情况下可选参数)。 绘制 w 值的直方图。 在绘制 w 值的直方图时设置 bins 数量为 50。

eye(4); //生成4*4单位矩阵

移动数据

1、移动数据

size:矩阵的大小,行和列
length:最大维度的大小,行列的最大值

2、加载和查找数据

pwd获取当前位置;cd切换工作目录;ls列出当前目录中的文件和子目录;load导入指定文件内容;who列出工作空间中的所有变量名;whos提供各变量的详细信息列表;clear清除工作空间中的所有变量;save hello.mat v将数据保存为压缩格式到hello.mat文件中;save hello.txt v -ascii将数据保存为ascii格式到hello.txt并便于查看

var = ListOfFirstTenElements; //将princeY中的前十个元素赋值给变量v
Export[hello.txt, var, "ASCII-2 format"]; //将变量v以ASCII-2编码格式输出到文件hello.txt中

3、操作数据

在这里插入图片描述
在这里插入图片描述

数据计算

将A与B进行矩阵乘法运算得到结果A*B:将A的行元素与B的列元素对应相乘后再累加得到结果A.*B:对A中的每个元素分别与B中对应的元素相乘得到结果A.^2:对A中的每个元素取平方运算得到结果1./A:计算并取倒数操作得到结果\frac{1}{A}:对向量v中的每个元素加1运算得到结果v+1:对向量v执行一维索引操作加1处理得到结果v+\text{ones}(\text{length}(v), 1):计算并提取向量v的最大值及其位置信息得到结果\text{max}(A):对二维数组A的所有行提取最大值信息并返回行向量得到结果\text{max}(A, [], 2)(其中第二个参数表示第二维度即行):计算二维数组A的最大值信息并返回二维索引位置信息

a=[1 15 2 0.5]
a=1.00000 15.00000 2.00000 0.50000
max(a)
ans=15
[val,ind]=max(a)
val=15 %最大值
ind=2 %该最大值的索引

a<3
ans=1 0 1 1; %判断a中是否小于3,小于3则记为1,否则记为0

find(a<3)
ans=1 3 4; %返回小于3的元素的索引

A=magic(3)
A=
8 1 6
3 5 7
4 9 2

[r,c]=find(A>=7) %大于等于7的行和列
r= %行
1
3
2
c= %列
1
2
3

数据绘制

时间变量t从0开始以0.01的步长递增至小于等于0.98;
计算并绘制正弦曲线图像;
计算并绘制余弦曲线图像;
将当前图形保持在屏幕上;
以红色绘制余弦曲线;
x轴标签设置为时间;
y轴标签设置为值;
添加图例标识正弦和余弦曲线;
图表标题设置为my plot;
将图表保存至myPlot.png文件中;
关闭当前绘图窗口;
将图形区域划分为一行两列的第一块子区域并激活该区域;
绘制正弦函数图像;
切换到一行两列的第二块子区域并激活该区域;
绘制余弦函数图像;

在这里插入图片描述

axis([0.5 1 -1 1]); %设置X轴的范围为(0.5,1),Y轴的范围是(-1,1)
clf; %清除图象

A经过magic函数处理为A。
imagesc(A),用于可视化矩阵A的不同值。
通过comma连接的方式依次显示图像、添加色标、设置colormap为灰色。

在这里插入图片描述

控制语句和函数

1、for语句

这些语句采用的方式与C语言相似;其区别在于大括号的作用采用了end。

复制代码
    >>for i=1:10,
    		v(i)=2^i;
    	end;

结果:
v=
2
4
8
16
32
64
128
256
512
1024

2、while语句

复制代码
    >>i=1;
    >>while i<=5,
    		disp(v(i));
    		i=i+1;
    	end;

或者

复制代码
    >>i=1;
    >>while true,
    		disp(v(i));
    		if i>5,
    			break;
    		end;
    		i=i+1;
    	end;

结果:
2
4
8
16
32
64

3、if语句

复制代码
    >>i=1;
    >>while true,
    		v(i)=999;
    		i=i+1;
    		if i==6,
    			break;  %当i到达6就用break中止while循环
    		end;   %结束if
    	end;    %结束while

结果:
999
999
999
999
999
64
128
256
512
1024

复制代码
    >>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

4、函数

复制代码
    >>function y=squareNum(x)
    		y=x^2;
    	end;
    >>squareNum(3)
    ans=9

在Octave语言环境中定义一个函数时需采用function关键字随后紧跟在其后方即为函数的具体声明这一过程包含了返回值函数名及其参数参数之间则以括号分隔最后通过换行的方式实现具体的功能

在Octave中,默认情况下函数无需显式地返回值。其默认行为是将第一条声明作为函数输出的结果传递给调用者。因此,在编写函数体时,我们只需将计算所得的结果赋值给预先定义好的输出变量即可。例如,在之前的示例中所示的情况

还有一点需要说明的是,在Octave中,函数可以返回多个值:

复制代码
    >>function [y1,y2]=calVal(x)
    		y1=x^2;
    		y2=x^3;
    	end;
    >>[a,b]=calVal(3)
    a=9
    b=9

也可以将函数保存至文件中后导入运行。
切换至指定工作目录下,在此位置存储了这些函数。
检查当前目录路径是否与该存储位置一致。
在该子目录下创建一个命名为"squareThisNumber.m"并带有".m"扩展名的新文件夹,并确保其扩展名符合Octave的要求。

注意:文件名要和函数名保持一致。

5、矢量

有道时候方程向量化,计算起来会更加高效。
A = [a1;a2;a3;…;an]
X = [x1;x2;x3;…xn]

函数h(x)被定义为a₁x₁ + a₂x₂ + a₃x₃ + … + aₙxₙ,并等于A乘以X转置的形式;
在未向量化的情况下,通常会采用for循环来实现求和功能;而一旦向量化后,则只需一条指令即可完成;
计算p的过程则简化为A乘以X转置;
遇到不熟悉的功能时,请参考帮助文档获取更多信息.

计算线性回归假设函数
在这里插入图片描述

1、octave实现
未向量化

复制代码
    prediction=0.0
    for j=1:n+1,
    	prediction=prediction+theta(j)*x(j)
    end;

向量化

复制代码
    prediction=thata'*x;

2、C++实现
未向量化

复制代码
    double prediction=0.0;
    for(int j=0;j<=n;j++)
    	prediction+=theta[j]*x[j]

向量化

复制代码
    double prediction=theta.transpose()*x;

全部评论 (0)

还没有任何评论哟~