这里就不介绍octave是什么了,如果你真心想学习ML的话,octave是一个可以帮助你进行计算的强大工具
符号
% 注释
~= 不等于
; (注意半角) 结束符号,命令行中可以不print出来
>
, <
, =
值得一提的是这些符号可以应用到矩阵中,可以将矩阵中的每一个元素和符号后的数字进行比较,最终判断成立返回1, 判断错误返回0,比如这样
PS1(">> ") 可以把命令行的开始符号变成>>
命令
sprintf("%0.2f", a) 类似c语言中的输出
disp() 显示字符串
矩阵
v = 1:0.1:2 1是开始,0.1是步长,2是结束,包括1.0,所以有11个数
矩阵初始化
a = [1 2 3; 4 5 6; 7 8 9]
注意一下,;
代表的是换行,每一行中可以拿,
隔开也可以不用,直接空开就可以。
特殊矩阵初始化
以下矩阵创建中第一个参数都是行,第二个都是列
这个矩阵特别有意思,以第一行第一个为例,sum(第一行) = sum(第一列) = sum(第一个元素所在对角线)
矩阵索引
a(1,1)
>> 1
a(1,2)
>> 2
这里需要用圆括号扩起来,第一个数字是行,第二个是列,octave中是从1开始数数的而不是0
矩阵变化
继续拿上面的a为例吧
重新赋值
参数意义还是不变的,第一个代表行,第二个代表列,:
表示的是所有
添加新行/列
如果你仔细观察的话就会发现新列是用,(空格也行)
隔开的,而新行是用;
隔开的,很符合我之前提到的;
换行规则吧~ 需要注意的是添加新的矩阵兼容性
矩阵向量化
矩阵计算
继续拿上面的a为例吧
矩阵相加
矩阵相减
矩阵相乘
叉乘
需要注意的是矩阵的兼容性
点乘
矩阵除法
指的是给矩阵中每一个元素都除以一个相同的数字
矩阵幂运算
矩阵指数运算
矩阵对数运算
以e
为底的
以2为底的
这里用的例子还是原来的3 X 3例子并使上面的e e e
以10为底的
自行把2换成10就可以了
函数
length()
length返回的是长度,有可能是行的个数有,可能是列的个数。这取决于那个时候更大
max()
对于向量来说会返回其中最大的一个数字
对行向量来说会返回最大的一个数字
对矩阵来说会返回一个向量,向量的每一行对应原来矩阵每一行的最大值
返回矩阵中最大的一个数值
返回一个行向量,对应该列最大的数,1代表列
返回一个向量,对应该行最大的数,2代表行
floor()
向下圆整
ceil()
向上圆整
sum()
返回一个行向量,将每一列相加,1代表列
返回一个向量,将每一行相加,2代表行
flipud()
将矩阵上下颠倒
画图
简单图像
画一个二次函数吧!
hold on %比如说我们还想在原来的基础上画一个图像
y2 = -x .^ 2 + 1;
plot(x, y2, 'r');
% 加标签
xlabel("x value");
ylabel("y value");
legend("x^2", "-x^2+1"); % 对应图中的颜色线条注释
title("first plot");
cd Desktop; print -dpng "firstPlot.png" %会保存到桌面上
画多个图
figure(1); plot(x, y1);
figure(2); plot(x, y2);
subplot()
subplot(1, 2, 1);
第一个和第二个参数代表的是把图分为 1 X 2, 第三个参数是使用第一个部分。
subplot(1,2,1); %使用第一部分
plot(x,y1);
subplot(1,2,2); %使用第二部分
plot(x,y2,'r');
axis([0.5 1; -1 1]);
这个可以改变轴的长度,前两个是x轴,后两个是y轴,从起始长度到结束长度。
clf
清楚之前画过的图像
彩色矩阵图矩阵图
a = magic(10);
imagesc(a);
额外参数
imagesc(a), colorbar, colormap gray;
colorbar指的是右边的棒状色卡,colormap "color"指的是画面的颜色
基本语法
for
for i=1:10
disp("Hello world");
end;
不像python,octave中的for不需要缩进
, 其次是赋值1:10
,需要end
while
a = 10;
while a > 0
disp("HI");
a -= 1;
end;
需要end
if/else
> if a > 1
> disp("a is bigger than 1");
> else
> disp("a is smaller than 1");
> endif;
>> a is smaller than 1
结束的时候是endif.