开始使用Octave

开始使用Octave

Octave是一个开源的科学计算以及数值分析的工具,在一定程度上,它与MATLAB语法兼容。

那位要问了:为什么不直接用MATLAB呢?因为MATLAB贵啊!

数值计算

计算数值很简单,只需要输入需要的表达式就可以了:

>> 5 + 5
ans =  10
>> 5 / 2
ans =  2.5000

或者调用一些函数:

>> 2^2
ans =  4
>> sqrt (4)
ans =  2

敲入变量名即可查看变量的值。首先创建两个变量:

>> v = 1 + 3;
>> x = v * 2;

在语句后面加上;可以不把表达式的值立刻显示出来,我们知道v值为4且x值为8。下面分别查看它们的值:

>> v
v =  4
>> x
x =  8

也可以使用disp命令:

>> disp (v)
 4
>> disp (sprintf ('The value of v is %.2f', v) )
The value of v is 4.00

查看工作区域中所有的变量,可以使用who或者whos命令,其中whos显示的信息更加详细一些:

>> who
Variables in the current scope:

ans  v    x

>> whos
Variables in the current scope:

   Attr Name        Size                     Bytes  Class
   ==== ====        ====                     =====  =====
        ans         1x1                          8  double
        v           1x1                          8  double
        x           1x1                          8  double

Total is 3 elements using 24 bytes

删除变量可以使用clear命令,%表示注释:

>> clear x  % 删除 x
>> clear    % 删除所有变量

使用format修改小数点后位数:

>> format short
>> pi
ans =  3.1416
>> format long
>> pi
ans =  3.14159265358979u

逻辑运算

逻辑运算与C语言很相似:

>> 1 == 2   % 比较是否相等
ans = 0     % 假
>> 1 ~= 2   % 比较是否不相等,这里符号与C语言不太一样
ans =  1    % 真
>> 0 && 1   % 与
ans = 0
>> 0 || 1   % 或
ans =  1

创建向量与矩阵

创建一个向量:

>> v = [1 2 3]
v =

   1   2   3

创建一个矩阵:

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

   1   2
   3   4
   5   6

创建特殊的矩阵:

>> B = ones (2, 3)  % 创建元素值为1,维度为2 x 3的矩阵
B =

   1   1   1
   1   1   1

>> zeros (2,3)      % 创建元素值为0,维度为2 x 3的矩阵
ans =

   0   0   0
   0   0   0

>> rand (2,3)       % 创建元素值为随机数,维度为2 x 3的矩阵
ans =

   0.667607   0.340230   0.020027
   0.713828   0.791409   0.713673

可以创建单位阵:

>> eye (3)
ans =

Diagonal Matrix

   1   0   0
   0   1   0
   0   0   1

查看矩阵的维度:

>> A
A =

   1   2
   3   4
   5   6

>> size (A)
ans =

   3   2

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

size()函数返回矩阵的维度,1维度显示矩阵的行数,2维度显示矩阵的列数。

length()函数会返回向量的长度,或者矩阵的最大维度:

>> v
v =

   1   2   3

>> length (v)   % 返回向量的元素数量
ans =  3
>> B
B =

   1   1   1
   1   1   1

>> length (B)   % 由于矩阵B的是2 x 3矩阵,所以返回大值 3
ans =  3

矩阵中数据的操作

查看A矩阵中第2行第2列的数值:

>> A (2,2)
ans =  4

获取矩阵A的某行或者某列:

>> A
A =

   1   2
   3   4
   5   6

>> A (:,2)      % 获取A的第2列
ans =

   2
   4
   6

>> A (3,:)      % 获取A的第3行
ans =

   5   6

>> A ([1,3],:)  % 获取A的第1,3行
ans =

   1   2
   5   6

将A中所有元素组成一个向量:

>> A (:)
ans =

   1
   3
   5
   2
   4
   6

合并矩阵:

>> A
A =

   1   2
   3   4
   5   6

>> C = ones (2,2);
>> A = [A ; C]              % 将C合并到A的下方,并且将结果赋值给A
A =

   1   2
   3   4
   5   6
   1   1
   1   1

