版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、MATLAB Cell函数使用技巧谈谈MATLAB中cell函数如果p为一个数,那么h(1)=p,是没有问题的。如果p为一个向量,那么h(1,:)=p是没有问题的。如果p是一个矩阵的话,上面的两种赋值方法都是会有错误的。那么要如何处理呢?这时就用到了cell数据类型了。cell的每个单元都可以存储任何数据,比如传递函数等。当然,存储矩阵更是没有问题的了。但是用cell数据类型之前,要先初始化。a=cell(n,m)那么就把a初始化为一个n行m列的空cell类型数据。如何赋值呢?a1,1=rand(5)那么a的1行1列的单元中存储的就是一个随机的5×5的方阵了。那么要用第一个单元中的方
2、阵中的某个值呢?可以如下引用:a1,1(2,3)就可以了,引用cell单元时要用,再引用矩阵的某个数据就要用()了。cell单元中的每个单元都是独立的,可以分别存储不同大小的矩阵或不同类型的数据。下面举个例子:a=cell(2,2);%预分配a1,1='cellclass'a1,2=1 2 2;a2,1='a','b','c'a2,2=9 5 6;>> a1,1ans =cellclass>> a1,2ans = 1 2 2>> a2,:ans =abcans = 9 5 6>> b
3、=a1,1b =cellclass2010-11-08 12:05:24zz: 元胞数组: 元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵。组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每一个元素也可以具有不同的尺寸和内存占用空间,每一个元素的内容也可以完全不同,所以元胞数组的元素叫做元胞(cell)。和一般的数值矩阵一样,元胞数组的内存空间也是动态分配的。 (1)元胞数组的创建>> a='matlab',20;ones(2,3),1:10a = 'matlab' 20 2x3 doub
4、le 1x10 double>> b='matlab',20;ones(2,3),1:10b = 'matlab' 20 2x3 double 1x10 double>> c=10c = 10>> c(1,2)=2c = 10 2>> c(2,2)=5c = 10 2 5>> isequal(a,b)ans = 1>> whosName Size Bytes Class Attributesa 2x2 388 cell ans 1x1 1 logical b 2x2 388 cell c 2
5、x2 208 cell 用cell函数创建元胞数组,创建的数组为空元胞。cell函数创建空元胞数组的主要目的是为数组预先分配连续的存储空间,节约内存占用,提高执行效率。 >> a=cell(1)a = >> b=cell(1,2)b = >> c=cell(3,3)c = >> d=cell(2,2,2)d(:,:,1) = d(:,:,2) = >> whosName Size Bytes Class Attributesa 1x1 4 cell ans 1x1 1 logical b 1x2 8 cell c 3x3 36 cel
6、l d 2x2x2 32 cell (2)元胞数组的数据获得 从元胞数组中读取数据,可保存为一个标准的数组或一个新的单元数组,或取出数组进行计算。元胞数组中数据的访问,可通过元胞内容的下标进行,用元胞数组名加大括号。大括号中数值表示元胞的下标。如a1,2表示元胞数组中第一行第二列的元胞。>> a=20,'matlab'ones(2,3),1:3a = 20 'matlab' 2x3 double 1x3 double>> str=a(1,2)str = 'matlab'>> class(str)ans =cel
7、l>> str=a1,2str =matlab>> class(str)ans =char()和有着本质的区别,大括号用于表示元胞的内容,小括号表示指定的元胞。a = 20 'matlab' 2x3 double 1x3 double>> a2,1(2,2)ans = 0.9134>> a2,1(2,3)ans = 0.0975>> a1,2(2)ans =a使用元胞的下标,可将一个元胞数组的子集赋值给另一个变量,创建新的元胞数组。>> a=1,2,3;4,5,6;7,8,9a = 1 2 3 4 5 6
8、7 8 9>> b=a(2:3,2:3)b = 5 6 8 9>> c=a(1:3,2:3)c = 2 3 5 6 8 9 本例使用元胞下标的方式创建了新的元胞数组b和c,通过结果看出b和c就是元胞数组a的一部分。 (3)元胞数组的删除和重塑 要删除单元数组中的行或列,可以用冒号表示单元数组中的行或列,然后对其赋一个空矩阵即可。a=20,'matlab'ones(2,3),1:3a = 20 'matlab' 2x3 double 1x3 double>> a(1,:)=a = 2x3 double 1x3 double>
9、;> a=20,'matlab'ones(2,3),1:3;>> a1=a = 'matlab' 2x3 double 1x3 double>> a(1)=a = 2x3 double 'matlab' 1x3 double>> a(2)=a = 2x3 double 1x3 double>> a(1,2)=? A null assignment can have only one non-colon index.>> a(1)=a = 1x3 double 元宝数组和其他数组一样
10、,也可以通过reshape函数改变形状,改变后的元胞数组与原元胞数组的元素个数相同,不能通过改变形状来添加或删除元胞数组中的元素。>> a=cell(4,4)a = >> size(a)ans = 4 4>> b=reshape(a,2,8)b = >> size(b)ans = 2 8 (5)元胞数组中的操作函数 cell:创建空的元胞数组 cellfun:为元胞数组的每个元胞执行指定的函数 celldisp:显示所有元胞的内容 cellplot:利用图形方式显示元胞数组 cell2mat:将元胞数组转变成为普通的矩阵 mat2cell:将数值
11、矩阵转变成为元胞数组 num2cell:将数值数组转变成为元胞数组 deal:将输入参数赋值给输出 cell2struct:将元胞数组转变成为结构 struct2cell:将结构转变为元胞数组 iscell:判断输入是否为元胞数组>> a=20,'matlab',3-7i;ones(2,3),1:3,0a = 20 'matlab' 3.0000 - 7.0000i 2x3 double 1x3 double 0>> b=cellfun('isreal',a)b = 1 1 0 1 1 1>> c=cellfu
12、n('length',a)c = 1 6 1 3 3 1>> d=cellfun('isclass',a,'double')d = 1 0 1 1 1 1(函数的应用) cellfun函数的主要功能是对元胞数组的元素(元胞)分别指定不同的函数,不过,能够在cellfun函数中使用的函数ushuliang是有限的。 能在cellfun中使用的函数: isempty:若元胞元素为空,则返回逻辑真 islogical:若元胞元素为逻辑类型,则返回逻辑真 isreal:若元胞元素为实数,则返回逻辑真 length:元胞元素的长度 ndims:
13、元胞元素的维数 prodofsize:元胞元素包含的元素个数 (7)元胞数组的嵌套 元胞数组的元胞中包含其他的元胞数,称为嵌套元胞数组,没有嵌套结构的元胞则称为页元胞。使用嵌套的大括号或cell函数,或直接用赋值表达式,都可以创建嵌套单元数组,另外还可以访问嵌套元胞数组的子数组、元胞或元胞的元素。>> a=cell(1,2)a = >> a(1,2)=cell(2,2)a = 2x2 cell >> a(1,1)=magic(3);a1,2(1,1)=1 2 3;4 5 6;7 8 9;a1,2(2,1)=2-i;4+7i;a1,2(2,2)=cell(1,
14、2);a1,22,2(2)=5;>> cellplot(a) (8)元胞数组与数值数组间的转化 应用循环,可以将元胞数组转化为数值数组。2010-11-08 12:06:44zz: Matlab Cell功能最近完成模式分类的作业,需要大量使用matlab,期间发现了一个问题,是matlab代码的复用程度。在面向过程编程里, 基本的复用单位是函数,程序的复杂度籍此下放到函数的接口上。设计好函数间的接口,基本上就成功了一半。在面向对象编程里, 基本的复用单位是对象,对象使得数据具有了一定程度的自维护。而在matlab里, 我很长时间都没有找到方向,因为我搞不清楚复用的单位是什么。ma
15、tlab中,基本的单位是矩阵,针对矩阵系统有一大堆的函数供你调用。但是,想自己写程序还是有一定的麻烦的。for循环语句在matlab里似乎是一个禁忌,所有老师都敦敦告诫,不要轻易使用for。而函数调用也是同样的低效, 有兴趣的同学可以参见此文。那么我们应该基于什么模块进行复用呢?答案是Cell模式。 Cell是matlab的一个特色功能,将一段代码以%标记为cell以后,就可以重复执行了,相当于在命令行输入该代码块。以前,为了测试不同参数的结果,往往要用up arrow执行上一条指令。遇到需要多条指令的地方,就很容易出错。而算法又没有完善到可以封装成函数的地步,整天来回跑代码让人不堪其烦。通过cell模式,可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度碎石场绿色生产标准合作协议3篇
- 2025年度水果种植与农业技术推广合作合同3篇
- 二零二五年度农村土地流转租赁管理服务合同2篇
- 2025年度低碳生活房屋无偿使用及环保教育合同3篇
- 2025年度农机维修配件研发与生产合同协议3篇
- 二零二五年度竞业协议失效一个月竞业限制解除申请报告书3篇
- 2025年度内外墙油漆施工绿色施工技术与评价合同2篇
- 二零二五厂房拆除与配套设施拆除重建合同3篇
- 2025年度农村宅基地房屋买卖及农村土地流转服务平台建设合同
- 二零二五年度智能化手房租赁管理协议3篇
- 计算机程序设计综合实践
- 三年级《安徒生童话》知识考试题库(含答案)
- 德邦物流人力资源管理规划项目诊疗
- 基于西门子S7-200型PLC的消防给水泵控制系统设计
- 仪器设备采购流程图
- 盈利能力分析外文翻译
- 不合格医疗器械报损清单
- 高中物理全套培优讲义
- 新一代反洗钱监测分析系统操作手册all
- 矿山环境保护ppt课件(完整版)
- 档案保护技术概论期末复习资料教材
评论
0/150
提交评论