QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 10514|回复: 8
打印 上一主题 下一主题

元胞数组

[复制链接]

522

主题

10

听众

4072

积分

自我介绍
学习中!

优秀斑竹奖 元老勋章 新人进步奖 最具活力勋章

群组Matlab讨论组

群组C 语言讨论组

群组每天多学一点点

群组数学趣味、游戏、IQ等

群组南京邮电大学数模协会

跳转到指定楼层
1#
发表于 2010-5-30 23:56 |只看该作者 |正序浏览
前几天编写matlab程序,应用到cell函数,结果好长时间没搞懂,后来在网上查了些资料才弄明白,把资料给大家!

元胞数组:
    元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵。组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每一个元素也可以具有不同的尺寸和内存占用空间,每一个元素的内容也可以完全不同,所以元胞数组的元素叫做元胞(cell)。和一般的数值矩阵一样,元胞数组的内存空间也是动态分配的。
     (1)元胞数组的创建

>> a={'matlab',20;ones(2,3),1:10}
a =
    'matlab'        [         20]
    [2x3 double]    [1x10 double]
>> b=[{'matlab'},{20};{ones(2,3)},{1:10}]
b =
    'matlab'        [         20]
    [2x3 double]    [1x10 double]
>> c={10}
c =
    [10]
>> c(1,2)={2}
c =
    [10]    [2]
>> c(2,2)={5}
c =
    [10]    [2]
      []    [5]
>> isequal(a,b)
ans =
     1
>> whos
Name      Size            Bytes Class      Attributes
a         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 =
     []     []
>> c=cell(3,3)
c =
     []     []     []
     []     []     []
     []     []     []
>> d=cell(2,2,2)
d(:,:,1) =
     []     []
     []     []

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

>> a={20,'matlab';ones(2,3),1:3}
a =
    [        20]    'matlab'   
    [2x3 double]    [1x3 double]
>> str=a(1,2)
str =
    'matlab'
>> class(str)
ans =
cell
>> str=a{1,2}
str =
matlab
>> class(str)
ans =
char
()和{}有着本质的区别,大括号用于表示元胞的内容,小括号表示指定的元胞。

a =
    [        20]    'matlab'   
    [2x3 double]    [1x3 double]
>> a{2,1}(2,2)
ans =
    0.9134
>> a{2,1}(2,3)
ans =
    0.0975
>> a{1,2}(2)
ans =
a
使用元胞的下标,可将一个元胞数组的子集赋值给另一个变量,创建新的元胞数组。
>> a=[{1},{2},{3};{4},{5},{6};{7},{8},{9}]
a =
    [1]    [2]    [3]
    [4]    [5]    [6]
    [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:3}
a =
    [        20]    'matlab'   
    [2x3 double]    [1x3 double]
>> a(1,=[]
a =
    [2x3 double]    [1x3 double]
>> a={20,'matlab';ones(2,3),1:3};
>> a{1}=[]
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]
     元宝数组和其他数组一样,也可以通过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:将数值矩阵转变成为元胞数组
      num2cell:将数值数组转变成为元胞数组
      deal:将输入参数赋值给输出
      cell2struct:将元胞数组转变成为结构
      struct2cell:将结构转变为元胞数组
      iscell:判断输入是否为元胞数组


>> a={20,'matlab',3-7i;ones(2,3),1:3,0}
a =
    [        20]    'matlab'        [3.0000 - 7.0000i]
    [2x3 double]    [1x3 double]    [               0]
>> b=cellfun('isreal',a)
b =
     1     1     0
     1     1     1
>> c=cellfun('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:元胞元素的维数
    prodofsize:元胞元素包含的元素个数
    (7)元胞数组的嵌套
    元胞数组的元胞中包含其他的元胞数,称为嵌套元胞数组,没有嵌套结构的元胞则称为页元胞。使用嵌套的大括号或cell函数,或直接用赋值表达式,都可以创建嵌套单元数组,另外还可以访问嵌套元胞数组的子数组、元胞或元胞的元素。

>> a=cell(1,2)
a =
     []     []
>> a(1,2)={cell(2,2)}
a =
     []    {2x2 cell}

      >> a(1,1)={magic(3)};
a{1,2}(1,1)={[1 2 3;4 5 6;7 8 9]};
a{1,2}(2,1)={[2-i;4+7i]};
a{1,2}(2,2)={cell(1,2)};
a{1,2}{2,2}(2)={5};
>> cellplot(a)
      (8)元胞数组与数值数组间的转化
      应用循环,可以将元胞数组转化为数值数组。

转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
第一次用linux登录madio,纪念一下
lichunbo 实名认证       

0

主题

3

听众

35

积分

群组Matlab讨论组

群组数学建模

群组西安交大数学建模

9#
发表于 2011-2-9 15:44 |只看该作者
回复

使用道具 举报

8

主题

3

听众

148

积分

群组Matlab讨论组

群组西南大学建模组

群组数学建摸协会

群组机器人

群组湖南大学数学建模

8#
发表于 2011-1-14 15:08 |只看该作者
回复

使用道具 举报

8

主题

3

听众

148

积分

群组Matlab讨论组

群组西南大学建模组

群组数学建摸协会

群组机器人

群组湖南大学数学建模

7#
发表于 2011-1-14 15:07 |只看该作者
回复

使用道具 举报

22

主题

6

听众

438

积分

新人进步奖

群组Matlab讨论组

群组数学趣味、游戏、IQ等

群组数学建模培训课堂1

群组西南大学建模组

群组华中科技大学

6#
发表于 2011-1-12 13:33 |只看该作者
回复

使用道具 举报

1

主题

3

听众

336

积分

群组Matlab讨论组

5#
发表于 2010-11-17 08:40 |只看该作者
元胞数组应该就像细胞一样,可大可小,比如卵细胞,神经细胞,肌肉细胞,它们都可以放在一起构成一个集合,也就数数组了。当然,它的元素也可以是细胞团,可以是组织,还可以是器官。
回复

使用道具 举报

杨yyh        

14

主题

6

听众

380

积分

社区QQ达人 新人进步奖

群组LINGO

群组数学建模

群组Matlab讨论组

4#
发表于 2010-9-21 16:09 |只看该作者
回复

使用道具 举报

6

主题

5

听众

525

积分

邮箱绑定达人 新人进步奖

群组数学建模

群组Matlab讨论组

群组Linux推广

群组09年国际数学建模群—鹰之队

群组半**流

3#
发表于 2010-6-26 10:44 |只看该作者
回复

使用道具 举报

linmatsas 实名认证       

53

主题

13

听众

3591

积分

逍遥游

自我介绍
额。。。。世界上最讨厌的事情就是自我介绍。。。

邮箱绑定达人 新人进步奖 发帖功臣 最具活力勋章

群组Matlab讨论组

群组数学建模

群组小草的客厅

群组2012数学一考研交流

群组C 语言讨论组

2#
发表于 2010-6-13 12:16 |只看该作者
回复

使用道具 举报

qq
收缩
  • 电话咨询

  • 04714969085

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-4-12 12:45 , Processed in 0.439670 second(s), 68 queries .

回顶部