MATLAB元胞数组


元胞数组:

元胞数组是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)元胞数组与数值数组间的转化

应用循环,可以将元胞数组转化为数值数组。

如何初始化元胞数组


比如申请了2*2的元胞,希望初始化为每个元胞都是[0 0 0]


cell  Create cell array.

cell(N) is an N-by-N cell array of empty matrices.

cell(M,N) or cell([M,N]) is an M-by-N cell array of empty

matrices.

cell(M,N,P,...) or cell([M N P ...]) is an M-by-N-by-P-by-...

cell array of empty matrices.

cell(SIZE(A)) is a cell array the same size as A containing

all empty matrices.


>>d=cell(2);

>>d(:)={[0]};


>> d = cell(2, 2);

>> d

d =

[]     []

[]     []

>> d(:) = {[0 0 0]}

d =

[1x3 double]    [1x3 double]

[1x3 double]    [1x3 double]

>> celldisp(d)

d{1,1} =

0     0     0

d{2,1} =

0     0     0

d{1,2} =

0     0     0

d{2,2} =

0     0     0


>> a = {[0 0 0]};

>> b = repmat(a, 2, 2)

b =

[1x3 double]    [1x3 double]

[1x3 double]    [1x3 double]

>> celldisp(b)

b{1,1} =

0     0     0

b{2,1} =

0     0     0

b{1,2} =

0     0     0

b{2,2} =

0     0     0

MATLAB元胞数组的更多相关文章

  1. MATLAB——元胞数组

    一. 1.元胞数组的创建 >> a={;ones(,),:} a = ] [2x3 ;ones(,),:} >> b=[{};{ones(,)},{:}] b = ] [2x3 ...

  2. matlab中元胞数组(cell)转换为矩阵

    matlab中元胞数组(cell)转换为矩阵. cell转换为矩阵函数为:cell2mat(c),其中c为待转换的元胞数组: 转化之后的矩阵可能不满足我们对矩阵维数的要求,那么也许还需要下面两个函数: ...

  3. matlab学习笔记12_3串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields

    一起来学matlab-matlab学习笔记12 12_3 结构体 串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields 觉得有用的话 ...

  4. 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 ...

  5. matlab中元胞数组的创建与内容读取

    一.创建元胞数组 1.用cell命令创建规格为2*2的空元胞 >> a=cell(2,2) a = [] [] [] [] 2.用大括号"{}"创建元胞数组并赋值 &g ...

  6. MATLAB中TXT数据文件读取并写入元胞数组的方法与步骤

    一. TXT数据文件读取 Data = load('train.txt');   %简单的文件读取,这时在工作区可以看到导入的大数据变量Data 二.大数据变量Data装入元胞数组中 D = cell ...

  7. matlab笔记(1) 元胞结构cell2mat和num2cell

    摘自于:https://zhidao.baidu.com/question/1987862234171281467.html https://www.zybang.com/question/dcb09 ...

  8. matlab的cell数组

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

  9. 美国康奈尔大学BioNB441元胞自动机MATLAB应用

    美国康奈尔大学BioNB441在Matlab中的元胞自动机 介绍 元胞自动机(CA)是用于计算计划利用当地的规则和本地通信.普遍CA定义一个网格,网格上的每个点代表一个有限数量的状态中的细胞.过渡规则 ...

随机推荐

  1. Windows 7 与 Vmware Ubuntu 15.10_64 共享文件夹

    设置共享文件夹     安装/更新最新的vmware-tools   安装             在ubuntu 内部会打开DVD ,里面的压缩包中包含vmware-toole. 先解压      ...

  2. 20个简化开发任务的 JavaScript库

    所谓JavaScript库就是预先写好的可以简化基于JavaScript的应用程序开发的,尤其是Ajax和其它以web为中心的技术的 JavaScript代码集.JavaScript主要用于写内嵌于H ...

  3. MySQL 存储过程实例 与 ibatis/mybatis/hibernate/jdbc 如何调用存储过程

    虽然MySQL的存储过程,一般情况下,是不会使用到的,但是在一些特殊场景中,还是有需求的.最近遇到一个sql server向mysql迁移的项目,有一些sql server的存储过程需要向mysql迁 ...

  4. MTOM以及在WCF中的应用

    关于MTOM的基本概念 提到MTOM消息优化传输机制,通常的实验结果是使用MTOM传输数据会提高大约33%的性能. 消息传输优化机制 (MTOM) 标准允许将消息中包含的大型数据元素外部化,并将其作为 ...

  5. 问题解决——在STL的queue中使用自定义类

    本文原创,转载请保证文章的完整性,并显要的注明出处. 本文链接:http://blog.csdn.net/wlsgzl/article/details/38843513 平时很少用STL,就算用,也基 ...

  6. mysql连接其他表删除某个表的数据

    delete a from TableA a left join TableB b on a.XX = b.YY left join TableC c on c.ZZ = a.XX where 条件

  7. loadrunner常用函数

    1.关联函数:web_reg_save_param("session", "LB=value=", "RB=>", LAST);

  8. 烂泥:centos安装及配置DNS服务器

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 要在centos配置DNS服务器,要先安装DNS软件BIND.当然我们也可以安装其他的DNS软件,比如国内的开源DNS软件DNSPod. 在此我们以通过 ...

  9. sublime生产力提升利器

    sublime 操作快捷键功能-生产力提升利器 Go to anything  ctrl+p 支持快速模糊匹配 查找替换  ctrl+h 多行游标(当只需查找/替换/选中部分相同内容时)有以下方式来产 ...

  10. shell读取文件每一行的方式

    1.使用read命令读取一行数据 while read myline do echo "LINE:"$myline done < datafile.txt 2.使用read命 ...