这里就不介绍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.