0. 概述
机器学习 - Octave/Matlab Tutorial 课程,Octave 常用语法记录。
1. 基本操作
1.1 加减乘除
octave:1> 5+6
ans = 11
octave:2> 1-2
ans = -1
octave:3> 2*2
ans = 4
octave:4> 2/1
ans = 2
octave:5> 2^3
ans = 8
1.2 逻辑运算
octave:6> 1==1
ans = 1
octave:7> 1==0
ans = 0
octave:8> 1>0
ans = 1
octave:9> 1>-1 % true 注释使用%表示
ans = 1
octave:10> 1 ~= 2
ans = 1
octave:11> 1 && 0
ans = 0
octave:12> 1 || 0
ans = 1
1.3 变量定义
>> num = 1; % 加分号,不回显结果
>> num % 不加分号,回显结果
num = 1
>> num = 3
num = 3
>> str = 'hello'
str = hello
1.4 disp打印
>> a=pi
a = 3.1416
>> disp(a)
3.1416
>> disp(sprintf('a = %0.2f', a)) % 格式化打印
a = 3.14
>> disp(sprintf('a : %f', a)) % 格式化打印
a : 3.141593
1.5 格式化输出
>> format long
>> a
a = 3.14159265358979
>> format short
>> a
a = 3.1416
2. 矩阵和向量
2.1 矩阵和向量的初始化
>> A = [1 2; 3 4; 5 6] % 矩阵的第一种赋值方法
A =
1 2
3 4
5 6
>> A = [7 8; % 矩阵的第二种赋值方法
> 2 1;
> 1 1]
A =
7 8
2 1
1 1
>> v = [1 2 3]
v =
1 2 3
% 向量赋值方法1
>> v = [1;2;3]
v =
1
2
3
% 向量赋值方法2 : 从0.1开始,每次增加0.1,直到0.5结束
>> v = 0.1:0.1:0.5
v =
0.10000 0.20000 0.30000 0.40000 0.50000
% 向量赋值方法方法3 : 从1到8
>> v = 1:8
v =
1 2 3 4 5 6 7 8
2.2 使用函数对矩阵和向量进行初始化
% ones快速生成一个元素值全部为1的矩阵
>> ones(2,3)
ans =
1 1 1
1 1 1
>> 2*ones(2,3)
ans =
2 2 2
2 2 2
% zeros生成一个元素值全为0的矩阵
>> zeros(2,3)
ans =
0 0 0
0 0 0
% rand生成一个随机矩阵
>> rand(2,3)
ans =
0.979697 0.966868 0.633496
0.445040 0.055706 0.765505
% 生成高斯分布矩阵
>randn(1,3)
ans =
-1.05789 0.32224 0.17978
% eye生成单位矩阵
>> eye(2)
ans =
Diagonal Matrix
1 0
0 1
>> eye(5)
ans =
Diagonal Matrix
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
3. 移动数据
3.1 计算矩阵大小
>> A
A =
7 8
2 1
1 1
% A是3 x 2的矩阵,使用size计算矩阵大小
>> size(A)
ans =
3 2
% size返回的值也是一个矩阵
>> sz = size(A)
sz =
3 2
% sz是一个1 x 2的矩阵
>> size(sz)
ans =
1 2
3.2 求矩阵的行和列
% 求矩阵行数
>> size(A,1)
ans = 3
% 求矩阵列数
>> size(A,2)
ans = 2
>> A = rand(2,3)
A =
0.766966 0.786498 0.290525
0.510301 0.027376 0.071131
% 返回最大维度
>> length(A)
ans = 3
>> A = rand(4,5)
A =
0.6164504 0.6345112 0.2603182 0.4056419 0.3731856
0.8411107 0.5452773 0.9944839 0.4764993 0.6534092
0.2136008 0.4495056 0.2458233 0.0045728 0.0553468
0.4773705 0.2054836 0.1811563 0.2756683 0.7862909
% 返回最大维度
>> length(A)
ans = 5
>> v= [1 2 3 4]
v =
1 2 3 4
>> length(v)
ans = 4
3.3 加载数据
% 路径查看和切换,和linux命令一样
>> pwd
ans = C:\Users\admin
>> cd D:
>> pwd
ans = D:\
% D中有一支文件featuresX.dat,里面存有数据
>> ls
驱动器 D 中的卷是 本地磁盘
卷的序列号是 0003-7901
D:\ 的目录
[AppData] [Gliffy Diagrams] [PTCRB]
[ASM] [MachineLearningInAction] [Python]
[Document] [MyDrivers] [RTMP]
featuresX.dat [Program Files] [Tool]
[FreeMind] [Program Files (x86)]
1 个文件 30 字节
13 个目录 9,018,798,080 可用字节
% 使用load命令将featuresX.dat加载进来
>> load featuresX.dat
% 打印出featureX的值
>> featuresX
featuresX =
2102 1
2020 2
1123 4
2339 5
% 取featuresX的第1到第8个值,一列一的取值
>> B = featuresX(1:8)
B =
2102 2020 1123 2339 1 2 4 5
% 保存数据到磁盘
>> save v.mat v;
% v.mat的内容,被保存到D盘
# Created by Octave 4.2.1, Wed Jul 26 09:40:12 2017 GMT <unknown@unknown>
# name: v
# type: matrix
# rows: 1
# columns: 8
2102 2020 1123 2339 1 2 4 5
>> A = featuresX
A =
2102 1
2020 2
1123 4
2339 5
% 也可以保存为普通文本
>> save A.txt A -ascii
% A.txt的文件内容
2.10200000e+003 1.00000000e+000
2.02000000e+003 2.00000000e+000
1.12300000e+003 4.00000000e+000
2.33900000e+003 5.00000000e+000
3.4 变量查看和管理
% 使用who命令,可以查到当前有哪些变量
>> who
Variables in the current scope:
A a ans featuresX num str sz v
% 使用whos,可以查看变量的详细信息
>> whos
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
A 4x5 160 double
a 1x1 8 double
ans 1x2 16 double
featuresX 4x2 64 double
num 1x1 8 double
str 1x5 5 char
sz 1x2 16 double
v 1x4 32 double
Total is 43 elements using 309 bytes
% 使用clear可以清除某个变量
>> clear featuresX
>> whos
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
A 4x5 160 double
a 1x1 8 double
ans 1x2 16 double
num 1x1 8 double
str 1x5 5 char
sz 1x2 16 double
v 1x4 32 double
Total is 35 elements using 245 bytes
% clear清除所有变量
>> clear
>> whos
>>
3.5 取矩阵中的元素
>> A = [1 2;3 4;5 6]
A =
1 2
3 4
5 6
% 取第3行第1列的元素的值
>> A(3,1)
ans = 5
% 取第2行的元素的值
>> A(2,:)
ans =
3 4
% 取第2列的元素的值
>> A(:,2)
ans =
2
4
6
% 取index为1和3的那两行
>> B = [2 390 1;48 39 03;2003 3 1]
B =
2 390 1
48 39 3
2003 3 1
>> B([1 3], :)
ans =
2 390 1
2003 3 1
% 以sigle向量的形式输出所有元素
>> B(:)
ans =
0
1
3
2
48
2003
0
0
0
1
3
1
1
2
3
3.6 更改、新增和合并矩阵中的元素
% 修改B的第2列的值
>> B(:,2) = [0;0;0]
B =
2 0 1
48 0 3
2003 0 1
% 为矩阵多增加一列
>> B = [B, [1;2;3]]
B =
2 0 1 1
48 0 3 2
2003 0 1 3
>> B = [[0;1;3], B]
B =
0 2 0 1 1
1 48 0 3 2
3 2003 0 1 3
% 合并2个矩阵
>> A = [1 2;3 4;5 6]
A =
1 2
3 4
5 6
>> B = [7 8;9 10;11 12]
B =
7 8
9 10
11 12
>> C = [A B] % 和[A, B]结果相同
C =
1 2 7 8
3 4 9 10
5 6 11 12
>> C = [A; B]
C =
1 2
3 4
5 6
7 8
9 10
11 12
4. 矩阵计算
4.1 乘法
>>A
A =
1 2
3 4
5 6
>>C
C =
1 2
1 2
>>A * C
ans =
3 6
7 14
11 22
>>B
B =
11 2
4 3
1 2
% A中的每个元素和B中对应位置元素相乘
>>A .* B
ans =
11 4
12 12
5 12
% 必须要维数相同
>>A .* C
error: product: nonconformant arguments (op1 is 3x2, op2 is 2x2)
4.2 对矩阵中的每一个元素进行操作
% .表示对每个元素操作
>>A .^2
ans =
1 4
9 16
25 36
% 对每一个元素的值加1
>>A .+1
ans =
2 3
4 5
6 7
% 求每一个元素的倒数
>>1 ./ A
ans =
1.00000 0.50000
0.33333 0.25000
0.20000 0.16667
>>v = [1;2;3]
v =
1
2
3
>>log(v)
ans =
0.00000
0.69315
1.09861
>>exp(v)
ans =
2.7183
7.3891
20.0855
>>log(A)
ans =
0.00000 0.69315
1.09861 1.38629
1.60944 1.79176
>>v = [-1;-2;-3]
v =
-1
-2
-3
% 求绝对值
>>abs(v)
ans =
1
2
3
% 加-直接求负数
>>-abs(v)
ans =
-1
-2
-3
>>v
v =
-1
-2
-3
% 每个元素+1
>>v + 1
ans =
0
-1
-2
4.3 求转置矩阵
% 求转置矩阵
>>v'
ans =
-1 -2 -3
4.4 过滤出小于/大于某个值的那一行
>>a = [1 15 2 0.5]
a =
1.00000 15.00000 2.00000 0.50000
% 小于3返回1,大于3返回0
>>a < 3
ans =
1 0 1 1
% 返回小于3的索引
>>find(a < 3)
ans =
1 3 4
% 生成magic矩阵,对角线和每行的值之和都相同
>>A = magic(3)
A =
8 1 6
3 5 7
4 9 2
% r是行的index,c是列的index
>>[r, c] = find(A >= 7)
r =
1
3
2
c =
1
2
3
4.7 max函数 - 求矩阵中元素的最大值
% 求矩阵中最大值
>>max(v)
ans = -1
% 返回值和index
>>[value, index] = max(v)
value = -1
index = 1
% 取矩阵中最大的一行
>>max(A)
ans =
5 6
% 取2个矩阵中的最大元素
>max(rand(4),rand(4))
ans =
0.839613 0.858532 0.737582 0.927485
0.556008 0.852108 0.948826 0.204084
0.158905 0.911859 0.804915 0.083046
0.920546 0.724880 0.693291 0.267202
>A = magic(3)
A =
8 1 6
3 5 7
4 9 2
% 1表示取每一列的最大值
>max(A,[],1)
ans =
8 9 7
% 2表示取每一行的最大值
>max(A,[],2)
ans =
8
7
9
% 默认是取的每一行最大
>max(A)
ans =
8 9 7
% 取所有元素中的最大
>max(max(A))
ans = 9
>
>A(:)
ans =
8
3
4
1
5
9
6
7
2
>max(A(:))
ans = 9
4.8 矩阵求和
>A = magic(9)
A =
47 58 69 80 1 12 23 34 45
57 68 79 9 11 22 33 44 46
67 78 8 10 21 32 43 54 56
77 7 18 20 31 42 53 55 66
6 17 19 30 41 52 63 65 76
16 27 29 40 51 62 64 75 5
26 28 39 50 61 72 74 4 15
36 38 49 60 71 73 3 14 25
37 48 59 70 81 2 13 24 35
>sum(A,1)
ans =
369 369 369 369 369 369 369 369 369
>sum(A,2)
ans =
369
369
369
369
369
369
369
369
369
>A.*eye(9)
ans =
47 0 0 0 0 0 0 0 0
0 68 0 0 0 0 0 0 0
0 0 8 0 0 0 0 0 0
0 0 0 20 0 0 0 0 0
0 0 0 0 41 0 0 0 0
0 0 0 0 0 62 0 0 0
0 0 0 0 0 0 74 0 0
0 0 0 0 0 0 0 14 0
0 0 0 0 0 0 0 0 35
>sum(A.*eye(9))
ans =
47 68 8 20 41 62 74 14 35
>sum(sum(A.*eye(9)))
ans = 369
%
>flipud(eye(9))
ans =
Permutation Matrix
0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 1 0 0
0 0 0 0 0 1 0 0 0
0 0 0 0 1 0 0 0 0
0 0 0 1 0 0 0 0 0
0 0 1 0 0 0 0 0 0
0 1 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0
>sum(sum(A.*flipud(eye(9))))
ans = 369
>A = magic(3)
A =
8 1 6
3 5 7
4 9 2
>A * pinv(A)
ans =
1.00000 -0.00000 0.00000
0.00000 1.00000 -0.00000
-0.00000 0.00000 1.00000
4.9 矩阵相关的函数
>>a = rand(2)
a =
0.93306 0.80896
0.69141 0.48648
>>prod(a)
ans =
0.64513 0.39354
>>floor(a)
ans =
0 0
0 0
>>ceil(a)
ans =
1 1
1 1
5. 控制语句和函数
5.1 for循环
>num=0
num = 0
>for i=1:5,
> num = i + num;
> end;
>i
i = 5
>num
num = 15
>a=1:10;
>a
a =
1 2 3 4 5 6 7 8 9 10
5.2 while
>v
v =
2
4
8
16
32
64
128
256
512
1024
>i=1;
>while i<
> v(i)=10
> i=i+1;
> end;
>v
v =
100
100
100
100
100
64
128
256
512
1024
5.3 break
>i=1;
>while true,
> v(i) = 999;
> i = i+1;
> if i==6,
> break;
> end;
> end;
>v
v =
999
999
999
999
999
64
128
256
512
1024
5.4 if - else
>num=1
num = 1
>if num==1,
> disp('num = 1...');
> elseif num==2,
> disp('num = 2...');
> else
> disp('num = ?...');
> end;
num = 1...
6. 自定义函数
6.1 function
% D:\MachineLearningInAction\Test\sumFunc.m
% y为返回值,x1和x2为传入的参数
function y = sumFunc(x1,x2)
y=x1+x2;
% 运行
>sumFunc(30,1)
ans = 31
% 返回多个参数
% D:\MachineLearningInAction\Test\funTest.m
function [y1,y2] = funTest(x1,x2)
y1=x1+x2;
y2=x1-x2;
% 运行
>[a,b] = funTest(20,30);
>a
a = 50
>b
b = -10
6.2 设置路径
>pwd
ans = C:\
>sumFunc(30,1)
error: 'sumFunc' undefined near line 1 column 1
>addpath('D:\MachineLearningInAction\Test')
>sumFunc(30,1)
ans = 31
7. 向量化
通过向量化的方式计算假设函数>X = [1 0.5;1 0.3; 1 0.7];
>theta = [1;2];
>X*theta
ans =
2.0000
1.6000
2.4000
在Programming Exercise 1: Linear Regression会有很多用到向量化的示例,此处不再做累述。
8. 其他
8.1 隐藏Octave版本号
octave:22> PS1('>> ');
>>
8.2 help命令
>> help eye
'eye' is a built-in function from the file libinterp/corefcn/data.cc
-- eye (N)
-- eye (M, N)
-- eye ([M N])
-- eye (..., CLASS)
Return an identity matrix.
If invoked with a single scalar argument N, return a square NxN
identity matrix.
If supplied two scalar arguments (M, N), 'eye' takes them to be the
number of rows and columns. If given a vector with two elements,
'eye' uses the values of the elements as the number of rows and
columns, respectively. For example:
eye (3)
=> 1 0 0
0 1 0
0 0 1
9. 图形化
9.1 plot绘制图形
>t=[0:0.01:0.98];
>y1=sin(2*pi*4*t);
>plot(t,y1);
sin(2*pi*4*t)
>y2=cos(2*pi*4*t);
>plot(t,y2);
cos(2*pi*4*t)
9.2 hold on将多个图像显示到一个figure上
>hold on; % 将y1和y2画到一个figure上
>plot(t,y1,'g'); % 设置y1的颜色为绿色
>plot(t,y2,'r') % 设置y2的颜色为red
>xlabel('time') % 设置x的label为time
>ylabel('value') % 设置y的label为value
将y1和y2画到一个figure上
9.3 设置legend和title
>legend('sin','cos');
>title('my plot')
legend和title
9.4 保存图像为png
>print -dpng 'myPlot.png'
% 图片将保存到C盘
>pwd
ans = C:\
print -dpng
9.5 关闭figure - close
close.gif9.6 分别绘制到2个figure
>figure(1);plot(t,y1);
>figure(2);plot(t,y2);
分别绘制
9.7 分块 subplot
% 将图形分为1个1*2的格子,使用第一个格子
subplot(1,2,1);
将图形分为1个1*2的格子,使用第一个格子
% 将y1画到第一个格子中
plot(t,y1);
将y1画到第一个格子中
% 将图形分为1个1*2的格子,使用第2个格子
>subplot(1,2,2);
% 将y2画到第2个格子中
>plot(t,y2);
将图形分为1个1*2的格子,使用第2个格子,将y2画到第2个格子中
9.8 设置刻度 axis
% 设置y2的刻度:x轴大小范围0.5 - 1,y轴大小范围-1 - 1
>axis([0.5 1 -1 1])
设置y2的刻度:x轴大小范围0.5 - 1,y轴大小范围-1 - 1
9.9 clf - 清除图像内容
>clf
清除图像内容
9.10 可视化矩阵
>A = magic(5)
A =
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
>imagesc(A)
可视化矩阵
% 显示colorbar,并设置为灰色
>imagesc(A),colorbar,colormap gray;
显示colorbar,并设置为灰色
% 通过help colormap可以查看支持的颜色
>help colormap
通过help colormap可以查看支持的颜色
% 设置颜色为hot,hot由black, red, orange, yellow, white几种颜色组成
>imagesc(A),colorbar,colormap hot;
colormap hot
网友评论