Octave基本操作

文章目录

      • manipulating data
      • plotting
      • control statements, iterate

manipulating data

创建一个3*2的矩阵

a=[1 2 ; 3 4 ; 5 6]

size(a)是一个[3 2]的矩阵
size(a)

size(size(a))是一个[1 2]的矩阵
size(size(a))

size(a,1)和size(a,2)可以分别查看行与列数,相当于numpy中的axis=0和1,只不过octave下标和坐标轴标号是从1开始的
size(a,1) size(a,2)

size(a)一般用在矩阵上,length(v)一般用在向量上

ls, cd, pwd和linux一样

读取数据(默认应该是空格分隔,如果不加赋值语句,则自动将文件名做为变量名)
load features.dat,会读取当前工作目录下的features.dat文件,以空格分隔之后变成矩阵,如果文件中不包含名称信息,会生成一个名为features的变量

save hello.mat v 将v这个变量存到hello.mat这个文件中
然后用clear清除所有变量
再用load hello.mat读取,会自动生成一个名为v的变量

save hello.txt v -ascii 存成对用户更友好的格式,但是去掉了变量的信息,比如名称、行列数等

who显示变量列表,whos显示变量详情,clear清除变量,均可以加参数

a(m:n)不管对于矩阵还是变量,都只显示m-n个元素,矩阵是以列-行来取数的,比如:

[1 2 3]
[4 5 6]
[7 8 9](3:5) = [7 2 5]

a(3,2)取3行2列的元素

矩阵一般用a(:, [1 3]) :所有行,1和3列。a(:, [1:3]) 所有行,1-3列。 a([1:3],:) 1-3行,所有列

可以用切片的方式进行赋值,当然目标和数据的形状要是一样的
m=magic(3) 修改第2行:m(2,:)=[1 1 1] 在最后增加一行:m(4,:)=[1 1 1],如果m(n,:)=[x x x] ,n>行数,就会把数据增加到最后

append的方式增加数据:
m = [m, [ 1; 1; 1; 1; 1]]在最后增加一列, 在最前面增加一列m=[[1; 1; 1],m]

m(:) 把矩阵的元素变成向量

c=[a b] c=[a,b]横向组合两个矩阵,c=[a;b]纵向组合两个矩阵

a=[1 2;3 4; 5 6] b=[11 12;31 41; 25 26] c=[1 1;2 2]
a*b点乘
a.*b元素乘
a/b点除
a./b*元素除
a^2 a*a点乘,因为形状的关系,a是方阵才能^2
a.^2 元素平方
前面带了.的都是元素运算
log
exp
abs

a+ones(size(a)) 可以这样自加1,也可以直接a+1。。。。。。
a' 转置
max(a) 会返回两个值,一个是最大值,另外一个是位置。(如果参数是矩阵,返回两个向量)
max(a,[],1) 按列查找最大值(默认行为)
max(a,[],2)按行查找
max(a,n) 不管a是向量还是矩阵,每个元素与n比较返回最大值

a元素比较,就是每个元素与标量比较
find(a 把a中小于n的元素的下标找出来,如果a是矩阵,相当于运行a(:)之后再执行查找。可以返回两个值,第一个是找到的结果的行数,第二个找到的结果的列数。
[r, c] = find(a>1)

magic(n) 生成一个n*n的矩阵,包含1- n 2 n^2 n2的数字,每一行、每一列和每个对角上的数加起来的和相等

sum(a) 每个元素相加

prod(a) 每个元素的平方和。a是向量时返回一个标量,a是矩阵时每列一个标量

floor(a) 舍去小数

ceil(a) 四舍五入

rand(n) 0-1之间均匀随机分布n*n的矩阵

max(rand(3), rand(3)) 两个3*3矩阵之间的元素最大值(相同位置的值之间比较)

max(a(:)) max(max(a))

m = magic(10) sum(m,1) 纵向取和 sum(m,2) 横向取和

sum(sum(m.*eye(5))) 计算m主对角线上元素之和

flipud(eye(5)) 翻转矩阵,可以用来取逆对角线

pinv(m) 矩阵求逆

plotting

t = [0:0.01:0.98];
y1= sin(2*pi*4*t);
y2= cos(2*pi*4*t);
plot(t,y1);
hold on;
plot(t,y2,'r');
xlabel('time');
ylabel('value');
legend('sin', 'cos');
title('my plot');
cd 'f:';
print -dpng 'myplot.png';
close;

多张图同时显示:

t = [0:0.01:0.98];
y1= sin(2*pi*4*t);
y2= cos(2*pi*4*t);
figure(1); plot(t,y1);
figure(2); plot(t,y2,'r');

多张图在同一画板上

subplot(1,2,1);
plot(t,y1);
subplot(1,2,2);
plot(t,y2,'b');
axis([x_lo, x_hi, y_lo, y_hi]); %设置坐标范围,x_lo:x轴最小值,以此类推
clf; %清除图像,并不会关闭画板

灰度图???

m = magic(5);
imagesc(m);
imagesc(m), colorbar, colormap gray; % 

control statements, iterate

第一个for循环语句:

v = zeros(10,1);
for i=1:10,
  v(i) = 2^i;
end;
v

也可以:

idx = 1:10;
for i=idx, disp(i);
end;

while:

i = 1
while i<=5,
	v(i) = 100;
	i+=1;
end;

if & while:

i = 1;
while true,
  v(i) = 999;
  i = i+1;
  if i == 4,
  	break;
 end;
end;

你可能感兴趣的:(基础知识)