Octave命令及语法教程1 - 数据的导入、存储、移动

Octave命令及语法教程1 - 数据的导入、存储、移动

今天讲一下Octave命令和语法,Octave与MATLAB语法基本一致,学一个即可。

Hello, Octave!

Octave基础

关于Octave的安装以及一些基础的命令的语法在之前已经写过,参考:Octave安装与使用

Octave命令与语法

先插播个小技巧,如果你不喜欢原来的Octave-版本号这种东西,可以通过如下命令改成任意你喜欢的:

octave:3> PS1('> ')
>

或者皮一下:

> PS1('我超帅> ')
我超帅> 

我还是选择不皮,毕竟帅的低调。

size()

size():返回矩阵的‘尺寸‘,实际是返回一个一行两列的矩阵,第一个元素表示行,第二个元素表示列,例如下面的A矩阵:

> A = [1 2; 3 4; 5 6]
A =

   1   2
   3   4
   5   6

> size(A)
ans =

   3   2

当然,size()还可以有第二个参数,这个看一下例子你就明白了,其实就是1返回行数,2返回列数。

> size(A,1)
ans =  3
> size(A,2)
ans =  2

length()

length():返回矩阵最大维度的大小。

> v = [1 2 3 4]
v =

   1   2   3   4

> length(v)
ans =  4

上面的参数是个向量,如果是个矩阵,我们以上面提到的A矩阵(3x2)为例看一下:

> length(A)
ans =  3

可以看出,length()返回行数列数中最大的那个,因此,length()多用于向量。

加载训练样本数据

这里可以像Linux命令行一样使用cd,ls,pwd等命令。首先我们去到我们的数据目录:

> cd /Users/vien/MachineLearning/Octave
> ls
sample.dat

然后用load来加载数据

> load sample.dat

> load('sample.dat')

who & whos

那引入了怎么查看呢?这里就需要用到who了,这个命令是查看当前Octave存储的变量

> who
Variables in the current scope:

A       ans     sample  v

可以看到,我们之前创建的Av,而sample就是我们刚刚导入的数据了,来看一下:

> sample
sample =

   1024      1
   2322      3
   4353      2

既然刚刚谈到了who,那就不得不再提一下whos了,这个会显示所有变量的详细信息,而不再仅仅是名字:

> whos
Variables in the current scope:

   Attr Name        Size                     Bytes  Class
   ==== ====        ====                     =====  =====
        A           3x2                         48  double
        ans         1x1                          8  double
        sample      3x2                         48  double
        v           1x4                         32  double

Total is 17 elements using 136 bytes

clear

clear是用来清除变量的,比如我们刚刚加载的sample

> who
Variables in the current scope:

A       ans     sample  v

> clear sample
> who
Variables in the current scope:

A    ans  v

当然,如果不加变量名,直接clear也是可以的,不过这样就清理了所有的变量。

(x:x)-部分截取

> w = [1;2;3;4;5;6]
w =

   1
   2
   3
   4
   5
   6

> v = w(1:3)
v =

   1
   2
   3

可以看到,这个就像python中的数组或者字符串截取一样,:前后分别是开始和结束的位置,我们把w向量取第一到第三个元素然后赋值给v

数据导出存储

上面谈到了导入,现在说一下导出,导出主要用到save

> save hello.mat v
> ls
hello.mat   sample.dat
>

三部分组成,首先是save,然后第二个跟文件名,第三个是变量名。我们再将它读进来:

> clear
> who
> load hello.mat
> whos
Variables in the current scope:

   Attr Name        Size                     Bytes  Class
   ==== ====        ====                     =====  =====
        v           3x1                         24  double

Total is 3 elements using 24 bytes

>

先清空,避免之前的干扰我们判断是否为刚刚导入的。

这里可能有疑问,刚刚导入是.dat,而导出却用了.mat,刚刚导入变量名跟文件名相同,这导出.mat后再导入居然是导出时候的变量名v。其实这两个文件是不一样的,回到我的命令行(非Octave)下,我们去查看一下刚刚那两个文件。

➜  Octave pwd
/Users/vien/MachineLearning/Octave
➜  Octave ll
total 16
-rw-r--r--@ 1 vien  staff  145 May  5 11:09 hello.mat
-rw-r--r--  1 vien  staff   21 May  5 10:51 sample.dat
➜  Octave cat hello.mat
# Created by Octave 5.1.0, Sun May 05 11:09:00 2019 CST <vien@Vien-MacBook-Pro.local>
# name: v
# type: matrix
# rows: 3
# columns: 1
 1
 2
 3

