Matlab基础之单元数组和结构数组

前言:

单元数组和结构数组是一种新的数据类型,能将不同类型、不同维数的数组组合在一起,从而方便对不同的数据类型方便管理和维护。

如上图所示的2*2矩阵中,分别存储着四种不同的数据类型,分别为数组、字符串、空矩阵、复数矩阵。

一、单元数组(细胞数组)

 

在单元数组中,通过单元数组的名字是不能访问相应的元素,只能访问对应的索引号,因为单元数组中存储的是指向某种数据结构的指针。

创建并赋值:

1.赋值语句创建:分为内容创建和单元索引创建

内容创建:一个一个元素进行创建,用大括号

c{,}=[ ; ];
c{,}=[ ; ; ];
c{,}=[];
c{,}='i love a pig';
b=c(,);
d=c{,};
c
b
d
%%%%%%
result:
c = [2x2 double] [3x2 double]
[] 'i love a pig'
b = 'i love a pig' d =
i love a pig

单元索引创建:一个一个单元进行创建,用小括号

c(,)={[ ; ]};
c(,)={[ ; ; ]};
c(,)={[]};
c(,)={'i love pig'};
b=c(,);
d=c{,};
c
b
d
%%%%%%
result:
c = [2x2 double] [3x2 double]
[] 'i love a pig'
b = 'i love a pig' d =
i love a pig

注意:单元矩阵与普通矩阵名字不能相同,否则偶同矩阵覆盖单元矩阵。

2.cell()函数创建:

>> b=cell(2,3)
b = 
    []    []    []
    []    []    []

对它赋值如上面的方法,分内容和单元创建两种方法。

3.用大括号直接创建并赋值:

如3*4的单元矩阵

>> b={[2 3;4 6],'you are a pig',[],[2;2;1];[2 3;4 6],'you are a pig',[],[2;2;1];[2 3;4 6],'you are a pig',[],[2;2;1]}
b = 
    [2x2 double]    'you are a pig'    []    [3x1 double]
    [2x2 double]    'you are a pig'    []    [3x1 double]

[2x2 double]    'you are a pig'    []    [3x1 double]

总结:第三种创建方法最简单和方便!

4.如何显示

上面的方法也介绍如何显示单元数组,但只能显示其中一个元素。

1)用celldisp()函数能全部整体显示单元数组的细节内容。

2)用cellplot()函数以图形方式展现:

c{,}=[ ; ];
c{,}=[ ; ; ];
c{,}=[];
c{,}='i love a pig';
cellplot(c)

结果如图:2*2的单元矩阵,红色表示占用内存,白色相反,字符串最后怎么没开辟内存?

二、结构数组

引入结构数组原因:普通数据和单元数组只能通过下标访问数组元素,而结构数组是元素带名字的,也可以存储不同类型的元素,元素被称为域,数组名.域名可以访问结构数组的具体元素值。

1.创建

赋值语句创建:

student().name='bob';
student().sex='man';
student().age='';
student().score=[ ];
student().name='Plimmer';
student().sex='man';
student().age='';
student().score=[ ];
student().name='liky';
student().sex='girl';
student().score=[ ];

比如:执行student(2).age  返回 ans =12;

执行student(3).age  返回 ans=[];

执行student(2)   返回
ans = 
     name: 'Plimmer'
      sex: 'man'
      age: '12'
    score: [98 9 100]

struct()函数创建:

帮助文档的定义:s = struct(field1,value1,...,fieldN,valueN)=sstruct(域名,值,域名,值,域名,值,。。。。),上面的用struct()来实现:

>> student()=struct('name','bob','sex','man','age',,'score',[  ]);
student()=struct('name','Plimmer','sex','man','age',,'score',[ ]);
student()=struct('name','liky','sex','girl','age','','score',[ ]);
%operate:
>> student().name%访问数组名student()的域名name
ans =
Plimmer
>>student().hobby='music'%增加域名hobby
student =
1x3 struct array with fields:
name
sex
age
score
hobby
>> student()%访问数组名student()
ans =
name: 'bob'
sex: 'man'
age:
score: [ ]
hobby: []

用rmfield()函数去删除结构数组里的域名。
s = rmfield(s,field) removes the specified field or fields from structure array s.

>> student()=struct('name','bob','sex','man','age',,'score',[  ]);
student()=struct('name','Plimmer','sex','man','age',,'score',[ ]);
student()=struct('name','liky','sex','girl','age','','score',[ ]);
%operate:
>> student=rmfield(student,'age')%一次只能删除一个域名
student =
1x3 struct array with fields:
name
sex
score >> student%验证
student =
1x3 struct array with fields:
name
sex
score >> fields={'age','sex','score'};%一次能删除多个域名
student= rmfield(student,fields)
student =
1x3 struct array with fields:
name
>> student%验证
student =
1x3 struct array with fields:
name

注:还有好多函数对结构数组进行操作,太多了,不写上面了碰到再说吧

