Octave命令
基本操作:
操作 | 注释 |
---|---|
~= | 不等于 |
xor | 异或 |
ps1('>> '); | 隐藏版本信息 |
a=3; | 加上;后不打印 |
% | 注释 |
disp() | 更复杂的输出 |
disp(sprintf('2 decimals:%2f',a) | 输出字符串 |
format long | 输出长字符串(小数点后十六位) |
format short | 输出短字符 (小数点后四位) |
A=[1 2; 3 4; 5 6] | 输入一个矩阵A(2x3),一行一行输入 |
V=[1 2 3] | 输入一个向量V(也可以说是一个1x3的矩阵) |
V=[1;2;3] | 输入一个列向量 |
V=1:0.1:2 | 从1开始,每次增长0.1一直到2,生成向量V=[1.00000000000000 1.10000000000000 1.20000000000000 ... 2.00000000000000] |
V=1:6 | 生成1到6的数形成向量,即V=[1 2 3 4 5 6] |
ones(2,3) | 生成全是1的2x3的矩阵 |
c=2*ones(2,3) | 生成全是2的2x3矩阵 |
w=zeros(1,3) | 生成全是0的1x3的矩阵/向量 |
w=rand(1,3) | 生成全是随机数的1x3的向量/矩阵(数值0到1之间) |
w=randn(1,3) | 生成平均值为0的高斯分布 |
hist(w) | 打印直方图(比如画出一个1x1000的随机变量w) |
hist(w,50) | 打印直方图(50个条) |
eye(4) | 生成一个单位矩阵I(4x4)4阶 |
移动数据
操作 | 注释 |
---|---|
size(A) | 返回矩阵A的大小(3x2之类的返回[3 2]) |
size(A,1) | 返回矩阵A的行数 |
length(A) | 返回最大维数(ps:一般对向量用) |
pwd | 返回当前运行所在path |
ls | 可以当前path的所有目录 |
load input.txt | 加载数据文件 |
load('input.txt') | 同上 |
who | 显示当前Octave储存的变量 |
input | (这只是我的input文件名,此时成了一个变量名)显示input文件内容 |
size(input) | 查看input这个文件的大小 |
whos | 显示当前Octave存储变量的具体信息(数据类型、size、Bytes之类的) |
clear input | 可以删除input这个变量 |
v=input(1:3) | 返回v=[1 3 5],也就是input文件的前3个数存储在向量v中 |
save outputtest.txt | 将数据写入硬盘,并且名字叫outputtest |
clear | 清除所有变量 |
A(3,2) | A矩阵里第3行第2列的数 |
A(2,:) | A矩阵里第2行的所有数 |
A([1 3],:) | A矩阵里第1行和第3行所有数 |
A(:,2)=[10;11;12] | A矩阵的第二列分别赋值 |
A=[A,[1;2;3]] | 给A矩阵增加一列数据 |
A(:) | 把A矩阵的所有数据放在一列 |
C=[A B] | 连接矩阵A和B形成新的矩阵C(A、B左右排列) |
C=[A;B] | 连接矩阵A和B形成新的矩阵C(A、B上下排列) |
ps:[A B] 与[A,B]的写法是一样的
对数据进行运算
操作 | 注释 |
---|---|
A*B | 矩阵乘法 |
A .*B | A矩阵里的数乘以B矩阵里对应的数(a11 * b11) |
ps: .符号在Octave一般表示元素位运算
操作 | 注释 |
---|---|
A .^2 | A矩阵里每个元素都做平方运算 |
1 ./ V | 对V向量里的每一个元素求倒数 |
1 ./ A | 对矩阵,同上 |
log(A) | 对矩阵里的每个元素做对数运算 |
exp(V) | 对向量里的每个数做幂次运算(e为底,V里面的元素为幂) |
abs(V) | 对向量里的每个数都求绝对值 |
-V | 取相反数 |
V+ones(length(V),1) | 对向量的每一个元素都+1 |
V+1 | 同上 |
A' | A矩阵的转置 |
max(A) | 对矩阵的每列求最大值,向量就是最大值 |
[val,ind]=max(a) | 找出每列里面最大的并且返回索引 |
A<3 | 对每个元素进行比较,返回0/1的矩阵 |
find(A<3) | 返回哪些符合条件的元素的索引 |
magic(3) | 生成3阶幻方(或者说魔方阵,magic square,它的所有行、列、对角线加起来都是同一个值) |
ps:这在机器学习上基本没用,但是可以很快生成一个n阶方阵哇:D
操作 | 注释 |
---|---|
[r,c]=find(A>=7) | 找出A矩阵里比7大的数的索引(r是行数,c是列数) |
help find | 以后只要不记得语法就可以用help+操作命令就可以查看文档 |
sum(A) | 把A里面的所有元素都相加(向量),矩阵的话就是每列的相加结果 |
prod(A) | 把A矩阵每列的数都相乘得到一个数 |
floor(A) | 对A的每个元素都向下四舍五入(ps:0.9 -> 0;0.5->0) |
ceil(A) | 对A的每个元素都向上四舍五入(ps:0.1->1;0.5->1) |
max(rand(3),rand(3)) | 随机生成3阶随机数矩阵,每个元素都比较,每个元素都在两个矩阵中取对应的较大的那个形成新的矩阵 |
max(A,[],1) | A矩阵里每一列的最大值(1表示取A矩阵第一个维度的最大值) |
max(A,[],2) | A矩阵里每一行的最大值 |
max(A) | 默认情况下,返回的是每一列的最大值 |
max(max(A)) | 找出矩阵里所有元素里的最大值 |
A(:) | 将矩阵变为列向量,一列一列排起来 |
max(A(:)) | 把A当成向量,找出最大值 |
sum(A,1) | 把每一列的数相加 |
sum(A,2) | 把每一行的数相加 |
A .* eye(3) | 得到A的对角线,其余都是0的矩阵 |
sum(sum(A .* eye(3))) | 得到A矩阵对角线的总和 |
sum(sum(A.* flipud(eye(3)))) | 得到副对角线的总和 |
filpud() | 向下翻转 |
filpup() | 向上翻转 |
pinv(A) | 求A的伪逆矩阵(就算不可逆也能计算) |
绘制图像
t=[0:0.01:0.98]
y1=sin(2pi4*t);
plot(t,y1) #绘制x轴为t的函数图
hold on #将新图画在旧图上
plot(t,y2,'r') #画一条新的线在原图上,并且用红色绘制
xlabel('time') #给x轴命名
ylabel('value') #给y轴命名
legend('sin','cos') #为绘制的线标记名字
title('my plot') #为图加上标题
print -dpng 'myplot.png' #打印绘制的图病保存为图片
close #关闭文件
figure(1); plot(t,y1) #给绘制的图片添加编号
subplot(1,2,1); #将图像变成1x2的格子,前面两个参数可以调整坐标轴的大小,伸缩
subplot(1,2,2); #在同一个平面上绘制第二张图,第三个参数为绘制的图的索引
axis([0.5 1 -1 1]) #前两个参数设置了X轴的刻度范围,后两个参数设置了Y轴的刻度范围
clf; #清除图像
imagesc(A) #绘制矩阵A
imagesc(A),colorbar,colormap gray #将绘制的图变成灰度分布图(colorbar在右边增加了一个颜色条)
循环控制语句
for i=1:10,
v(i)=2*i;
end; 遍历1到10,每次乘以2
indices=1:10;
for i= indices,
disp(i);
end; 效果同上
i=1;
octave:2> while i<=5,
v(i)=100;
i=i+1;
end; while写法
i=1;
octave:7> while true,
v(i)=999;
i=i+1;
if i==6,
break;
end;
end; 添加了if的while
if v(1)==1,
disp('1');
elseif v(1)==2,
disp('2')
else
disp('else')
end; else-if写法