matlab结构体、数组和单元数组类型的创建

@

matlab结构体类型

  1. 通过字段赋值创建结构体

    创建格式:

    结构体名称.字段名称

    样例:

    >> student.name='Alan';
    >> student.grade=6;
    >> student.subject={'Chinese','math','English'};
    >> student student = 包含以下字段的 struct: name: 'Alan'
    grade: 6
    subject: {'Chinese' 'math' 'English'} >> student.result={99,99,99}; %可以对已经创建好的结构体再次增加结构体成员
    >> student student = 包含以下字段的 struct: name: 'Alan'
    grade: 6
    subject: {'Chinese' 'math' 'English'}
    result: {[99] [99] [99]} >>
  2. 使用struct函数来创建

    单个结构体创建使用语法:

    StrArray=struct('field1',var1,'field2',var2,'field3',var3,'field4',var4,...'fieldn',varn,)

    样例:

    >> S=struct('A','AAA','B',99,'C',100)
    
    S = 
    
      包含以下字段的 struct:
    
        A: 'AAA'
    B: 99
    C: 100

    结构体数组的创建:

    • 创建元素相同的结构体数组

      使用repmat函数:

      >> help repmat
      repmat - 重复数组副本 此 MATLAB 函数 返回一个数组,该数组在其行维度和列维度包含 A 的 n 个副本。A 为矩阵时,B 大小为 size(A)*n。 B = repmat(A,n)
      B = repmat(A,r1,...,rN)
      B = repmat(A,r)
      另请参阅 bsxfun, kron, meshgrid, ndgrid, repelem, reshape repmat 的参考页
      名为 repmat 的其他函数

      注意:如果在要复制的元素后面只有一个n,将生成一个矩阵,行和列对被复制的数均扩大n倍。如果是从1-n的数则生成的是一个一维的数组。


      >> repmat(32,5) ans = 32 32 32 32 32
      32 32 32 32 32
      32 32 32 32 32
      32 32 32 32 32
      32 32 32 32 32 >> student student = 包含以下字段的 struct: name: 'Alan'
      grade: 6
      subject: {'Chinese' 'math' 'English'}
      result: {[99] [99] [99]}
      >> C=repmat(student,1,2,3,4,5) C = 包含以下字段的 5-D struct 数组: name
      grade
      subject
      result >> C(1) ans = 包含以下字段的 struct: name: 'Alan'
      grade: 6
      subject: {'Chinese' 'math' 'English'}
      result: {[99] [99] [99]} %% 如果被复制的数原本就是一个数组的话
      >> S=repmat(struct('A','AAA','B',98,'C',100),1,2) S = 包含以下字段的 1×2 struct 数组: A
      B
      C
      >> B=repmat(S,3) B = 包含以下字段的 3×6 struct 数组: %行和列同样都乘n A
      B
      C

      结构体创建:

      >> S=repmat(struct('A','AAA','B',98,'C',100),1,2)
      
      S = 
      
        包含以下字段的 1×2 struct 数组:
      
          A
      B
      C >> S(1) ans = 包含以下字段的 struct: A: 'AAA'
      B: 98
      C: 100 >> S(2) ans = 包含以下字段的 struct: A: 'AAA'
      B: 98
      C: 100 >>

      结构体数组的调用方式就是结构体数组名+(下标) 下标从1开始

    • 创建结构体数组且元素不同

    写完成员名,对其赋值时用大括号括起来写多个值。

    >> ss=struct('A',{'AAA','BBB'},'B',{98,99})
    
    ss = 
    
      包含以下字段的 1×2 struct 数组:
    
        A
    B >> ss(1) ans = 包含以下字段的 struct: A: 'AAA'
    B: 98 >> ss(2) ans = 包含以下字段的 struct: A: 'BBB'
    B: 99 >>

    如果仅仅对一个结构体元素进行完全初始化,matlab会把其他没有初始化的元素缺少的值从上一个初始过的元素对应位置的值复制到缺少的地方来。

    样例:

    cc = 
    
      包含以下字段的 1×2 struct 数组:
    
        A
    B >> cc(1) ans = 包含以下字段的 struct: A: 'AAA'
    B: 50 >> cc(2) ans = 包含以下字段的 struct: A: 'AAA'
    B: 85

    样例2:

    >> dd=struct('A','AAA','B',{98,87,100})
    
    dd = 
    
      包含以下字段的 1×3 struct 数组:
    
        A
    B