Matlab基础之单元数组和结构数组的更多相关文章

  1. C#中自定义类数组和结构数组的使用

    如有雷同,不胜荣幸,若转载,请注明 C#中自定义类数组和结构数组的使用 最近在很多项目中发现很多时候给定的数组要实现某个逻辑或处理很是麻烦,一维数组,二维数组,,,等等需要经过n多转换,还不如自己写一 ...

  2. MATLAB基础学习(3)——数值数组及运算

    rand('state',s)表示随机产生数的状bai态state,一般情百况du下不用指定状态.rand('state',0)作用在于如果指容定zhi状态,产生dao随机结果就相同了.一般情况下不用 ...

  3. MATLAB中的结构数组

    MATLAB中的结构数组 结构数组: 结构是包含一组记录的数据类型,而记录则是存储在相应的字段中.结构的字段可以是任意一种MATLAB数据类型的变量或者对象.结构类型的变量也可以是一维的.二维的或多维 ...

  4. MATLAB—数组运算及数组化编程

    文章目录 前言 一.数组的结构和创建 1.数组及其结构 2.行数组的创建 3.对数组构造的操作 二.数组元素编址及寻访 1.数组元素的编址 2.二维数组元素的寻访 三.数组运算 非数的问题 前言 编程 ...

  5. matlab学习笔记12_3串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields

    一起来学matlab-matlab学习笔记12 12_3 结构体 串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields 觉得有用的话 ...

  6. 全面总结sizeof的用法(定义、语法、指针变量、数组、结构体、类、联合体、位域位段)

    一.前言 编译环境是vs2010(32位). <span style="font-size:18px;">#include<iostream> #inclu ...

  7. C++基础回顾1(数据类型, 控制语句, 数组)

    最近两天打开本科学校的C++教材,快速回顾了一下C++方面的内容.虽然书本内容比较基础,但是还是有些知识点值得自己强化记忆.分几篇文章,加上自己的理解记录如下. 先回顾面向过程的部分. C++数据类型 ...

  8. 5、数组&字符串&结构体&共用体&枚举

    程序中内存从哪里来 三种内存来源:栈(stack).堆(heap).数据区(.date): 栈(stack) 运行自动分配.自动回收,不需要程序员手工干预: 栈内存可以反复使用: 栈反复使用后,程序不 ...

  9. 数组(ArrayPool数组池、Span<T>结构)

    前言 如果需要使用相同的类型的多个对象,就可以使用集合和数组,这一节主要讲解数组,其中会重点涉及到Span<T>结构和ArrayPool数组池.我们也会先涉及到简单的数组.多维数组.锯齿数 ...

随机推荐

  1. Memcache存储大数据的问题(大于1m)

    Memcached存储单个item最大数据是在1MB内,如果数据超过1M,存取set和get是都是返回false,而且引起性能的问题. 我们之前对排行榜的数据进行缓存,由于排行榜在我们所有sql se ...

  2. 04_显示意图打开activity

    实际上用显式意图打开一个activity就很简单了.只需要指定你要打开的这个activity的class就可以了. 需要注意一点的是创建了一个ThirdActivity必须要在清单文件里面声明.如果没 ...

  3. maven仓库错误

    1.jai_core 时间:2018年3月21日10:04:57 URL:https://mvnrepository.com/artifact/javax.media/jai_core/1.1.3 / ...

  4. node+ws模块实现websocket

    先来吐槽一下,想要找点技术文章真tm不容易,全是jb复制粘贴,还冒充原创.搜索一个ws实现websocket全是一样的.一个字都没变,我能说什么.最后想到搜索ws模块githup居然前两页没有,也是那 ...

  5. 洛谷 P2761 软件补丁问题 【spfa】

    -为什么最短路的题会出现在网络流24里?? 因为范围是15所以直接把每个状态作为一个点,向它能转移到的点连有向边即可.可以不用建图(据说建图存不下?),直接枚举m个转移方案.位运算比较麻烦注意不要写错 ...

  6. 【爬坑系列】之vxlan网络实现

    linux 内核从3.7之后就内部集成了vxlan功能,所以可以使用linux内核提供的vxlan功能,经过配置创建vxlan网络. 而从Docker自Docker Engine 1.9之后,就自带o ...

  7. bzoj1303[CQOI2008]中位数图 / 乱搞

    题目描述 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b.中位数是指把所有元素从小到大排列后,位于中间的数. 输入输出格式 输入格式: 第一行为两个正整数n和b,第二行为1 ...

  8. 原生javascript之实战 轮播图

    成品效果如下图所示: 因为博客园限制图片上传大小被我删了一些帧数,所以图片看起来会有一点卡,现实运行是不会的 搭建HTML和CSS结构 HTML代码如下: <div class="wr ...

  9. Windows下安装Ubuntu16.04双系统

    ROS需要在Ubuntu系统上开发,虚拟机跑Ubuntu开发ROS容易出现各种各样的问题,所以需要安装Ubuntu16.04双系统.笔者也是一步步按着网上的帖子来,由于网上的教程都不是最新的而且有的也 ...

  10. hdu 6011 Lotus and Characters 贪心

    http://acm.hdu.edu.cn/showproblem.php?pid=6011 先把数字从小到大排好,比如是-6.3.4这样, 然后处理出后缀和,当后缀和 <= 0的时候马上停止就 ...