文章目录
1. 基本操作
1.1. 数值运算
>> 5 + 6
ans = 11
>> 3 - 2
ans = 1
>> 5 * 8
ans = 40
>> 1 / 2
ans = 0.5000
>> 2^6
ans = 64
>> 1 == 2 %false
ans = 0
>> 1 ~= 2
ans = 1
>> 1 && 0 %AND
ans = 0
>> 1 || 0 %OR
ans = 1
>> xor(1,0)
ans = 1
1.2. 输出形式
% 改变输出提示符的样式,默认形式为 octave-3.2.4.exe.ll>
PS1('>> ')
% 后面加分号是阻止a赋值后打印输出
a = 3;
% 格式化输出
>> a = pi
a = 3.1416
>> disp(a)
3.1416
>> disp(sprintf('2 decimals: %0.2f',a))
2 decimals: 3.14
% 打印更多位数
>> format long
>> a
a = 3.141592653589793
>> format short
>> a
a = 3.1416
1.3. 向量和矩阵
>> 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
% 从1到2以步长0.1递增
V =
1.0000 1.1000 1.2000 1.3000 1.4000 1.5000 1.6000 1.7000 1.8000 1.9000 2.0000
>> V = 1:6
V =
1 2 3 4 5 6
% 元素全为1的矩阵
>> ones(2,3)
ans =
1 1 1
1 1 1
>> C = 2*ones(2,3)
C =
2 2 2
2 2 2
% 元素全为1的矩阵
>> w = zeros(1,3)
w =
0 0 0
% 随机矩阵
>> w = rand(1,3) % 随机值介于0~1之间
w =
0.3486 0.7838 0.8534
>> rand(3,3)
ans =
0.4068 0.2322 0.5194
0.4869 0.3902 0.8645
0.6563 0.9625 0.8374
% 数值服从高斯分布的随机矩阵(均值为0,标准差或方差为1)
>> w = randn(1,3)
w =
-0.3099 -0.3265 -0.8470
>> w = -6 +sqrt(10)*(randn(1,10000));
>> hist(w) % 运行结果如下图
>> hist(w,50) % 运行结果如下图
% 单位矩阵
>> eye(4)
ans =
Diagonal Matrix
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
% help指令
>> help eye
>> help rand
2. 移动数据
% 获取矩阵行列数,返回的依旧是个矩阵
>> A = [1 2;3 4;5 6]
A =
1 2
3 4
5 6
>> size(A)
ans =
3 2
% 获取矩阵A第一维度的数量,即行数量
>> size(A,1)
ans = 3
% 获取矩阵数量最多的维度的数量(一般只对向量操作)
>> v = [1 2 3 4]
v =
1 2 3 4
>> length(v)
ans = 4
>>
2.1. 补充
>> pwd
ans = C:\Users\10127
% 改变路径命令为 cd ...
% 查看Octave内存中的变量
>> who
>> whos % 显示更详细的信息
% 清除所有变量
>> clear
% 获取矩阵元素(获取矩阵A第i行第j列的元素)
A(i,j)
% 获取矩阵A第i行所有元素
A(i,:)
% 获取矩阵A第j列所有元素
A(:,j)
% 替换矩阵中的元素
>> A = [1 2;3 4;5 6]
A =
1 2
3 4
5 6
>> A(:,2) = [10;11;12]
A =
1 10
3 11
5 12
% 增加一列
>> 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
3. 计算数据
>> A
A =
1 2
3 4
5 6
>> B
B =
11 12
13 14
15 16
% 矩阵A与B对应元素相乘
>> A .* B
ans =
11 24
39 56
75 96
% 矩阵A与每个元素求平方
>> A .^ 2
ans =
1 4
9 16
25 36
% 向量v每个元素的倒数
>> v = [1; 2; 3]
v =
1
2
3
>> 1 ./ v
ans =
1.0000
0.5000
0.3333
% 对数
>> log(v)
ans =
0
0.6931
1.0986
% 以e为底v中各元素为指数
>> exp(v)
ans =
2.7183
7.3891
20.0855
% 绝对值
>> abs(v)
ans =
1
2
3
% 按元素取反
>> -v
ans =
-1
-2
-3
% 按位加1
>> v+1
ans =
2
3
4
% 转置矩阵
>> A = [1 2;3 4;5 6]
A =
1 2
3 4
5 6
>> A'
ans =
1 3 5
2 4 6
% 求矩阵最大元素和最大元素所在位置
>> a = [1 15 2 0.5]
a =
1.0000 15.0000 2.0000 0.5000
>> val = max(a)
val = 15
>> [val, ind] = max(a)
val = 15
ind = 2
% 如果参数是矩阵,则求出矩阵每一列的最大值
>> max(A)
ans =
5 6
% 判断a中各元素是否小于3,返回布尔值
>> a <3
ans =
1 0 1 1
% 找出a中所有大于3的元素的位置
>> find(a < 3)
ans =
1 3 4
% 幻方矩阵(幻方矩阵特殊性质:它任意行、列、对角线的元素和都相等)
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
% 找出所有大于7的元素的位置(可以看到,第一个参数表示行位置,第二个参数表示行位置)
>> [r,c] = find(a >= 7)
r = 1
c = 2
>> [r,c] = find(A >= 7)
r =
1
3
2
c =
1
2
3
% 总和和乘积
>> sum(a)
ans = 18.500
>> prod(a)
ans = 15
% 向下取整
>> floor(a)
ans =
1 15 2 0
% 向上取整
>> ceil(a)
ans =
1 15 2 1
% 获取矩阵每一列的最大值,这里第二个参数不添加则会让矩阵中每个元素与A进行比较,显示最大值,第三个参数告诉max函数从矩阵的第一维度(列)比较取值
>> max(A, [], 1)
ans =
8 9 7
>> max(A, [], 2)
ans =
8
7
9
% 获取整个矩阵的最大值
>> max(max(A))
ans = 9
>> max(A(:))
ans = 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
% 对角线元素之和
>> sum(sum(A .* eye(9)))
ans = 369
% 反对角线元素之和
>> sum(sum(A.*flipud(eye(9))))
ans = 369
4. 数据绘制
>> t=[0:0.01:0.98];
>> t
>> y1 = sin(2* pi*4*t);
% 绘制正弦函数
>> plot(t,y1);
>> y2 = cos(2*pi*4*t);
% 绘制余弦函数
>> plot(t,y2);
% 用个窗口绘制两个不同函数
>> plot(t,y1);
>> hold on; % 表示在原窗口继续绘制
>> plot(t,y2,'r'); % 第三个参数'r'表示颜色为红色
% 给x轴和y轴取标签(命名)
>> xlabel('time')
>> ylabel('value')
% 给不同函数取标签(命名)
>> legend('sin','cos')
% 给图像取名字
>> title('my plot')
% 将图像存为图片并下载到指定位置
>> cd 'C:\Users\Admin\Desktop'; print -dpng 'myPlot.png'
% 关闭图像,(GUI窗口可以直接点击右上角×关闭)
>> close
% 将窗口分为两部分并绘制不同图像
>> subplot(1,2,1); % 前两个参数表示将窗口分为一个一行二列的矩阵,第三个参数表示使用第一个窗口
>> plot(t,y1);
>> subplot(1,2,2);
>> plot(t,y2);
% 改变x、y轴的刻度(下式表示x轴从0.5到1;y轴从-1到1)
>> axis([0.5 1 -1 1])
% 清除图像
>> clf;
% 可视化矩阵
>> 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)
% 下面这行语句表示顺序执行三条指令,以灰度表示数值
>> imagesc(A),colorbar,colormap gray;
5. 控制语句:for,while,if 语句
5.1. 控制语句
% 定义初始变量
>> v=zeros(10,1)
v =
0
0
0
0
0
0
0
0
0
0
% 令向量v每项为以2为底以向量位置索引为指数的数值
>> for i=1:10,
v(i)=2^i;
end;
>> v
v =
2
4
8
16
32
64
128
256
512
1024
% 预先定义索引并在for循环中运用索引
>> indides=1:10;
>> indides
indides =
1 2 3 4 5 6 7 8 9 10
>> for i=indides ,
disp(i);
end;
1
2
3
4
5
6
7
8
9
10
% while循环和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
>> v(1)=999
v =
999
999
999
999
999
64
128
256
512
1024
% if配合elseif的使用
>> v(1)=2;
>> if v(1)==1
disp('The value is one');
elseif v(1)==2
disp('The value is two');
else
disp('The value is not one or two.');
end;
The value is two
>>
5.2. 读取文件调用函数
5.2.1. 单返回值
在桌面定义一个名为squareThisNumber.m
的文件,.m
为后缀名,存储位置为C:\Users\Admin\Desktop
,文件内容如下:
function y = squareThisNumber(x)
y=x^2;
这个函数是对输入函数求平方并输出
函数的调用:
>> cd 'C:\Users\Admin\Desktop' % 将octave的路径设为我们存放函数文件的位置
>> squareThisNumber(5) % 调用函数
ans = 25
% 进阶(添加访问路径,有点类似windows添加系统变量)
>> addpath('C:\Users\Admin\Desktop')
>> cd 'C:\'
>> squareThisNumber (5)
ans = 25
>> pwd
ans = C:\
>>
5.2.2. 多返回值
函数形式如下:
function [y1,y2] = squareThisNumber(x)
y1=x^2;
y2=x^3;
调用:
>> [a,b] = squareThisNumber (5)
a = 25
b = 125
参考视频:[中英字幕]吴恩达机器学习系列课程