当前位置

网站首页> 程序设计 > 开源项目 > 程序开发 > 浏览文章

Octave语法 - 人工智能之路

作者:小梦 来源: 网络 时间: 2024-08-24 阅读:

向量

  • 分号:分割行

  • 空格或逗号:分割列

创建与访问

行向量

  • 空格或逗号分割

>> v = [1 2 3] % 等效:v = [1, 2, 3]v =   1   2   3   >> v(2) % 只有一行,所以指定就是列ans =  2

列向量

  • 分号分割

>> v = [1; 2; 3]v =   1   2   3>> v(2) % 只有一列,所以指定就是行ans =  2

矩阵

  • 与向量一样,空格或逗号分割列,分号分割行

  • 冒号:代表所有,所有行或所有列

创建

>>   A = [1, 2; 3, 4] % 一行写完A =   1   2   3   4>> A = [1, 2; % 分行写> 3, 4]A =   1   2   3   4

创建技巧

  • a:c --- 从a到c

  • a:b:c --- 从a,间隔b,到c

  • 向量也可以用这样的方法创建

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

特殊矩阵

单位矩阵

>> eye(3) % 单位矩阵ans =Diagonal Matrix   1   0   0   0   1   0   0   0   1>> flipud(eye(3))ans =Permutation Matrix   0   0   1   0   1   0   1   0   0

转置矩阵

A =   1   2   3   4>> A'ans =   1   3   2   4

逆矩阵

A =   1   2   3   4>> pinv(A)ans =  -2.00000   1.00000   1.50000  -0.50000>> pinv(A) * Aans =   1.00000   0.00000  -0.00000   1.00000

全1矩阵

>> ones(2, 3)ans =   1   1   1   1   1   1

全0矩阵

>> 0*ones(2, 3)ans =   0   0   0   0   0   0>> zeros(2, 3)ans =   0   0   0   0   0   0

随机矩阵

>> rand(1, 3) % 0~1的随机数,1行3列ans =   0.99291   0.65946   0.95102

高斯分布矩阵

>> randn(1, 3) % 高斯分布ans =   0.14646   2.02587   1.33266

访问

  • 冒号:代表所有,所有行或所有列

访问元素

A =   1   2   3   4   5   6   7   8   9   >> A(2, 2) % 第二行,第二列,先定行再定列ans =  5

访问单行或单列

>> A(1, :) % 第一行,所有,元素ans =   1   2   3   >> A(:, 2) % 第二列,所有,元素ans =   2   5   8

访问多行或多列

>> A(:, [1, 3]) % 第一列和第三列,所有,元素ans =   1   3   4   6   7   9>> A([1, 3], :) % 第一行和第三行,所有,元素ans =   1   2   3   7   8   9

连接

  • C = [A B],把B按列加到A上,生成C

  • C = [A; B],把B按行加到A上,生成C

添加元素

>> A = [1]A =  1>> A = [A, 2] % 把2,按列,添加到A上,再赋给AA =   1   2   >> A = [A; 3] % A有两列,3只有一列,规模不匹配error: vertical dimensions mismatch (1x2 vs 1x1)

添加行或列

>> A = [A; [3, 4]] % 将向量[3, 4],作为行,添加到A上,在赋给AA =   1   2   3   4   >> A = [A, [5; 6]] % 将向量[5, 6],作为列,添加到A上,在赋给AA =   1   2   5   3   4   6

矩阵连接

>> A = [1, 2; 3, 4]A =   1   2   3   4>> B = [5, 6; 7 ,8]B =   5   6   7   8>> [A; B] % 将B,作为行,添加到A上ans =   1   2   3   4   5   6   7   8

所有的数据放入一个向量中

>> AA =   1   2   3   4>> A(:)ans =   1   3   2   4>> A(:)'ans =   1   3   2   4

赋值

  • 在访问基础上,给定相同规模的数据

A =   1   2   3   4   5   6   7   8   9>> A(3, 3) = 10 % 修改单个元素的值A =    1    2    3    4    5    6    7    8   10>> A(1, :) = [0, 0, 0] % 修改一行的值A =    0    0    0    4    5    6    7    8   10>> A(2:3, 2:3)ans =    5    6    8   10>> A(2:3, 2:3) = [0, 0; 0, 0] % 修改指定矩阵的值A =   0   0   0   4   0   0   7   0   0

运算

加,减

>> A = [1 1; 1 1]A =   1   1   1   1>> B = [2 2; 2 2]B =   2   2   2   2>> A + Bans =   3   3   3   3>> A - Bans =  -1  -1  -1  -1>> A - 1ans =  0  0  0  0

相乘

>> A = [1 2; 3 4]A =   1   2   3   4>> B = [5 6; 7 8]B =   5   6   7   8>> A * Bans =   19   22   43   50>> -A % -1 * Aans =  -1  -2  -3  -4

点运算

对应元素运算

  • 维度相同:对应元素相乘

  • 行维度相同:每行对应元素相乘

  • 列维度相同:每列对应元素相乘

  • A .* B = B .* A

  • 乘 *;除 /; 平方 ^;等

