首先键入一个矩阵A:
这是一个3行2列的矩阵,Octave中的size命令可以返回矩阵的维度。
实际上size()所返回的是一个 1 x 2的矩阵,所以可以把A的大小作为一个矩阵来存放,这个矩阵的维度是 1 x 2 。
由于现在B是一个1 x 2的矩阵,如果用size()去返回B的大小,会得到一个1 x 2的矩阵,矩阵的两个元素包括了矩阵B的维度。
也可以输入size(A,1),这将返回矩阵A的第一维度的大小,也就是A矩阵的行数,同样输入size(A,2)就会返回矩阵A的第二维度的大小,也就是A矩阵的列数。
现在键入一个向量V,V = [1 2 3 4],然后输入length(V),会返回最大维度的大小:
也可以输入length(A),因为A是一个3 x 2的矩阵,较大的那一个维度是3,所以该命令会返回3。
但通常是对向量使用length命令,而不对矩阵使用length命令,因为这容易造成误解。
下面来看看如何在文件系统中加载和查找数据?
当打开Octave时,通常已经在一个默认路径中,它是Octave程序的安装路径,使用pwd命令可以查看Octave当前所处路径:
用cd命令,表示改变路径,例如我将路径改变为我的一个文件夹内,然后再键入pwd,可以看到已经修改成功:
如果输入ls,ls是来自Unix和Linux的命令,ls命令将列出桌面路径。
现在我的当前路径里面已经有一个文件,featuresX.txt。
如果想要把数据读入Octave,只需要用load命令来载入featuresX.txt,这样就可以加载featuresX.txt了
当然也可以用load('featuresX.txt'),这与上面的命令的效果是相同的,只是把文件名写成了字符串的形式,在Octave中使用单引号可以表示字符串。
另外who命令,可以显示Octave中的所有变量。也就是说who命令可以显示当前Octave在内存中储存的所有变量。
可以看到featuresX已经在里面了,也说明之前载入成功了。所以现在可以输入featuresX来显示featuresX中的数据。
再输入size(featuresX),可以看到这是一个9 x 2的矩阵:
现在who可以显示出当前工作空间中的所有变量,还有一个命令whos能显示更详细的变量信息,例如变量的维度,占用多少字节的内存空间以及它们的数据类型:
如果想要删除某个变量,可以使用 clear 变量命令,然后再输入whos命令,就可以查看该变量是否已被删除。
另外,怎么储存数据呢?
首先,我们先载入一个在当前路径下的一个priceY.txt文件,然后我们先来看一下这个文件长什么样子。
我们设变量 v = priceY(1:10),这表示的是将向量priceY的前10个元素赋给v。
如果想把这些数据存入硬盘,那么可以用 save file1.mat v 命令,这个命令会将变量v保存为一个file1.mat的文件,存在当前路径中。
现在如果想要清除所有变量,可以直接输入clear命令删除工作空间中的所有变量。再输入whos可以看到,工作空间已经被清空了。
但如果再载入file1.mat文件,现在变量v又可以被读取了,因为这个变量之前被存入了file1.mat中。刚才输入的 save file1.mat v 命令将数据储存为了二进制的格式,或者说是更压缩的二进制格式。如果v的数据量很大,那么它被压缩的程度也更大,它的占用空间也会更小。如果你想把数据储存成人类能看懂的形式,可以输入 save file1.txt v -ascii ,这样就会把数据储存成文本文档或者说用ascii编码的文档。
输入了这个命令以后,这个文档就会出现在pwd所显示的那个路径里。现在将这个文档打开,可以看到这个文档存着v向量。
这就是读取和储存数据的方法。
现在来看一看如何操作数据
首先还是设置一个A矩阵:
现在来看看索引,比如输入A(3,2),这将索引到A的第三行第二列的元素:
也可以输入A(2,:)来获得第二行的所有元素,因此冒号表示该行或该列的所有元素。
类似地,如果输入A(:,2),这将返回A的第二列的所有元素:
你可以在运算中使用这种复杂的索引,例如下面这种方式:
这样可以得到A中第一个索引值为1和3的所有元素,也就是说可以得到A的第一行和第三行中所有列的元素。不过这些复杂的索引操作,你不会经常用到。
再看看我们还能做些什么?输入A(:,2)来获得A的第二列。也可以通过这种方法来赋值,取A的第二列,将它的第二列赋值为10 11 12。
这样做的话,实际上是取出了A的第二列,用列向量[10;11;12]取而代之。
接下来,把A设为 [A,[100;101;102]],这样做的结果是在A的右边附加了一列新的列向量。
此时可以看到A的维度已经变为了3行3列。
还有一个有时会用到的有用的小技巧。如果你像下面这样,只是输入A(:),这是一个很特别的语法,意思是把A中的所有元素放入一个单独的列向量。
这样我们就得到了一个 9 x 1的向量,这些元素都是由A中的元素排列起来的。
再来看几个例子:
假如把A重新设为[1 2;3 4;5 6],将B设为[11 12;13 14;15 16]。现在,新建一个矩阵C。令C = [A B]意思是把这两个矩阵结合在一起。矩阵A在左边,矩阵B在右边。
还可以设C = [A;B],这里的分号表示,把分号后面的矩阵放到前一个矩阵的下面,也就是将矩阵A和矩阵B进行上下合并,A在上面,B在下面,C现在就是一个 6 x 2的矩阵。
简单的说,分号的意思就是换到下一行,所以A先被放到C中,然后换到下一行,再将B放进去。
另外[A B]和[A,B]是一样的。