机器学习(第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+sqrt(10)*(randn(1,10000)); //-6加上根号10乘以以高斯随机变量
hist(w); //绘制直方图
hist(w,50);

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

移动数据

1、移动数据

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

2、加载和查找数据

pwd:显示当前所在路径
cd:表示改变路径
ls:查询当前目录下的文件/文件夹
load:加载文件
who:显示所有变量
whos:显示更详细的变量信息
clear:删除变量
save hello.mat v:会压缩
save hello.txt v -ascii:可读

v=priceY(1:10); //把princeY中的前10个元素给v
save hello.txt v -ascii; //把v以ASC2码的形式存储在hello.txt文件中

3、操作数据

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

数据计算

A*B:矩阵相乘
A.*B:A中各元素与B中对应的元素相乘
A.^2:A中各元素进行平方
1./A:对A中元素求倒数
log(A):求对数
exp(A):以e为底,以A为幂
abs(A):求绝对值
v+ones(length(v),1):对v的元素加1 =v+1
max(A):求A 的每一列的最大值
max(A,[],1):取每一列的最大值,1表示第一维度(列)
max(A,[],2):取每一行的最大值,2表示第二维度(行)
sum(A):矩阵所有数据之和
sum(A,1):每列求和,1表示第一维度
prod(A):数据乘积
ceil(A):向下取整
floor(A):向上取整
m=magic(3):得到一个3×3的幻方矩阵,幻方矩阵是任意行、列、对角线中的元素加起来都等于相同的值
flipud(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];
y1=sin(2pi4t);
plot(t,y1); %绘制sin图象
y2=cos(2
pi*4t);
hold on; %两个图象重叠,保持第一个图象不消失
plot(t,y2,‘r’); %r表示用红色显示cos图象
xlabel(‘time’); %x轴加上标签time
ylabel(‘value’); %y轴加上纵轴标签value
legend(‘sin’,‘cos’); %表示两条曲线内容
title(‘my plot’); %图象的顶部显示的标题
print -dpng ‘myPlot.png’; %将图象保存为一个文件
close; %关闭图象
subplot(1,2,1); 将图象分为1×2的格子,使用第一个格子
plot(t,y1);
subplot(1,2,2);
plot(t,y2);

在这里插入图片描述

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

A=magic(A)
imagesc(A); %可视化矩阵,不同颜色对应A矩阵中的不同值
imagesc(A),colorbar,colormap,colormap gray; %使用逗号连续调用函数

在这里插入图片描述

控制语句和函数

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 关键字,然后紧跟在 function 后面的是函数的声明,包括返回值,函数名称和参数,之后换行来实现具体的函数功能。

Octave的函数不需要显示的返回语句,Octave会将函数第一行声明的返回值返回给调用方,因此,我们在函数体中只需将最终的计算结果赋给定义的返回值,比如上面例子中的y。

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

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

也可以把函数写进文件中,然后加载实现函数。
进入octave后,cd到指定的目录下,这里我是把函数文件存在d盘下的文件中cd D:\app2018\octave
之后你可以用pwd打印出当前目录的路径看看是否是在该文件下。在该目录下新建一个文件名为“squareThisNumber.m”后缀是.m这样octave可以自动识别

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

5、矢量

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

例子:h(x) = a1x1 + a2x2 + a3x3 + …+ anxn = AX’(X的转置);
没有向量化之前可能会使用for循环的方式实现求和函数,但是转换成向量来做只需要一条语句就能实现;
p = A * X‘ ;
当对某个函数不清楚的时候,试试help {func name}

计算线性回归假设函数

在这里插入图片描述
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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值