数组类型

阵列(数组)强调对元素的运算,而矩阵则采用线性代数的运算方式。

  1. 直接赋值法创建数组
>> arr=[1 2 3 4 5 6 7 8 9]

arr =

     1     2     3     4     5     6     7     8     9

>>
  1. 使用 :来创建数组

    • 从i开始,默认步长为1,到k结束。k可以是非整数,如果是非整数,最后的上界小于等于k

      Array=i:k
      >> arr1=1:9				%生成升序数组
      
      arr1 =
      
           1     2     3     4     5     6     7     8     9
      
       >> arr3=10-arr1					%生成降序数组
      
      arr3 =
      
           9     8     7     6     5     4     3     2     1
      
      >> arr4=1:9.5						%如果是非整数,最后的上界小于等于k
      
      arr4 =
      
           1     2     3     4     5     6     7     8     9
    • 生成以 i开始,以j为步长,到k结束的数组.i,j,k不必为整数。如果j=0,返回一个空数组;如果i>k,返回一个空数组

      Array=i :j : k
      >> arr5=2:2:14
      
      arr5 =
      
           2     4     6     8    10    12    14
      
      >> arr6=14:2:2
      
      arr6 =
      
        空的 1×0 double 行向量
      
      >> arr7=2:0:8
      
      arr7 =
      
        空的 1×0 double 行向量
      
      >> arr8=1.2:2.3:8.4
      
      arr8 =
      
          1.2000    3.5000    5.8000    8.1000
      
      >>
    • 知道数组上界和下界创建已知固定元素个数的等差数组

      使用函数linspace(a,b,n),n必须为整数!

      >> help linspace
      linspace - 生成线性间距向量 此 MATLAB 函数 返回包含 x1 和 x2 之间的 100 个等间距点的行向量。 y = linspace(x1,x2)
      y = linspace(x1,x2,n) 另请参阅 colon, logspace linspace 的参考页
      名为 linspace 的其他函数 >>

      样例:

      >> arr9=linspace(2,8,4)
      
      arr9 =
      
           2     4     6     8
      
      >> arr10=linspace(2.1,8.4,3)
      
      arr10 =
      
          2.1000    5.2500    8.4000
      
      >>
  2. 创建空数组

  当数组的元素个数为0时,称数组为空,空数组

>> empty=[]

empty =

     []

单元数组类型

  单元数组的每一个元素被称为单元,每一个单元可以版阔任意类型,可以是数值数组,可以是字符串数组等等。每一个单元都可以由不同的内存和内存占用空间。单元数组也可以是一维、二维或者多维。单元数的存在意义是为了把不同类型的数据归并到一个数组中。

单元数组的创建

  1. 直接赋值法创建。

    单元数组采用大括号{}来创建,使用,或者空格来区分相邻的单元,使用;来区分行。

    >> C={'x',[1,2;3,4];pi,'sefd'}
    
    C =
    
      2×2 cell 数组
    
        {'x'     }    {2×2 double}
    {[3.1416]} {'sefd' } >>
  2. 采用函数cell来创建空数组

    >> help cell
    cell - 元胞数组 元胞数组是一种包含名为元胞的索引数据容器的数据类型,其中的每个元胞都可以包含任意类型的数据。元胞数组通常包含文本列表、文本和数字的组合或者不同大小的数值数组。通过将索引括在圆括号
    () 中可以引用元胞集。使用花括号 {} 进行索引来访问元胞的内容。 C = cell(n)
    C = cell(sz1,...,szN)
    C = cell(sz)
    D = cell(obj) 另请参阅 cell2mat, cell2struct, cell2table, iscell, mat2cell, num2cell,
    struct2cell, table2cell cell 的参考页
    名为 cell 的其他函数 >>

    调用格式:

    cellname=cell(m,n)						%	创建一个mxn的单元空数组

    样例:

    >> cell(2,2)
    
    ans =
    
      2×2 cell 数组
    
        {0×0 double}    {0×0 double}
    {0×0 double} {0×0 double} >> cell(2) % 仅输入mx相当于生成mxm的单元数组 ans = 2×2 cell 数组 {0×0 double} {0×0 double}
    {0×0 double} {0×0 double} >> cell(1) ans = 1×1 cell 数组 {0×0 double} >>

    空单元数组的存在意义:

      单元数组的内存空间的动态分配的,使用cell函数创建空数组是为了给该数组分配连续的存储空间,以此节约内存占用,提高效率。

  3. 单元数组的寻访

    对单元数组C,C(m,n)指的是单元数组中的m行n列的单元,而C{m,n}指的是单元数组中m行n列单元的内容。

    样例:

