MATLAB_Cell函数使用技巧

上传人:洪易 文档编号:39979659 上传时间:2018-05-21 格式:DOCX 页数:11 大小:21.89KB
返回 下载 相关 举报
MATLAB_Cell函数使用技巧_第1页
第1页 / 共11页
MATLAB_Cell函数使用技巧_第2页
第2页 / 共11页
MATLAB_Cell函数使用技巧_第3页
第3页 / 共11页
MATLAB_Cell函数使用技巧_第4页
第4页 / 共11页
MATLAB_Cell函数使用技巧_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《MATLAB_Cell函数使用技巧》由会员分享,可在线阅读,更多相关《MATLAB_Cell函数使用技巧(11页珍藏版)》请在金锄头文库上搜索。

1、+MAT+MATLABLAB CellCell 函数使用技巧函数使用技巧谈谈 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)

2、那么 a 的 1 行 1 列的单元中存储的就是一个随机的 55 的方阵了。那么要用第一个单元中的方阵中的某个值呢?可以如下引用: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,1 ans = cellclass a1,2 ans =1 2 2 a2,: ans = abc ans =9 5 6 b=a1,1 b =

3、cellclass2010-11-08 12:05:24zz: http:/ MATLAB 的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵, 或者叫做广义矩阵。组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每一 个元素也可以具有不同的尺寸和内存占用空间,每一个元素的内容也可以完全不同,所以 元胞数组的元素叫做元胞(cell) 。和一般的数值矩阵一样,元胞数组的内存空间也是动态 分配的。(1)元胞数组的创建 a=matlab,20;ones(2,3),1:10a =matlab 202x3 double 1x10 double b=matlab,20;ones(2,3),

4、1:10b =matlab 202x3 double 1x10 double c=10c =10c(1,2)=2c =10 2c(2,2)=5c =10 2 5isequal(a,b)ans =1whos Name Size Bytes Class Attributesa 2x2 388 cell ans 1x1 1 logical b 2x2 388 cell c 2x2 208 cell 用 cell 函数创建元胞数组,创建的数组为空元胞。cell 函数创建空元胞数组的主要目的是为 数组预先分配连续的存储空间,节约内存占用,提高执行效率。 a=cell(1)a = b=cell(1,2)b

5、 = c=cell(3,3)c = d=cell(2,2,2)d(:,:,1) = d(:,:,2) = whos Name Size Bytes Class Attributesa 1x1 4 cell ans 1x1 1 logical b 1x2 8 cell c 3x3 36 cell d 2x2x2 32 cell (2)元胞数组的数据获得从元胞数组中读取数据,可保存为一个标准的数组或一个新的单元数组,或取出数组进行 计算。元胞数组中数据的访问,可通过元胞内容的下标进行,用元胞数组名加大括号。 大括号中数值表示元胞的下标。如 a1,2表示元胞数组中第一行第二列的元胞。 a=20,ma

6、tlab;ones(2,3),1:3a = 20 matlab 2x3 double 1x3 doublestr=a(1,2)str =matlabclass(str)ans =cellstr=a1,2str =matlabclass(str)ans =char()和有着本质的区别,大括号用于表示元胞的内容,小括号表示指定的元胞。a = 20 matlab 2x3 double 1x3 doublea2,1(2,2)ans =0.9134a2,1(2,3)ans =0.0975a1,2(2)ans =a使用元胞的下标,可将一个元胞数组的子集赋值给另一个变量,创建新的元胞数组。 a=1,2,3;

7、4,5,6;7,8,9a =1 2 34 5 67 8 9 b=a(2:3,2:3)b =5 68 9 c=a(1:3,2:3)c =2 35 68 9本例使用元胞下标的方式创建了新的元胞数组 b 和 c,通过结果看出 b 和 c 就是元胞数组 a 的一部分。(3)元胞数组的删除和重塑要删除单元数组中的行或列,可以用冒号表示单元数组中的行或列,然后对其赋一个空矩 阵即可。a=20,matlab;ones(2,3),1:3a = 20 matlab 2x3 double 1x3 doublea(1,:)=a =2x3 double 1x3 double a=20,matlab;ones(2,3)

8、,1:3; a1=a = matlab 2x3 double 1x3 doublea(1)=a =2x3 double matlab 1x3 doublea(2)=a =2x3 double 1x3 doublea(1,2)= ? A null assignment can have only one non-colon index.a(1)=a =1x3 double元宝数组和其他数组一样,也可以通过 reshape 函数改变形状,改变后的元胞数组与原元 胞数组的元素个数相同,不能通过改变形状来添加或删除元胞数组中的元素。 a=cell(4,4)a = size(a)ans =4 4 b=r

9、eshape(a,2,8)b = size(b)ans =2 8(5)元胞数组中的操作函数cell:创建空的元胞数组cellfun:为元胞数组的每个元胞执行指定的函数celldisp:显示所有元胞的内容cellplot:利用图形方式显示元胞数组cell2mat:将元胞数组转变成为普通的矩阵mat2cell:将数值矩阵转变成为元胞数组num2cell:将数值数组转变成为元胞数组deal:将输入参数赋值给输出cell2struct:将元胞数组转变成为结构struct2cell:将结构转变为元胞数组iscell:判断输入是否为元胞数组 a=20,matlab,3-7i;ones(2,3),1:3,0

10、a = 20 matlab 3.0000 - 7.0000i2x3 double 1x3 double 0 b=cellfun(isreal,a)b =1 1 01 1 1 c=cellfun(length,a)c =1 6 13 3 1 d=cellfun(isclass,a,double)d =1 0 11 1 1(函数的应用)cellfun 函数的主要功能是对元胞数组的元素(元胞)分别指定不同的函数,不过,能够在 cellfun 函数中使用的函数 ushuliang 是有限的。能在 cellfun 中使用的函数:isempty:若元胞元素为空,则返回逻辑真islogical:若元胞元素为

11、逻辑类型,则返回逻辑真isreal:若元胞元素为实数,则返回逻辑真length:元胞元素的长度ndims:元胞元素的维数prodofsize:元胞元素包含的元素个数(7)元胞数组的嵌套元胞数组的元胞中包含其他的元胞数,称为嵌套元胞数组,没有嵌套结构的元胞则称为页 元胞。使用嵌套的大括号或 cell 函数,或直接用赋值表达式,都可以创建嵌套单元数组, 另外还可以访问嵌套元胞数组的子数组、元胞或元胞的元素。 a=cell(1,2)a = a(1,2)=cell(2,2)a = 2x2 cella(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,2); a1,22,2(2)=5; cellplot(a)(8)元胞数组与数值数组间的转化应用循环,可以将元胞数组转化为数值数组。2010-11-08 12:06:44zz: http:/ Cell 功能最近完成模式分类的作业,需要大量使用 matlab,期间发现了一个问题,是 matlab 代 码的复用程度。在面向过程编程里,基本的复用单位是函数,程序的复杂度籍此下放到函数的接口上。 设计好函数间的接口,基本上就成功了一半。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号