cell函数总结

摘要:
单元阵列:单元阵列是MATLAB的一种特殊数据类型,可以被视为一个包罗万象的通用矩阵,也可以被称为广义矩阵。单元数组的元素可以是常量或任何数据类型的常量。每个元素也可以具有不同的大小和内存占用。每个元素的内容也可以完全不同。因此,单元阵列的元素称为单元。与一般的数值矩阵一样,单元阵列的存储空间是动态分配的。关于单元格的创建:1.与一般的证明创建一样,直接创建

元胞数组:

    元胞数组是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{12}表示元胞数组中第一行第二列的元胞。

>> 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]

     
本例使用元胞下标的方式创建了新的元胞数组bc,通过结果看出bc就是元胞数组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函数总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SAP BW维护项目中的常见问题 沧海OpenCV 2.4+ C++ 人脸识别下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Golang的高级数据类型-指针(Pointer)实战篇

          Golang的高级数据类型-指针(Pointer)实战篇                                作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。       前面分享过存储数据的方式,可以通过变量,或者复合类型中的数组,切片,Map,结构体等进行存储。今天我们来分享一下Go语言中的指针操作。   ...

Emacs 安装配置使用教程

Emacs 安装配置使用教程 来源 https://www.jianshu.com/u/a27b97f900f7 序|Preface 先来一篇有趣的简介:Emacs和Vim:神的编辑器和编辑器之神 - 51CTO.COM 为何写这篇教程? 作为一个彻头彻尾的emacs新手,尽管有些薄弱的编程经验,但上手这么一个黑客级别的编辑器还是难免一段阵痛期。虽然网...

最优化 梯度 海塞矩阵

一、方向导数 limt->0f(x0+td)-f(x0) / t 存在 则该极限为f在x0处沿方向d的方向导数 记为 ∂ f/∂ d 下降方向: 方向导数∂ f/∂ d <0 ,则d为f在x0处的下降方向 二、梯度 对于向量x,若每个偏导数 ∂ f/∂ x(i) 都存在 则列向量为f在x处的梯度 记号 ▽f(x) 三、可微与梯度 可微则一定存在...

矩阵求逆

LuoguP4783 思路: 求A的逆矩阵,把A和单位矩阵I放在一个矩阵里 对A进行加减消元使A化成单位矩阵 此时原来单位矩阵转化成逆矩阵 原理大概就是 A(逆) * [A I] = [I A(逆)] Code: 1 #include <bits/stdc++.h> 2 #define ll long long 3 using namespa...

Assimp里的一些知识(1)

OpenGL 学习到模型加载的时候,介绍了一个模型导入库(Open Asset Import Library,Assimp)的用法。初学的时候觉得稍微有些复杂,故借由这篇blog来简单地捋一下其中的细节。 首先,当我们使用Assimp导入模型的时候,它通常会将整个模型加载到一个场景(Scene)对象,这个对象包含了导入模型的所有数据。具体结构如下图所示(...

Numpy入门学习之(二)linalg库----向量范数、矩阵范数、行列式、矩阵逆、幂

转自:https://blog.csdn.net/qq_30138291/article/details/76327051   老师课堂总结,请勿转载 Numpy中的核心线性代数工具 numpy.linalg模块包含线性代数的函数。使用这个模块,我们可以计算逆矩阵、求特征值、解线性方程组以及求解行列式等。 求解矩阵的范数 在实数域中,数的大小和两个数之间的...