维度相同

A =   1   1   1   1B =   2   3   2   3>> A .* Bans =   2   3   2   3

行维度相同

A =   1   1   1   1B =   5   6>> A .* Bans =   5   6   5   6

列维度相同

A =   1   1   1   1B =   5   6>> A .* Bans =   5   5   6   6

点除

  • 矩阵乘以常数,A * 2,除可以是,A / 2

  • 反过来,2 * A没问题,2 / A 就不行,要用2 ./ A

A =   1   2   3   4>> 1 ./ Aans =   1.00000   0.50000   0.33333   0.25000

逻辑

  • 每一个元素做比较,标记0或1

  • &gt, <, ==, !=(或~=), &&, ||

A =   1   2   3   4>> A > 2ans =   0   0   1   1

位运算

  • 或 | ,函数xor

  • 且 &

  • 非 ~

  • 异或 ^

函数

  • size:获取矩阵维度

  • length:获取最大维度

  • who:变量列表

  • whos:变量详情

  • clear 变量名:删除指定变量

  • clear:删除所有变量

  • find:返回符合条件元素的下标

  • log:log以e为底

  • exp:e的多少次方

  • abs:绝对值

  • floor:向下取整

  • ceil:向上取整

  • sum:求和

  • prop:求积

size

  • 获取矩阵维度

A =   1   2   3   4   5   6>> aSize = size(A)aSize =   3   2   >> size(A, 1) % 3行ans =  3>> size(A, 2) % 2列ans =  2

length

  • 获取最大维度

A =   1   2   3   4   5   6>> length(A) % 输出最大维度ans =  3

who

变量列表

>> who % 现在都有哪里变量Variables in the current scope:A          aSize      ans        featuresX  w

whos

变量详情

>> whos % 变量详情Variables in the current scope:   Attr Name           Size         Bytes  Class   ==== ====           ====         =====  =====        A  3x2 48  double        aSize          1x2 16  double        ans1x2020  char        featuresX     27x2432  double        w  1x10000      80000  doubleTotal is 10082 elements using 80516 bytes

clear

删除变量

>> clear featuresX>> whoVariables in the current scope:A      aSize  ans    w>> clear % 清除全部变量>> who % 一个变量都没有了

find

  • 返回符合条件元素的下标

A =   5   6   7   8>> [r, c] = find(A > 6) % 符合要求的是:第二行第一个和第二行第二个r =   2   2c =   1   2

sum

求和

>> A = [1, 2; 3, 4]A =   1   2   3   4>> sum(A) % 等效:sum(A, 1)ans =   4   6   >> sum(A, 2)ans =   3   7

prod

求积

>> AA =   1   2   3   4>> prod(A) % 等效:prod(A, 1)ans =   3   8>> prod(A, 2)ans =    2   12

max

向量

>> a = [1 5 2 3.3]a =   1.0000   5.0000   2.0000   3.3000>> max(a)ans =  5>> [val, ind] = max(a)val =  5ind =  2

矩阵比较

两个矩阵比较每个元素,保留大的

>> A = rand(3)A =   0.2620788   0.6346345   0.4659161   0.0880455   0.1258945   0.0079559   0.0296765   0.7917592   0.4321800>> B = rand(3)B =   0.039237   0.672424   0.214649   0.491320   0.362929   0.197626   0.821090   0.675265   0.698960>> max(A, B)ans =   0.26208   0.67242   0.46592   0.49132   0.36293   0.19763   0.82109   0.79176   0.69896

行与列的最大值

参数二:与之比较的矩阵
参数三:按行还是按列

>> A = [1 2; 3 4]A =   1   2   3   4>> max(A) % 每列最大值ans =   3   4>> max(A, [], 1) % 每列最大值ans =   3   4>> max(A, [], 2) % 每行最大值ans =   2   4

数据

路径

与Linux命令一样

>> pwd % 当前路径ans = /Users/XXX>> cd ~/Developer>> pwdans = /Users/XXX/Developer>> ls % 列出目录文件和文件夹>> cd .. % 回到上级目录

载入与保存

>> load featuresX.dat % 载入数据>> save featuresX.mat featuresX; % 将featuresX中的数据保存到featuresX文件中>> save hello.txt v -ascii % 将变量v中得数据已ascii编码方式保存到hello.txt中

其他

简化命令行

PS1('>> ');

注释

%后为注释

打印

自动打印

a = 3 % 会打印数据a = 3; % 不会打印数据,分号可以防止输出

格式化

disp(pi) % 输出:3.1416disp(sprintf('pi is %.2f', pi)) % c语言风格

默认格式

format long % 修改默认打印格式

帮助

help size % 查看size函数的帮助文档help help % 查看help函数的帮助文档

直方图

>> w = -6 + sqrt(10)*randn(1, 10000);>> hist(w)>> hist(w, 30) % 30组

相关阅读

热点阅读

网友最爱