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

应用循环,可以将元胞数组转化为数值数组。
引自:http://hi.baidu.com/hbwc/blog/item/a89ec511ab669a1bb8127b5c.html

时间: 2024-10-24 18:58:22

matlab cell数组用法的相关文章

MATLAB cell 数组介绍

转载:http://www.matlabsky.com/forum.php?mod=viewthread&tid=21089 由于工作需要,经常要处理大量的实验数据.基本都是由仪器导出来,随着社会发展的进步,人们获取数据的量在不断增长,很多人都是,现在已经是海量数据时代了... 从cell使用说起在读取文件的时候,cell数组(各种翻译都有,元胞数组,单元数组...直接无视)是Matlab的宠儿,基本都会出现,长期使用发现频率比struct高了不少~无论是Import Data还是使用texts

MATLAB中cell函数用法

cell元包是matlab中提供的一种数据类型,功能强大. 关于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),创建一个空的

matlab cell

cell元包是matlab中提供的一种数据类型,功能强大. 关于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),创建一个空的

awk数组用法

两个文件,从文件b首列查找出等于文件a的行并输出[[email protected] ~]# cat a1367[[email protected] ~]# cat b1 2 32 3 43 4 54 5 65 6 76 7 87 8 9 shell脚本[[email protected] ~]# cat jieguo #!/bin/bashy=`sed -n 'p' a |wc -l`  #a 行数x=`sed -n 'p' b |wc -l`  #b行数for((i=1;i<=$y;i++)

matlab:eval用法

1.自动生成变量 % auto general variabalsb=rand(3,3)for i=1:8    eval(['a_',num2str(i),'=','b(',num2str(i),');']);    eval(['a_',num2str(i),]);end 运行结果: 2.自动保存文件 %auto save fileb=rand(3,3,3)for i=1:3    eval(['imwrite(b(:,:,',num2str(i),'),','''b_',num2str(i

cell数组

 问题: (注意,matlab判断一个数的类型的函数是class(var)) 如果p为一个数,那么h(1)=p,是没有问题的. 如果p为一个向量,那么h(1,:)=p是没有问题的. 如果p是一个矩阵的话,上面的两种赋值方法都是会有错误的. 那么要如何处理呢 ???? 这时就用到了cell数据类型了.cell的每个单元都可以存储任何数据,比如传递函数等.当然,存储矩阵更是没有问题的了.但是用cell数据类型之前,要先初始化. 1.细胞型数据的定义 1)直接赋值定义:细胞型变量在定义时需要使用大括号

Matlab中imagesc用法

来源:https://ww2.mathworks.cn/help/matlab/ref/imagesc.html?searchHighlight=imagesc&s_tid=doc_srchtitle imagesc 显示使用经过标度映射的颜色的图像 全页折叠 语法 imagesc(C) imagesc(x,y,C) imagesc('CData',C) imagesc('XData',x,'YData',y,'CData',C) imagesc(___,Name,Value) imagesc(

matlab 逻辑数组及其应用

这几天学习了matlab的逻辑数组功能,总的感觉就有两点: 第一,通过对原来的数组a进行逻辑判断后得到逻辑数组b 第二,逻辑数组进行某种运算符操作又回到原数组类型 第三,利用逻辑数组mask功能 测试如下: disp('逻辑数组学习及应用'); a = [1 2 3;4 5 6; 7 8 9]; b = a > 4 ;%数组中各个元素与4作比较,逻辑为真则为1 whos 结果: 第二,当执行 c = b + 0后,c 数组为: 第三,它在算术运算中能提供一个屏蔽(mask).屏蔽(mask)是指

C++实现MATLAB一维数组函数findpeaks()函数求一维离散值极值(波峰波谷)

一.代码 #include <iostream> #include <vector> using namespace std; // //C++实现求一维离散数据极值(波峰.波谷) // //参数:数组,数组大小 void findPeaks(int *num,int count) { vector<int> sign; for(int i = 1;i<count;i++) { /*相邻值做差: *小于0,赋-1 *大于0,赋1 *等于0,赋0 */ int di