Octave语法 - 人工智能之路
向量
分号:分割行
空格或逗号:分割列
创建与访问
行向量
空格或逗号分割
>> 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
>, <, ==, !=(或~=), &&, ||
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组