b>在上一篇BLOG中,我们了解了一些Octave的基础操作,现在就让我们着眼数据,康康Ovtave中是如何高效地操作数据的吧。

矩阵大小的获取

当我们想处理一个矩阵数据,我们首先要知道这个矩阵的大小,也就算行数和列数,那如何处理呢?其实很简单, 对于一个矩阵 A ,直接使用size(A)就可以了,输出的内容也是一个一行两列的矩阵,第一列为行数,第二列为列数:

Oct1.png

如果你只想知道矩阵 A 的行数,那你可以通过size(A, 1)来实现,同理如果你只想知道矩阵 A 的列数,你也可以通过size(A, 2)来实现:

Oct2.png

而对于向量 v (不论是行向量还是列项列),想知道它们的维数,都可以用length(v)来实现:

Oct3.png

而对矩阵 A 使用 length的话,返回的会是行数和列数中最大的那一个:

Oct4.png

矩阵的访问和拼接

让我们先看看如何访问矩阵的一些数据。比如我想访问矩阵 A 的第 x 行第 y 列的元素,只要使用A(x, y)即可:

Oct16.png

而我们也可以使用‘:’来表示改行或该列的所有元素,比如第x行所有元素A(x, :),第y列的所有元素A(:, y)

Oct17.png

还有一些比较冷门的操作,比如A([x1, x2, ……,xp], :)代表访问x1, x2, ……,xp行的所有元素,对列也同理:

Oct18.png

而以上的这些操作都可以进行赋值计算,比如我想更改矩阵的第二列为[10 11 12],只要A(:, 2) = [10; 11; 12]即可:

Oct19.png

然后再来让我们看看矩阵的拼接操作。我们也可以在原有矩阵上补上一列[100 101 102],只要进行A = [A [100; 101; 102]]:

Oct20.png

还有一个很常用的小技巧是对于矩阵 A,我们可以使用A(:)来把所有的元素变成一个列向量:

Oct21.png

类似于给矩阵补上一列或者一行,我们可以把两个矩阵横向或者纵向拼接。

对于具有相同行数的矩阵 A 和矩阵 B ,我们可以使用[A B]来实现横向的拼接:

Oct22.png

对于具有相同列数的矩阵 A 和矩阵 B ,我们可以使用[A; B]来实现横向的拼接:

Oct23.png

文件的输入输出

接下来我们来一同学习如何让Octave在我们的电脑中加载数据的存储数据,换句话说就算如何进行文件输入输出。

要实现文件输入输出,实现我们要将目录更改到我们数据所在的位置,通过指令pwd可以知道现在所在的目录位置,再通过命令cd ‘文件路径’将目录切换到我们的数据所在的文件夹,最后可以用指令ls检视我们文件夹内的文件:

Oct5.png

其中我们featuresX文件内是六行特征值分别代表房子大小和房间数量,priceY里是最后的售价:

Oct6.png

那我们怎么把这两个文件里的数据读入到Octave中呢,其实很简单,比如我们要读入featuresX.dat文件内的数据,我们可以用命令load featuresX.dat或者load('featuresX.dat')即可,这两个是等价的:

Oct7.png

这样我们就以文件名命名了一个变量,其值就是我们文件里的内容,也可以直接进行访问:

Oct8.png

那我们如何将我们的变量存储起来呢?

如果我想以二进制的形式保存我们的矩阵 A,保存到hello.mat中吗,那么我们可以使用命令 save hello.mat A;,这样我们就得到了我们想要的二进制文件:

Oct12.png

后续也可以直接读取(clear是清除所有变量的意思,后面会讲解):

Oct13.png

如果你想保存成我们看得懂的形式,就可以使用save hello.txt A ascii,这样保存的就是我们正常的十进制数据了:

Oct14.png

Oct15.png

变量的管理

有时我们会忘记我们之前使用了那些变量,这时我们就可以使用命令who来查询我们所有使用过的变量名:

Oct9.png

同时,我们还有whos指令,能够更加详细地看到变量的情况,比如数据类型,占用空间等等:

Oct10.png

而如果你想清楚某个变量释放空间的话,也只要使用clear语句就可以了,对比清除前后的who我们发现要清除的变量确实被清除了:

Oct11.png

而直接使用clear后面不添加变量会清除所有的变量并释放空间。

结语

通过这篇BLOG,希望你现在掌握了怎样构建矩阵,也学会了怎样把矩阵拼接到一起,更重要的是文件的输入输出。在之后的BLOG里,我们会继续学习一些复杂的计算,同时开始用Octave实现我们所学的学习算法。最后希望你喜欢这篇BLOG!

Last modification:March 4th, 2021 at 03:43 am
If you think my article is useful to you, please feel free to appreciate