MATLAB/Octave 学习笔记
现在主流的机器学习、人工智能的语言非 Python 莫属,但是在理解深度学习算法原理,比如梯度下降法、正规方程法等时, MATLAB 在矩阵计算、可视化等方面具有天然的优势。因此,本篇文章主要讲述 MATLAB 的基本使用方法,并运用于简单的机器学习算法之中。
运算符
一些运算符(如加减乘除等)和主流编程语言(如 C++、Python )基本一致,故省略。在这里介绍一些与主流编程语言不同的运算符:
~=
这类似于主流编程语言中的!=
,如1~=2
返回 true ,而1~=1
返回 false ;xor
这类似于^
,表示异或运算,如xor(1,0)
返回 1。
变量
MATLAB 和 Python 一样,定义变量时不需要声明数据类型。同时 MATLAB 和 Python 一样,也具有编译器和解释器。在 MATLAB 的解释器中输入 a = 3
,会输出 a = 3
,但假如在输入后加一个分号,如 a = 3;
,就不会输出,只执行赋值操作。
MATLAB 也有不同的数据类型,如整数、浮点数、字符串等,可以通过类似于 a = 3
,a = 3.14
,a = 'hello world'
的语句来定义不同数据类型的变量。
输入输出
MATLAB 中,输出的实现是 disp
命令,可以使用 disp('hello world')
来实现 MATLAB 的第一个程序,也可以使用 disp(a)
来输出变量 。如果熟悉 C/C++ ,可以使用 sprintf
函数来生成格式化的字符串,如 sprintf('a: %.2f',a)
,将返回一个保留两位小数的,前面带有 a:
的格式化字符串,然后可以使用 disp
命令来输出:如 disp(sprintf('a: %.2f',a))
。格式化的规则和 C/C++ 的规则一模一样。
使用 format long
命令,可以让浮点数显示的默认位数变大。使用 format short
命令,可以让浮点数显示的默认位数变小。
向量和矩阵
MATLAB 的一个强大的功能就是其将矩阵作为一个数据类型,并且内置了矩阵的各种运算。我们可以在 MATLAB 中很方便的进行矩阵的计算。
用 A = [1 2;3 4;5 6]
可以定义一个三行两列的矩阵A,如下:
分号可以开启下一行,每一行都用空格来隔开元素。同样的方法,可以用 v = [1 2 3]
来定义一个行向量,用 v = [1;2;3]
来定义一个列向量,如下:
还可以用类似于 Python 中 range
的形式来定义行向量,比如 v = 1:0.1:2
就是从1开始,步长为0.1,一直到2(包括2)的所有数构成的行向量:
也可以省略步长,缺省值为1,例如 v = 1:6
就得到1到6的行向量。
ones(2,3)
是用来生成全为1的2行3列的矩阵,如果是 2*ones(2,3)
就生成全为2的2行3列的矩阵:
用 zeros
可以生成0矩阵,用法和上面一样:
用 rand
可以生成随机数矩阵,其中每个数都介于0到1,用法和上面一样:
用 randn
可以生成正态分布的随机数矩阵,也就是数的均值为0,标准差或者方差为1:
用 eye
来生成单位矩阵,也就是对角线元素为1,其余元素为0的方阵:
用 size
函数返回矩阵的大小,返回值是一个1行2列的矩阵,第一个元素表示行数,第二个元素表示列数:
也可以用 size(A,1)
直接返回A的行数,用 size(A,2)
直接返回A的列数。
可以用 length
命令返回矩阵较大的维数。若 A = [1 2;3 4;5 6]
,则 length(A)
为3。但一般这个命令用于向量,可以得到向量的维数。
文件的读取与存入
load
命令可以读取当前目录下的文件,并将其转化成矩阵。例如下面的 test.txt
文件是这样的:
用 load("test.txt")
读取,会产生一个名为 test
的变量:
可以用 who
命令列举出当前 MATLAB 中全部的变量,用 whos
显示详细信息:
可以用 clear(test)
来清除变量test
,用 clear
来清除所有变量。
用 save ans.mat test
可以将变量 test
的数据存入 ans.mat
文件之中,并保存到当前路径。文件名和变量名可以随意替换。需要注意的是,这个文件中变量以二进制存储,而不是存储为文本文档,但还是能进行 load
读取操作。如果需要存为文本文档,使用 save ans.txt test -ascii
命令。