>> C

C =

  2×2 cell 数组

    {'x'     }    {2×2 double}
{[3.1416]} {'sefd' } >> C(2,2) ans = 1×1 cell 数组 {'sefd'} >> C{2,2} ans = 'sefd' >>
  1. 单元数组的操作
  • 对单元数组的单元进行编辑

    编辑方式:左边是单元数组第m行n列的内容,右边将被赋给单元的值。

    C{1,1}='adfdsd'
  • 单元数组的合并:与字符串合并类似,只不过用的大括号{}。

    %	已知单元数组 a,b;合并a b;
    c={a b}
    >> C
    
    C =
    
      2×2 cell 数组
    
        {'x'     }    {2×2 double}
    {[3.1416]} {'sefd' } >> D=repmat(C,1) D = 2×2 cell 数组 {'x' } {2×2 double}
    {[3.1416]} {'sefd' } >> E={C D} E = 1×2 cell 数组 {2×2 cell} {2×2 cell} >>
  • 单元数组指定单元的删除:只需要将空矩阵赋给该单元。

    C{m,n}=[]
    >> C{1,1}=[]
    
    C =
    
      2×2 cell 数组
    
        {0×0 double}    {2×2 double}
    {[ 3.1416]} {'sefd' } >>
  • 利用函数reshape修改数组的形状

    调用格式:将数组C变成M行,N列的新数组并返回给trimC,而数组C的形状并没有变。

    trimC=reshape(C,M,N)
    >> help reshape
    reshape - 重构数组 此 MATLAB 函数 使用大小向量 sz 重构 A 以定义 size(B)。例如,reshape(A,[2,3]) 将 A 重构为一个 2×3 矩阵。sz
    必须至少包含 2 个元素,prod(sz) 必须与 numel(A) 相同。 B = reshape(A,sz)
    B = reshape(A,sz1,...,szN) 另请参阅 colon, permute, repmat, shiftdim, squeeze reshape 的参考页
    名为 reshape 的其他函数 >>

    样例:

    >> D
    
    D =
    
      2×2 cell 数组
    
        {'x'     }    {2×2 double}
    {[3.1416]} {'sefd' } >> R=reshape(D,4,1) R = 4×1 cell 数组 {'x' }
    {[ 3.1416]}
    {2×2 double}
    {'sefd' } >> D %D没有发生改变 D = 2×2 cell 数组 {'x' } {2×2 double}
    {[3.1416]} {'sefd' } >> D=reshape(D,4,1) % 将D自身重构 D = 4×1 cell 数组 {'x' }
    {[ 3.1416]}
    {2×2 double}
    {'sefd' } >>