>> A = [A, [1; 2; 3; 4; 5]] % 将[1;2;3;4;5]合并到A的右边,将结果赋值给A
A =

   1   2   1
   3   4   2
   5   6   3
   1   1   4
   1   1   5

求向量中的最大值:

>> v = [5, 4, 3];
>> max (v)
ans =  5
>> [val, ind] = max (v)
val =  5
ind =  1

求矩阵的最大值:

>> A = [ 1 3 5 7 9; 2 4 6 8 10]
A =

    1    3    5    7    9
    2    4    6    8   10

>> max (A)          % 求出A的每一列的最大值
ans =

    2    4    6    8   10

>> max (A, [], 1)   % 在第1维求A的最大值
ans =

    2    4    6    8   10

>> max (A, [], 2)   % 在第2维求A的最大值
ans =

    9
   10

向量中的值与某一个数值的比较:

>> v
v =

   5   4   3

>> v > 3            % 将v中的每一个元素同3比较
ans =

   1   1   0

>> find (v > 3)     % 得到符合条件的元素的下标
ans =

   1   2

求向量或者矩阵元素之和:

>> v
v =

   5   4   3

>> sum (v)      % 求出向量中元素的和
ans =  12
>> A
A =

    1    3    5    7    9
    2    4    6    8   10

>> sum (A,1)    % 求出A中第1维之和
ans =

    3    7   11   15   19

>> sum (A,2)    % 求出A中第2维之和
ans =

   25
   30

矩阵计算

求矩阵的转置与逆:

A =

   1   2
   3   4

>> A'           % 求A的转置
ans =

   1   3
   2   4

>> pinv (A)     % 求A的逆矩阵
ans =

  -2.00000   1.00000
   1.50000  -0.50000

矩阵与数字计算:

>> A
A =

   1   2
   3   4

>> A + 2    % A中每个元素+2
ans =

   3   4
   5   6

>> A * 2    % A中每个元素*2
ans =

   2   4
   6   8

>> A / 2    % A中每个元素/2
ans =

   0.50000   1.00000
   1.50000   2.00000

矩阵与矩阵计算:

>> A
A =

   1   2
   3   4

>> B = [5 6; 7 8]
B =

   5   6
   7   8

>> A + B        % 矩阵加法
ans =

    6    8
   10   12

>> A .* B       % A中的元素与B中对应的元素相乘
ans =

    5   12
   21   32

>> A * B        % 矩阵乘法
ans =

   19   22
   43   50

控制结构

while循环和if条件:

>> v
v =

    1    2    3    4    5    6    7    8    9   10

>> while true,              % start loop
        v(i) = v(i) + 1;
        if v(i) > 4,        % 如果v中的元素>4,则退出循环
                break;
        end;
        i = i + 1;          % 下标自增1
   end;                     % end loop
>> v
v =

    2    3    4    5    5    6    7    8    9   10

上面的程序中使用了whileif。注意在循环或者判断结构的结尾写明end;

for循环:

>> for i = [1 3 5],
        v (i) = 0;
   end;
>> v
v =

    0    3    0    5    0    6    7    8    9   10

switch判断:

>> a = 2
a =  2
>> switch (a),
        case 1,
                disp ('The value is 1.');
        case 2,
                disp ('The value is 2.');
        case 3,
                disp ('The value is 3.');
        otherwise,
                disp ('Wo...');
   end;
The value is 2.

switch中并不需要写break来划分情况。

函数

新建一个名为addOne.m的文件,写入:

function y = addOne (x)
y = x + 1

这表示一个函数,这个函数的参数为x,返回值为y,函数的内容是y = x + 1

调用它:

>> addOne(1.2)
y =  2.2000
ans =  2.2000

画图

使用plot()函数画图:

>> x = 0:0.1:2*pi;                      % 为x赋值
>> y_sin = sin (x);                     % 为y赋值
>> plot (x, y_sin);                     % 绘制x与y的图像
>> xlabel ('x');                        % x轴的标签设置为"x"
>> ylabel ('sin(x)');                   % y轴的标签设置为"sin(x)"
>> title ('y = sin (x), 0 < x < 2pi');  % 设置图片标题
>> print -dpng 'octave_plot_sin.png'    % 保存为png图片,并设置文件名
>> close                                % 关闭图片

