Coursera机器学习笔记(四) - Octave教程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cWl0miUH-1588214218485)(http://7xrrje.com1.z0.glb.clouddn.com/screenshot_63.png)]
- 课程地址:Octave Tutorial
- 课程Wiki:Octave Tutorial
- 课件:PPT PDF
- 参考:Octave documentation pages Introduction to Octave
##基本操作##
四则运算
octave:1> 5+6
ans = 11
octave:2> 3-2
ans = 1
octave:3> 5*8
ans = 40
octave:4> 1/2
ans = 0.50000
逻辑运算
octave:6> 1 == 2
ans = 0
octave:7> 1 ~= 2
ans = 1
octave:8> 1 && 0
ans = 0
octave:9> 1 || 0
ans = 1
octave:10> xor(1,0)
ans = 1
其他
更改提示符
octave:11> PS1('>> ')
>>
添加分号可抑制输出:
>> a = 1
a = 1
>> a = 1;
>>
圆周率 π \pi π:
>> a = pi
a = 3.1416
常数 e e e:
>> e
ans = 2.7183
格式化输出:
>> disp(sprintf('6 decimals: %0.6f', a))
6 decimals: 3.141593
>> disp(sprintf('6 decimals: %0.2f', a))
6 decimals: 3.14
>> format long
>> a
a = 3.14159265358979
>> format short
>> a
a = 3.1416
矩阵
构造一个矩阵,方式一:
>> A = [1 2; 3 4; 5 6;]
A =
1 2
3 4
5 6
构造一个矩阵,方式二:
>> A = [1 2;
> 3 4;
> 5 6;
> ]
A =
1 2
3 4
5 6
构造一个横向量:
>> v = [1 2 3]
v =
1 2 3
构造一个列向量:
>> v = [1; 2; 3]
v =
1
2
3
从1到2,每次递增0.1:
>> v = 1:0.1:2
v =
Columns 1 through 5:
1.0000 1.1000 1.2000 1.3000 1.4000
Columns 6 through 10:
1.5000 1.6000 1.7000 1.8000 1.9000
Column 11:
2.0000
从1到6,每次递增1(默认):
>> v = 1:6
v =
1 2 3 4 5 6
所有元素均为1:
>> ones(2, 3)
ans =
1 1 1
1 1 1
每个元素乘以2:
>> C = 2*ones(2, 3)
C =
2 2 2
2 2 2
高斯随机数:
>> rand(3, 3)
ans =
0.751588 0.906707 0.081204
0.411613 0.457779 0.882052
0.622524 0.774499 0.811092
所有元素均为0:
>> w = zeros(1, 3)
w =
0 0 0
单位阵:
>> I = eye(5)
I =
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
A =
1 2
3 4
5 6
读取矩阵A第三行第二列的元素:
>> A(3, 2)
ans = 6
读取矩阵A第2列所有元素:
>> A(:,2)
ans =
2
4
6
读取矩阵A第2行所有元素:
>> A(2,:)
ans =
3 4
读取矩阵A第1行和第3行的所有元素:
>> A([1 3],:)
ans =
1 2
5 6
将A第二列替换为[10;11;12]:
>> A(:,2) = [10; 11; 12]
A =
1 10
3 11
5 12
在A的最后加上一列:
>> A = [A, [100; 101; 102]]
A =
1 10 100
3 11 101
5 12 102
将A所有的元素合并成一个列向量:
>> A(:)
ans =
1
3
5
10
11
12
100
101
102
两个矩阵的合并(列合并):
>> 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]
C =
1 2 7 8
3 4 9 10
5 6 11 12
两个矩阵的合并(行合并):
>> D = [A;B]
D =
1 2
3 4
5 6
7 8
9 10
11 12
查看帮助:
>> help eye
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w0eBj7mS-1588214218487)(http://7xrrje.com1.z0.glb.clouddn.com/screenshot_598.png?imageMogr/v2/thumbnail/!45p)]
构造10000个随机数,并绘制出图形(高斯分布):
>> w=randn(1,10000);
>> hist(w,50)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WMpWc8Ut-1588214218493)(http://7xrrje.com1.z0.glb.clouddn.com/GaussianDistribution.png)]
数据的读取与存储
本节所用到的数据: featuresX.dat, priceY.dat
读取数据
% 找到文件所在目录:
>> cd Desktop/
>> cd 'Machine Learning/'
>> ls
featuresX.dat priceY.dat
数据如下所示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QRwp02tk-1588214218497)(http://7xrrje.com1.z0.glb.clouddn.com/screenshot_599.png?imageMogr/v2/thumbnail/!45p)]
读取数据:
% 方式一:
>> load featuresX.dat
>> load priceY.dat
% 方式二:
>> load('featuresX.dat')
>> load('priceY.dat')
使用who命令显示当前所有变量:
>> who
Variables in the current scope:
A a featuresX v y
C ans priceY w
I c sz x
可以看到,刚才导入的数据已经在变量featuresX和priceY中了。
展示数据:
>> featuresX
featuresX =
2104 3
1600 3
2400 3
1416 2
3000 4
1985 4
1534 3
... ..
>> size(featuresX)
ans =
27 2
>> priceY
priceY =
3999
3299
3690
2320
5399
2999
...
>> size(priceY)
ans =
27 1
使用whos查看变量更详细的信息:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-24Ad0I60-1588214218498)(http://7xrrje.com1.z0.glb.clouddn.com/screenshot_600.png?imageMogr/v2/thumbnail/!45p)]
使用如下命令用来删除某个变量:
>> clear featuresX
>> whos
这个时候再使用whos查看,发现featuresX已经不见了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C7Wx0HQp-1588214218501)(http://7xrrje.com1.z0.glb.clouddn.com/screenshot_601.png?imageMogr/v2/thumbnail/!45p)]
存储数据
假设我们现在需要取出priceY前十个数据,使用如下命令:
>> v = priceY(1:10)
v =
3999
3299
3690
2320
5399
2999
3149
1989
2120
2425
该如何存储这十个数据呢?使用save命令:
>> save hello.mat v
>> ls
featuresX.dat hello.mat priceY.dat
清空所有变量:
>> clear
>> whos
>> %无任何输出
刚才存储数据是以二进制的形式进行存储,我们也可以使用人能够读懂的形式存储。例如:
>> load hello.mat
>> whos
Variables in the current scope:
Attr Name Size Bytes Class
==== ==== ==== ===== =====
v 10x1 80 double
Total is 10 elements using 80 bytes
>> v
v =
3999
3299
3690
2320
5399
2999
3149
1989
2120
2425
>> save hello.txt v -ascii
>> ls
featuresX.dat hello.mat hello.txt priceY.dat
数据的计算
% 各种矩阵运算
>> A * B
>> A .* B
>> A .^ 2
>> 1 ./ A
>> log(A)
>> exp(A)
>> -A
A中的每个元素都加上1:
>> A + ones(size(A))
这样也可以:
>> A + 1
矩阵转置:
>> A'
向量中的最大值:
>> A = [1 3 0.5 10 100]
A =
1.00000 3.00000 0.50000 10.00000 100.00000
>> [val ind] = max(A)
val = 100
ind = 5
比较大小:
>> A = [1 2; 3 4; 5 6]
A =
1 2
3 4
5 6
>> A > 3
ans =
0 0
0 1
1
找出向量中特定元素:
>> find(A > 3)
ans =
3
5
6
找出矩阵中特定元素:
>> [r c] = find(A >= 3)
r =
2
3
2
3
c =
1
1
2
2
生成任意行、列、对角线和相等的矩阵:
>> magic(3)
ans =
8 1 6
3 5 7
4 9 2
内容太多,就不一个个的打了,想要更清楚的教程,请看原地址;