美文网首页MATLAB
2-matlab使用笔记之数组与矩阵

2-matlab使用笔记之数组与矩阵

作者: aasdfghjkll | 来源:发表于2019-06-18 23:17 被阅读1次

           本文笔记来自《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. 矩阵大小及结构的改变

    • 矩阵的大小
      \diamond 矩阵的维度的获取:n=ndims(X)

      \diamond 矩阵各维度长度的获取:[m,n]=size(X),其中````size(X,dim)```可以获得指定维度的长度,1表示行,2表示列

      \diamond n=length(X)表示获取矩阵最长维的长度
      \diamond 获取矩阵元素的个数:n=numel(X)

    • 矩阵的旋转与维度的改变
      \diamond 行和列的逆序排列:分别用fliplr(X)flipud(X)
      \diamond 逆时针旋转,90°和kx90°rot90(X)rot90(X,k)
      \diamond 将矩阵A和B组合成一个dim维的多维矩阵:cat(dim,A,B),举个栗子:A=[1 2 3],B=[4 5 6],dim=3,那么最后的矩阵C中矩阵的排列方式为:
      C=\left( \begin{matrix} 1 & 4\\ 2 & 5 \\ 3 & 6 \end{matrix} \right)
              这里也可以看出向量的默认排列方式是按列排列(在内存中是按列存储)矩阵A和B需要具有相同的维度,cat函数,还有一些其它函数形成的多维矩阵都是后两维表示行数和列数,而第一维可以理解成是一行C。
      \diamond将一维或二维矩阵进行升序或降序排序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二维数组为什么按列优先存储?

    \diamond 创建单行cell

    \diamond 创建多行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中的存储方法
    列优先的原则依次放置,例如矩阵:
    C=\left( \begin{matrix} 1 & 4\\ 2 & 5 \\ 3 & 6 \end{matrix} \right)
    (就是上面出现过的矩阵~),它的存储方式在空间中是这样的:

    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
    

    此外,还有矩阵合并的函数可以进行更多矩阵的操作:

    矩阵合并函数

    用到时继续更新🏃

    相关文章

      网友评论

        本文标题:2-matlab使用笔记之数组与矩阵

        本文链接:https://www.haomeiwen.com/subject/ahqlgqtx.html