图像如下:

可以使用hold on命令在一幅图中绘制多条曲线:

>> x = 0:0.1:2*pi;
>> y_sin = sin (x);
>> y_cos = cos (x);
>> plot (x, y_sin);
>> hold on;                         % 接下来还在此图中绘制
>> plot (x, y_cos, 'r');            % 红色线条绘制y_cos
>> xlabel ('x');
>> ylabel ('y');
>> legend ('y=sin(x)','y=cos(x)');  % 设置图例
>> print -dpng "octave_plot_sin_cos.png";
>> close

图像如下:

使用subplot对图像进行分格:

>> x = 0:0.1:2*pi;
>> y_sin = sin (x);
>> y_cos = cos (x);
>> y = 0.5 * x;
>> subplot (1,2,1);     % 将图像分为1行2列,使用第1个格
>> plot (x, y, 'b');
>> xlabel ('x'); ylabel ('y=x/2');
>> subplot (2,2,2);     % 将图像分为2行2列,使用第2个格
>> plot (x, y_sin, 'r');
>> xlabel ('x'); ylabel ('y=sin(x)');
>> subplot (2,2,4);     % 将图像分为2行2列,使用第4个格
>> plot (x, y_cos, 'g');
>> xlabel ('x'); ylabel ('y=cos(x)');
>> print -dpng "octave_subplot_3.png";
>> close

图像如下:

文件操作

导入一个文件非常简单:

>> load ('featureX.dat')    % 导入featureX.dat文件

保存一个文件也很简单:

>> save I.mat I;                % 保存I到I.mat 会对数据进行压缩
>> save hello.txt I --ascii;    % 保存为可读文本文档

获取帮助

查看函数eye()的帮助文档:

>> help eye

原文发布于微信公众号 - mwangblog(mwangblog)

原文发表时间:2018-01-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏简书专栏

基于tensorflow+CNN的垃圾邮件文本分类

tensorflow是谷歌google的深度学习框架,tensor中文叫做张量,flow叫做流。 CNN是convolutional neural netwo...

4943
来自专栏决胜机器学习

有趣的算法(一)——n阶层尾部有几个0

有趣的算法(一)——n阶层尾部有几个0 (原创内容,转载请注明来源,谢谢) 最近在网上看到好几次这个题目,觉得挺有意思,则准备用PHP进行实现。 1、题目 ...

3696
来自专栏简书专栏

基于tensorflow+RNN的新浪新闻文本分类

tensorflow是谷歌google的深度学习框架,tensor中文叫做张量,flow叫做流。 RNN是recurrent neural network的简...

3133
来自专栏简书专栏

基于tensorflow的一元二次方程回归预测

安装tensorflow命令:pip install tensorflow 下面一段代码能够成功运行,则说明安装tensorflow环境成功。

2043
来自专栏技术沉淀

命令行工具:cut列操作

1997
来自专栏WindCoder

TensorFlow入门:一篇机器学习教程

TensorFlow是一个由Google创建的开源软件库,用于实现机器学习和深度学习系统。这两个名称包含一系列强大的算法,它们共享一个共同的挑战——让计算机学习...

3151
来自专栏企鹅号快讯

无人驾驶系列——深度学习笔记:Tensorflow基本概念

随着无人驾驶的火爆,深度学习在无人驾驶中的应用受到广泛关注,我在工作中对此有所接触,因此进行了相关学习和整理,给大家大家可以参考。 ? TensorFlow深度...

2476
来自专栏有趣的Python

7- 深度学习之神经网络核心原理与算法-模型的保存与加载

1615
来自专栏xiaoxi666的专栏

最长滑道问题(非递归,C++)

题目描述请参考博客http://blog.csdn.net/sinat_30186009/article/details/52356053,在此表示感谢。

1043
来自专栏漫漫深度学习路

tensorflow学习笔记(三十):tf.gradients 与 tf.stop_gradient() 与 高阶导数

gradient tensorflow中有一个计算梯度的函数tf.gradients(ys, xs),要注意的是,xs中的x必须要与ys相关,不相关的话,会报错...

1.5K9

扫码关注云+社区

领取腾讯云代金券