MATLAB元胞数组

摘要:
MATLAB元胞数组元胞数组:元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵。cell函数创建空元胞数组的主要目的是为数组预先分配连续的存储空间,节约内存占用,提高执行效率。元胞数组中数据的访问,可通过元胞内容的下标进行,用元胞数组名加大括号{}。如a{1,2}表示元胞数组中第一行第二列的元胞。

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{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的一部分。

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]


cellCreate 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} =

000

d{2,1} =

000

d{1,2} =

000

d{2,2} =

000


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

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

b =

[1x3 double][1x3 double]

[1x3 double][1x3 double]

>> celldisp(b)

b{1,1} =

000

b{2,1} =

000

b{1,2} =

000

b{2,2} =

000

免责声明:文章转载自《MATLAB元胞数组》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇libuv::进程kubernetes二: kubernetes 重要组件安装和集群管理下篇

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

相关文章

MATLAB数值计算——0

目录 MATLAB数值计算 1.solve() 2.fzero() 3.fsolve() MATLAB数值计算 MATLAB中文论坛基础板块常见问题归纳(出处: MATLAB中文论坛)登录http:www.mathworks.com/moler 获取NCM文件,注册账户,下载Toolbox格式,点击安装——在MATLAB中输入ncmgui出现图...

12.Vue技术栈开发实战-渲染函数和JSX快速掌握

如果用渲染函数来创建视图模板。 JSX语法 补充讲解函数式组件和作用域插槽。 render函数 路由列表内线添加一个路由配置render-page 创建这个页面 页面现在是空的 我们在main.js里面学习render函数的使用 render这里是一个回调函数, h是一个方法,我们使用这个方法,可以创建一个虚拟节点 上面是下面这种方式的简写形式.如果返回...

前端页面a标签嵌套a标签效果的两种解决方案

这是由工作中的一个小改动需求得到的这个解决方案的;那个需求是这样的,如图: 需求原来是球队名字没有点击功能的,而蓝色方框两队之间的比赛点击的时候会跳转到比赛文字直播页面。现在需要要求点击球队名字要跳转到球队资料库页面。 这样就会产生了a标签的嵌套。 但是总所周知a标签是内联元素(inline element),如果嵌套a标签的话浏览器则会解析成: 1 &...

ASP数组全集,多维数组和一维数组

ASP数组是比较好用的装载大量数据的容器。1 定义数组 有两种方式:DIM和REDIM。 DIM定义的是固定个数、数据类型的数组;而REDIM则不同,它可以定义不同类型的数据,也可以定义个数并非固定的数据。比较下面几个例子。 都合法的例子: Dim myarray(5,2) Redim myarray(5,2) 前者错误而后者合法的例子: n=10 n=1...

【数据结构与算法】用go语言实现数组结构及其操作

引言   数组结构是一种很常见的数据结构,并且在大部分编程语言中都存在,这些语言都提供了现成的可以立马就能使用的数组这种数据结构。为了更好的理解数组,这边文章就是来实现数组。 数组的特点   1.内存中数据之间紧密排列在一起。   2.新增元素需要开辟内存空间用以存放新的元素。   3.新增元素时候,如果新增的元素在其他元素中间,那么该新增元素的位置后面所...

new一个接口

首先我们先看看接口的定义:   接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。除非实现接口的类是抽象类,否则该类要...