matlab结构体、数组和单元数组类型的创建的更多相关文章

  1. matlab学习笔记(一)单元数组

    matlab学习笔记(一)单元数组 1.floor(x) :取最小的整数 floor(3.18)=3,floor(3.98)=3 ceil(x)  :取最大的整数 ceil(3.18)=4,ceil( ...

  2. C# 结构体定义 转换字节数组 z

    客户端采用C++开发,服务端采用C#开发,所以双方必须保证各自定义结构体成员类型和长度一致才能保证报文解析的正确性. [StructLayoutAttribute(LayoutKind.Sequent ...

  3. 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组

    原文链接:C语言结构体里的成员数组和指针 复制例如以下: 单看这文章的标题,你可能会认为好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Lar ...

  4. (原创)结构体自动化转为char数组的实现

    结构体自动化转换为char数组这个需求,来自于一个最近开发的一个项目,在项目开发过程中遇到一个小问题,需要将各种结构体拷贝到char数组中,这对于一个简单的结构体来说是很简单的事情,比如下面这个只有整 ...

  5. Swift超详细的基础语法-结构体,结构体构造器,定义成员方法, 值类型, 扩充函数

    知识点 基本概念 结构体的基本使用 结构体构造器(构造函数/构造方法) 结构体扩充函数(方法), 又称成员方法 结构体是值类型 1. 基本概念 1.1 概念介绍 结构体(struct)是由一系列具有相 ...

  6. Matlab结构体定义

    定义一个Matlab结构体的代码,以飞行器为例: classdef flightpro properties pos = [ ]; RGB = [ ]; rate; type; end end

  7. 深入理解指针—>结构体里的成员数组和指针

    单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如 ...

  8. C语言结构体里的成员数组和指针

    struct test{ int i; char *p; }; struct test *str; ; char *b = "ioiodddddddddddd"; str = (s ...

  9. JNA结构体参数传递,Java数组

    JNA以结构体数组为参数进行调用: ////// C++ // student 结构体定义 typedef struct { int age; char name[20]; }Student; //  ...

随机推荐

  1. 鸿蒙的js开发部模式16:鸿蒙布局Grid网格布局的应用一

    鸿蒙入门指南,小白速来!从萌新到高手,怎样快速掌握鸿蒙开发?[课程入口]目录:1.Grid简介2.使用Grid布局实现的效果3.grid-row-gap和grid-colunm-gap属性4.< ...

  2. spring-ioc心得

    1.创建spring容器,严格的来说就是创建ClassPathXmlApplicationContext对象, 该对象属于ApplicationContext类型(是一个接口)该接口下有很多实现类, ...

  3. DRF 三大认证之身份认证

    目录 路由组件补充 三大认证 一.身份认证 1.如何进行身份认证 2.jwt认证规则原理 3.jwt的组成 4.jwt的使用方法 4.1 签发算法 4.2 校验算法 4.3 刷新算法 二.权限认证 三 ...

  4. 后端程序员之路 5、.conf、libconfig

    .conf在linux里随处可见,作用基本跟windows的.ini差不多 libconfighttp://www.hyperrealm.com/libconfig/libconfig_manual. ...

  5. Mybatis检查SQL注入

    Mybatis 的 Mapper.xml 语句中 parameterType 向SQL语句传参有两种方式:#{ } 和 ${ }. 使用#{ }是来防止SQL注入,使用${ }是用来动态拼接参数. 如 ...

  6. 来,Consul 服务发现入个门(一看就会的那种)

    前言 在微服务架构中,对于一个系统,会划分出多个微服务,而且都是独立开发.独立部署,最后聚合在一起形成一个系统提供服务.当服务数量增多时,这些小服务怎么管理?调用方又怎么能确定服务的IP和端口?服务挂 ...

  7. 【python+selenium的web自动化】- 元素的常用操作详解(二)

    如果想从头学起selenium,可以去看看这个系列的文章哦! https://www.cnblogs.com/miki-peng/category/1942527.html ​ 本篇主要内容:1.鼠标 ...

  8. 2019HDU多校第一场 6582 Path 【最短路+最大流最小割】

    一.题目 Path 二.分析 首先肯定要求最短路,然后如何确定所有的最短路其实有多种方法. 1 根据最短路,那么最短路上的边肯定是可以满足$dist[from] + e.cost = dist[to] ...

  9. incubator-dolphinscheduler 如何在不写任何新代码的情况下,能快速接入到prometheus和grafana中进行监控

    一.prometheus和grafana 简介 prometheus是由谷歌研发的一款开源的监控软件,目前已经贡献给了apache 基金会托管. 监控通常分为白盒监控和黑盒监控之分. 白盒监控:通过监 ...

  10. 实验: survivor放不下的对象进入老年代

    实验一: 存活对象包含 小于survivor大小的对象 + 大于survivor的对象 private static final Integer _1MB = 1024 * 1024; /** * - ...