本文笔记来自《MATLAB-R2014a完全自学一本通》,记录了一些常用的操作,更复杂的操作请看书本~
【目录】
1.矩阵
-
1.矩阵运算
a. 求矩阵中元素的平均值
-
2.矩阵结构
a. 矩阵的构造
b. 矩阵大小及结构的改变
c. 矩阵的数据类型
d. 矩阵占用的内存 -
3.矩阵的保存和加载
a. 矩阵在MATLAB中的存储方法
b. 矩阵元素的寻址
【正文】
1.矩阵
矩阵与数组的联系主要体现在:在MATLAB中,矩阵是以数组的形式存在的,因此一维数组相当于向量,二维数组相当于矩阵,所以矩阵是数组的子集。
1.矩阵运算
矩阵运算包括矩阵求和、求平均、求最大最小值等
例如:求矩阵中元素的平均值
分为按列平均、按行平均和全部平均
A=rand(3)
a=mean(A,1) %按列平均
b=mean(A,2) %按行平均
c=mean(A(:)) %全部平均
结果如下:
2.矩阵结构
矩阵的基本操作主要有矩阵的构建、维度、矩阵大小的改变、矩阵的索引、矩阵属性信息的获取、矩阵结构的改变等。
在MATLAB中,单个实数或者复数都是以矩阵的形式存储的,单个数据或由单个数据构造的矩阵都是标量。
a. 矩阵的构造
-
空矩阵
[]
默认为二维 -
创建一个三维零矩阵X:
X=zeros(8,10,50)
可以理解为有50个8行10列的矩阵 -
矩阵中符号的意义:
逗号和空格意义相同,用于分隔同行元素;
“;”用于分隔不同的行; -
矩阵下标的引用:
分为双下标索引和单下标索引
双下标索引:A(2,3)
表示矩阵第二行第3列
单下标索引:A(7)
在4x4的矩阵中表示第3行第2列的数(列元素优先,按列排序进行重组,成为一维数组)
下标为:
时,表示下标为所有的行或列,是行还是列要视情况而定
下标为i:j
时,表示下标为对应i到j的行或列
下标为[i1,i2,...]
时,表示下标为对应i1,i2,...的行或列
双下标索引和单下标索引的转换:
双变单:IND=sub2ind(siz,i,j);
siz可直接用size(A)表示,表示转换矩阵的列数,IND表示转换后的单下标索引值;
单变双:[I,J]=ind2sub(siz,ind)
,I和J分别表示单值二维索引的行号和列号
end
可以表示一串数字中的最后一个,例如:A(2:end)
表示矩阵A的单下标索引从第2行或第二列到最后一行或一列 -
矩阵结构的判断
是否为空:isempty(A)
是否是单元素的标量矩阵:isscalar(A)
是否是只有一行或一列元素的一维向量:isvector(A)
数组是否是稀疏矩阵:issparse(A)
b. 矩阵大小及结构的改变
-
矩阵的大小
矩阵的维度的获取:n=ndims(X)
矩阵各维度长度的获取:
[m,n]=size(X)
,其中````size(X,dim)```可以获得指定维度的长度,1表示行,2表示列n=length(X)
表示获取矩阵最长维的长度
获取矩阵元素的个数:n=numel(X)
-
矩阵的旋转与维度的改变
行和列的逆序排列:分别用fliplr(X)
、flipud(X)
逆时针旋转,90°和kx90°rot90(X)
、rot90(X,k)
将矩阵A和B组合成一个dim维的多维矩阵:cat(dim,A,B)
,举个栗子:A=[1 2 3],B=[4 5 6],dim=3,那么最后的矩阵C中矩阵的排列方式为:
这里也可以看出向量的默认排列方式是按列排列(在内存中是按列存储)矩阵A和B需要具有相同的维度,cat
函数,还有一些其它函数形成的多维矩阵都是后两维表示行数和列数,而第一维可以理解成是一行C。
将一维或二维矩阵进行升序或降序排序:sort(A)
,二维矩阵时,对每一列分别进行排序;sort(A,dim)
按dim指定的方向进行排序,dim=1按列排序,dim=2按行排序;sort(A,dim,mode)
mode='ascend'为升序,mode='descend'为降序;得到排序后元素在原矩阵中的行位置或列位置的索引IX:[B,IX]=sort(A,...)
-
删除矩阵元素
见3中 3)矩阵元素的赋值
c. 矩阵的数据类型
下表是矩阵数据类型的测试函数,从中也可以看出矩阵的数据类型的种类
下面是cell单元的相关内容:
cell单元(也叫矩阵的元胞类型结构)
cell每个单元的数据之间用逗号,
隔开,最外层用{}
大括号括起来,单元内可以用不同格式的数据
Matlab中的向量是按列存储的(按列存储是指在多维数组内存中是一列一列逐个放元素的),关于为什么按列存储,比较合理的说法是在设计Matlab语言时,最流行的语言是Fortran,而Fortran恰好是按列存储。
看这个讨论可以更加了解:matlab和Fortran二维数组为什么按列优先存储?
创建单行cell
创建多行cell
cell(m,n)表示创建一个m行n列的cell:
向其中填数据:
获取元胞中的数据:
输入:
A{1,2}(1)
返回2
A{1,2}
(方括号)返回的是cell变成的矩阵,所以可以通过A{1,2}(1)
得到其中的第1个元素,而通过A(1,2)
(圆括号)返回的是一个矩阵,矩阵中的元素是cell类型的,所以需要写成以下方式:
x=A(1,2);
x{1}; %得到cell变成的矩阵
x(1) ; %到此得到第一个元素
d. 矩阵占用的内存
用whos
命令:
3.矩阵的保存和加载
a. 矩阵在MATLAB中的存储方法
按列优先的原则依次放置,例如矩阵:
(就是上面出现过的矩阵~),它的存储方式在空间中是这样的:
1 | 2 | 3 | 4 | 5 | 6 |
而不是这样的:
1 | 4 | 2 | 5 | 3 | 6 |
b. 矩阵元素的寻址
1)下标寻址方法:
在1中矩阵的构造的矩阵下标索引部分已经记录了具体的使用方法
2)线性寻址
单一下标,该下标是通过矩阵的双下标通过换算得到的,A(i,j)
的单一下标为:A((j-1)·m+i)
,j是所在列,m是总行数
3)矩阵元素的赋值
为单个元素赋值的例子:A(i,j)=value
删除矩阵中的所有元素:
A=[];
4)矩阵元素的扩展与删除
用例子来理解,对矩阵:
A=[1,2;3,4]
%结果:
% A =
%
% 1 2
% 3 4
整行赋值:
A(3,:)=3
%结果
% A =
%
% 1 2
% 3 4
% 3 3
A(4,2)=5;
%结果
% A =
%
% 1 2
% 3 4
% 3 3
% 0 5
默认补一行,没有指定数值的地方会补0
A(2,:)=[]
%结果
% A =
%
% 1 2
% 3 3
% 0 5
此外,还有矩阵合并的函数可以进行更多矩阵的操作:
矩阵合并函数用到时继续更新🏃
网友评论