Machine Learning?Training Machine!④.

游勇军
2023-12-01

Octave简单知识

![在这里插入图片描述](https://img-blog.csdnimg.cn/20181030212910693.gif)
对于机器学习的原型创建来说,我们并不推荐使用Java或是python这些细化的编程语言,针对机器学习而优化的Octave将能够帮助我们迅速建立原型并进行一定的测试,在测试成功后再使用Java等语言进行实现将很大的提高效率,下面介绍一些简单的Octave编程知识,安装Octave后启动CLI界面窗口进行编程:

简单的算术和逻辑运算

如加减乘除这一类的运算可以直接获得结果ans的回显:
1 * 2 [Enter]
ans = 2
1 + 2 [Enter]
ans = 3
...所有的算术运算均可类似的获得结果

对于逻辑运算Octave支持与或非等常见的逻辑操作语句:

1 ~= 2
ans = true
true && false
ans = false
true || false
ans = true
                        #在Octave中使用“#”来进行注释
#可以使用 PS1( '任意你喜欢的提示符' ) ; 来切换命令行提示符,如下:
PS1('>> ');
>>                         

Octave中的变量

Octave中的变量不需要进行变量类型的设置,声明方式为 变量名+值(加上;不回显)
a = 123.23;
b = 'Hello, Octave world!'
b Hello, Octave world!

使用disp语句输出,如果你曾经学习过其他语言可通过disp(sprintf( ’ ’ , …))的方式进行格式输出:

disp(sprintf('\t hello guys!\n'))
	hello guys!
	#此处有一空行

创建矩阵型变量
按照 矩阵名 [行;行;…]的形式创建矩阵:

> A = [1 2 ; 3 4; 5 6]
A =
   1   2
   3   4
   5   6
> B = [2 : 0.1 :3 ]
B =
 Columns 1 through 10:
   2.0000   2.1000   2.2000   2.3000   2.4000   2.5000   2.6000   2.7000   2.8000   2.9000
 Column 11:
   3.0000
#还可以使用zeros(m,n),ones(m,n)创建值全部为0或者1的矩阵

一些常用矩阵的创建:

rand(m,n)         #m*n的随机矩阵
randn(m,n)        #满足正态分布(高斯分布)的m*n矩阵
eye(n)            #生成n维单位向量I
help eye          #可以查询某一条命令的相关信息,按q退出

矩阵操作:

[A,B]                                 #两个矩阵列并放;
[A:B]                                 #将两个矩阵行并放;
A( : )                                #将A转换为列向量
*                                     #表示矩阵相乘法;
.*                                    #矩阵各个元素相乘;
./                                    #表示常数除以矩阵(或者向量);
.^                                    #矩阵各个元素求幂;
log(),exp(),abs(),sum(),prod(),floor(),ceil()都可以直接用于矩阵和向量(全体元素);
sum(A, 1)/sum(A, 2)                   #返回列/行的和;
max()/min()                           #将返回每列最大或者最小值;
max(A, [], 1)/max(A, [], 1)           #返回列/行最大值;
[r, c] = max(1<Mat)                   #将返回矩阵最大值索引;
max(A, B)                             #返回两个矩阵最大和最小数值;
[r, c] = find(1<Mat)                  #将返回符合条件的索引。

数据的选取处理

下面直接以代码的形式进行说明:
size(A,n)		  #显示矩阵A第n维的数目
leng(A)           #显示矩阵A的最长一维的元素个数
who               #显示当前工作空间当中的全部变量
whos              #可选项,显示详细信息
who -filename     #可选项,显示当前目录下的filename文件的信息
pwd               #显示当前工作目录
                  #ls、cd与Unix系统当中一样
load filename     #将文件加载到当前的工作空间中
clear 变量名(没有参数表示全部)#从当前工作空间中删除指定的变量
A(m : n)          #取矩阵A的m到n行
A 逻辑表达式       #对矩阵的每一个元素做逻辑运算
A < 3
save 文件名 变量名 #将变量存到指定的文件当中

作图相关

在Octave编程当中,我们时不时的需要绘制图像来使我们的过程更加的易于理解,下面展示一些相关的操作:
plot(x,y)                     #以x为横轴,y为纵轴绘制图像
hold on                       #在同一张图上重叠输出
Xlabel('你的命名')
Y...
legend(第一条线的名字,第二条线的名字...)
tltle                         #命名图像
print                         #将图像等打印输出到文件中
fingure(n)                    #给图像编号
imagesc(A)                    #基于A矩阵进行图形化以显示数据的一些特征
colorbar                      #显示颜色图对应的值大小
subplot(m,n,p)                #生成m*n个格,选中第p个进行绘图
axis(a1 b1 a2 b2)             #设置x,y轴的刻度

控制语句----for,while,if

在Octave中同样有类似与其他编程语言的循环控制语句和条件测试语句,例子如下:
for i = m:n ,                   #需要注意 , 的使用
   disp(i);                     #缩进没有特别的意义,只是为了程序结构清晰
end;                            #使用end来结束语句,对所有循环控制均是如此

i = 5;
while i > 0 ,
    disp(i*100);
    i--; 						#不要忘了循环条件的变化控制
end;

if i > 10,
    disp('good!');
    elseif i > 5,				#注意elseif是连在一起的
        disp('better!');
    else 
    disp('bad!');
end;							#同样以end结束

Octave中的函数的声明与调用

与一般的编程有所不同的是,Octave的函数是被单独写成 **.m** 文件进行调用的,文件名与函数名相同,我们建议使用windows下的wordpad而不是notepad进行编写以便控制程序的缩进:
function [可选返回值列表] = 函数名(参数)
		语句
例如:
function [y1,y2] = test(x)      #可以看到Octave中的函数返回值支持多个数据
	y1 = x^2;
	y2 = x^3;
调用测试:
x = 5;
[y1,y2] = test(x);				#可以这样调用的前提是这个函数文件在你的当前工作目录下
						   		#使用addpath('G:\Octave');这样的语句添加工作目录
可以看到y1 = 25, y2 = 125

编程小贴士

不管是对于Octave还是其他的编程语言,基本上都有很多成型的函数库,这样的函数往往是优化的很好,效率很高的,我们可以调用这些语句来对我们的代码进行删减同时提高它的运行效率;
针对于机器学习中的问题,我们可以较多的使用向量化的方法来进行运算的简化并提高运算速度,关键在于设计转化方式。
 类似资料:

相关阅读

相关文章

相关问答