创建一个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(:)
之后再执行查找。可以返回两个值,第一个是找到的结果的行数,第二个找到的结果的列数。
[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)
矩阵求逆
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; %
第一个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;