元胞数组:

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

关于cell的创建:

1.跟一般创建举证一样,直接使用C = {A B D E}这种形式,不过这里把"[]"改成了}"{}"

2.使用cell创建cell,C= {C1 C2},这里C1和C2都是cell类型,直接把C1 C2作为一个cell得到的C3是一个1x2的cell数组;使用C3 = [C1 C2],是使用C1和C2的内容来创建cell数组

3.使用cell函数,A=cell(2,2),创建一个空的2x2的cell矩阵.

用cell函数创建元胞数组,创建的数组为空元胞。cell函数创建空元胞数组的主要目的是为数组预先分配连续的存储空间,节约内存占用,提高执行效率。  

关于cell的访问:

1.X = C(s)使用这种"()"形式的返回的是cell类型

2.X = C{s}使用这种"{}"形式的返回的是cell中的内容

3.其他的基本上与通常的数组.矩阵访问一样了

4.A{1,1}(2,3:end)访问的是A中的第一个cell里面内容的第2行的第三个元素以后的所有元素

5.A{1,3}.name访问的是A中的A{1,3}cell里面结构的name值

6.cell的图形化显示使用命令cellplot(A)即可

元胞数组的数据获得:

从元胞数组中读取数据,可保存为一个标准的数组或一个新的单元数组,或取出数组进行计算。元胞数组中数据的访问,可通过元胞内容的下标进行,用元胞数组名加大括号{}。大括号中数值表示元胞的下标。如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的一部分。

关于cell的删除和重塑:

1.cell(1)=[]删除第一个cell,不能使用cell{1}=[],这是把第一个cell内容置空没有删除

>>C4={C1,C2,C3}

C4 =

{3x2 cell}    {3x3 cell}    {3x1 cell}

>> C4(1)=[]

C4 =

{3x3 cell}    {3x1 cell}

2.cell(:)=[]删除所有的cell,其他的删除一次类推
>> C4(:)=[]

C4 =

{}

3.使用reshape重新reshape cell arrays

>> A={1,2,3}

A =

[1]    [2]    [3]

>> B = reshape(A, 1, 3);
>> B = reshape(A, 3, 1);
>> B = reshape(A, 2, 6);
??? Error using ==> reshape
To RESHAPE the number of elements must not change.
使用reshape需要保证前后调整后的元素个数一致,否则会报错

元胞数组中的操作函数

      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:元胞元素包含的元素个数

元胞数组的嵌套

元胞数组的元胞中包含其他的元胞数,称为嵌套元胞数组,没有嵌套结构的元胞则称为页元胞。使用嵌套的大括号或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)

cell函数总结的更多相关文章

  1. MATLAB中cell函数用法

    cell元包是matlab中提供的一种数据类型,功能强大. 关于cell的创建: 1.跟一般创建举证一样,直接使用C = {A B D E}这种形式,不过这里把"[]"改成了}&q ...

  2. Matlab中的cell、size函数

    参考网址:http://blog.sina.com.cn/s/blog_5efed5800100exmj.html Cell函数 如果p为一个数,那么h(1)=p,是没有问题的. 如果p为一个向量,那 ...

  3. matlab的cell数组

    matlab的cell数组 元胞数组: 元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵.组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每 ...

  4. cell数组

     问题: (注意,matlab判断一个数的类型的函数是class(var)) 如果p为一个数,那么h(1)=p,是没有问题的. 如果p为一个向量,那么h(1,:)=p是没有问题的. 如果p是一个矩阵的 ...

  5. [转]MATLAB cell数据类型

    细胞型数据类型(cell)使不同类型和不同维数的数组可以共存,细胞型数组实际上可以认为是一种以任意形式的数组为分量的多维数组. 1.细胞型数据的定义 1)直接赋值定义:细胞型变量在定义时需要使用大括号 ...

  6. matlab学习笔记12单元数组和元胞数组 cell,celldisp,iscell,isa,deal,cellfun,num2cell,size

    一起来学matlab-matlab学习笔记12 12_1 单元数组和元胞数组 cell array --cell,celldisp,iscell,isa,deal,cellfun,num2cell,s ...

  7. MATLAB 单元数组 cell 和结构体 struct 的用法以及区别

    1. 前言 Matlab单元数组cell和结构体struct都可以将不同类型的相关数据集成到一个单一的变量中,使得大量的相关数据的处理变得非常简单而且方便.但是,需要注意的是,单元数组和结构体只是承载 ...

  8. matlab cell

    cell元包是matlab中提供的一种数据类型,功能强大. 关于cell的创建: 1.跟一般创建举证一样,直接使用C = {A B D E}这种形式,不过这里把"[]"改成了}&q ...

  9. matlab中exist 检查变量、脚本、函数、文件夹或类的存在情况

    参考: 1.https://ww2.mathworks.cn/help/matlab/ref/exist.html?searchHighlight=exist&s_tid=doc_srchti ...

随机推荐

  1. Java HashMap存储问题

    public static boolean isIsomorphic(String s, String t) { Map map1 = new HashMap<>(); Map map2 ...

  2. Randomize select algorithm 随机选择算法

    从一个序列里面选择第k大的数在没有学习算法导论之前我想最通用的想法是给这个数组排序,然后按照排序结果返回第k大的数值.如果使用排序方法来做的话时间复杂度肯定至少为O(nlgn). 问题是从序列中选择第 ...

  3. 基于adt-bundle的Android开发环境搭建

    web与移动是当今的热门,怎么说都得会一点,完全不懂是不行的. 一直想玩一下移动开发,穷屌丝暂时没有iPhone和Mac,所以先拿Android开刀. 之前也有想过玩一下Android,但是都被各种博 ...

  4. 解决网站出错后 跳转 友好页面 的 asp .net 配置

    <system.webServer> <httpErrors errorMode="DetailedLocalOnly"> <remove statu ...

  5. ffmpeg ffprobe ffplay

    ./ffprobe -print_format json -show_format -show_frames -select_streams v -i ../hhh.flv ./ffprobe -pr ...

  6. 优步(UBER)发布2016年春节出境游出行报告

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. Project: Individual Project - Word frequency program----11061192zmx

    Description & Requirements http://www.cnblogs.com/jiel/p/3311400.html 项目时间估计 理解项目要求: 1小时 构建项目逻辑: ...

  8. Lodop Web打印插件使用

    <object id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" st ...

  9. python 使用dict和set

    dict Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度. 举个例子,假设要根据同学的名字 ...

  10. hdoj 4325 Flowers【线段树+离散化】

    Flowers Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...