➜  Octave cat sample.dat
1024 1
2322 3
4353 2
➜  Octave

我们明显可以看到,.dat文件只有一堆排列整齐的数据,而.mat还附加了一些别的信息,比如变量名、类型、行数、列数等信息。其实,这个后缀是什么不重要,只是save命令就是会附加一些信息,你也可以叫.dat

当然,我们也可以直接存成普通的形式:

> save hello.txt v -ascii

再到Mac命令行下来看一下:

➜  Octave cat hello.txt
 1.00000000e+00
 2.00000000e+00
 3.00000000e+00

存成了科学计数法,但很显然,附加的信息没有了。再提醒一下,文件名后缀不重要,之所以存成了这种形式是因为后面加了-ascii

元素索引

> A = [1 2; 3 4; 5 6]
A =

   1   2
   3   4
   5   6

> A(3,2)
ans =  6

上面这个就是选取A矩阵第三行第二列的元素,这个不过多解释了。我们也可以选择一整行或者一整列,像下面这样:

> A(2,:)
ans =

   3   4

> A(:,2)
ans =

   2
   4
   6

:表示当前行或者列所有元素,当然,有的小伙伴就开始调皮了,你要非要这么玩,也没人拦你,只是比只输入A复杂了一点,但结果跟只输入A一样:

> A(:,:)
ans =

   1   2
   3   4
   5   6

还有的小伙伴不走寻常路:我只要1、3行。也是可以的:

> A([1 3], :)
ans =

   1   2
   5   6

可以看出来,Octave还是很强的,满足你各种无理的要求,就是这么宠着你、惯着你。

元素赋值

> A(:,2) = [10; 11; 12]
A =

    1   10
    3   11
    5   12

> A(3,2) = 0
A =

    1   10
    3   11
    5    0

还可以这样玩,新加一列:

> A = [A, [100; 101; 102]]
A =

     1    10   100
     3    11   101
     5     0   102

A(:)可以将所有的元素放到一列:

> A(:)
ans =

     1
     3
     5
    10
    11
     0
   100
   101
   102

还可以将矩阵拼接

> A = [1 2; 3 4; 5 6]
A =

   1   2
   3   4
   5   6

> B = [11 12; 13 14; 15 16]
B =

   11   12
   13   14
   15   16

> C = [A B]
C =

    1    2   11   12
    3    4   13   14
    5    6   15   16

> C = [A; B]
C =

    1    2
    3    4
    5    6
   11   12
   13   14
   15   16

其中C = [A B] 也可以写成 C = [A, B],结果是一样的。

总结

希望这节课的内容 能让你明白 在 Octave 中 怎样用几句简单的命令 很快地对数据进行移动 包括加载和储存一个向量 或矩阵 加载和存储数据 把矩阵放在一起 构建更大的矩阵 用索引对矩阵某个特定元素进行操作等等

猜你喜欢
什么是机器学习
阅读 3861

机器学习,简单地说就是拟人。人工智能包含机器学习,而机器学习又包含深度学习。机器学习在我们的生活中有很多的应用,像自动驾驶、搜索引擎、谷歌翻译、垃圾邮件识别等等。

Octave命令及语法教程3 - 图像绘制与数据可视化
阅读 4777

当开发学习算法时 图像可以让你更好地理解算法的内容 检查算法是否正常运行 是否达到了算法的目的 例如绘制损失函数J(θ)可以帮助确认梯度下降算法是否收敛 Octave有非常简单的工具用来生成大量不同的图

Mac如何安装MATLAB破解版
阅读 7304

MATLAB是matrix和laboratory的组合,意为矩阵实验室,是一款特别好用的数学软件,尤其是对机器学习、人工智能。今天介绍一下Mac下安装MATLAB破解版教程。据说Mac上的matlab更丝滑。

Mac、Windows、Ubuntu(Linux)如何下载安装Octave
阅读 6172

Octave是一款免费的开源软件,或者说Octave是一门科学编程语言。Octave有强大的数学导向语法,内置绘图和可视化工具,可以运行在GNU / Linux,macOS,BSD和Windows上,与Matlab脚本兼容。

Octave命令及语法教程2 - 数据的计算(矩阵乘法、求逆、转置)
阅读 5869

上次我们学会了在Octave中如何加载或存储数据、如何把数据存入矩阵,等等。这次我们谈谈Octave中如何对数据进行运算,包括矩阵乘法、求逆矩阵、求矩阵转置,以及一些求和、求最大值等基础函数。