(1)得到m×n的±1随机分布的矩阵
a=rand(3,4);
>> a=(a>0.5)-(a<0.5);
得到±1随机分布的3×4的矩阵如下:
(2)删除矩阵中某列所有元素(不)等于x的行,删除矩阵中某行所有元素(不)等于y的列
在matlab编码过程中,经常会遇到提取指定数据的问题,比如在m×n的矩阵中,矩阵的第二列包含10年的所有月份,而你只想研究10年里每年3月的数据,这时候就需要提取该矩阵所有包含3月的行。一般操作如下:
m=zeros(24,3);%生成24行3列的零矩阵
>> m(1:12,2)=1:12;
>> m(13:24,2)=1:12;%其中第2列为两年的月份,即1~12,1~12
%%现要提取其中包含3月份的所有行
k=[];%创建一个空矩阵用来存放包含3月份数据的行号
for i=1:length(m)%遍历矩阵m
if m(i,2)==3%如果i行2列的元素等于3
k=[k;i];%记录下行号
end
end
x=m(k,:)%将矩阵m中被记录的行号的数据赋值给x矩阵
x =
0 3 0
0 3 0
考虑到其编码复杂性及处理效率较低,笔者自己摸索出了一个较为高效的语句,如下两个例子分别删除指定行和指定列,提取指定行和列亦然,请读者稍作变通,不作赘述。
a=[1 2 3 4;5 6 7 8; 2 3 5 6 ;3 3 3 3]
a =
1 2 3 4
5 6 7 8
2 3 5 6
3 3 3 3
>> a(a(:,2)~=3,:)=[]%遍历第2列,删除其中不等于3的元素所在的行
a =
2 3 5 6
3 3 3 3
a=[1 2 3 4;5 6 7 8; 2 3 5 6 ;3 3 3 3]
a =
1 2 3 4
5 6 7 8
2 3 5 6
3 3 3 3
>> a(:,a(3,:)==5)=[]%遍历第三行所有元素,如果该元素等于5,则删除其所在列
a =
1 2 4
5 6 8
2 3 6
3 3 3
(3)save的用法
(1)保存矩阵到.txt文件中
a=rand(3)%生成3×3的矩阵
a =
0.1419 0.7922 0.0357
0.4218 0.9595 0.8491
0.9157 0.6557 0.9340
save a.txt -ascii a%将该矩阵保存到a.txt文件中,该文件位于当前所在目录
b=importdata('a.txt');读取a.txt中的数据到b矩阵中
(2)保存变量到.mat文件中
save 7_19%将当前工作区所有变量保存到7_19.mat文件中,下次直接双击7_19.mat文件,即可得到之前的变量