MATLAB元胞数组
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元胞数组的更多相关文章
- MATLAB——元胞数组
一. 1.元胞数组的创建 >> a={;ones(,),:} a = ] [2x3 ;ones(,),:} >> b=[{};{ones(,)},{:}] b = ] [2x3 ...
- matlab中元胞数组(cell)转换为矩阵
matlab中元胞数组(cell)转换为矩阵. cell转换为矩阵函数为:cell2mat(c),其中c为待转换的元胞数组: 转化之后的矩阵可能不满足我们对矩阵维数的要求,那么也许还需要下面两个函数: ...
- matlab学习笔记12_3串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields
一起来学matlab-matlab学习笔记12 12_3 结构体 串联结构体,按属性创建含有元胞数组的结构体,filenames,isfield,isstruct,orderfields 觉得有用的话 ...
- 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 ...
- matlab中元胞数组的创建与内容读取
一.创建元胞数组 1.用cell命令创建规格为2*2的空元胞 >> a=cell(2,2) a = [] [] [] [] 2.用大括号"{}"创建元胞数组并赋值 &g ...
- MATLAB中TXT数据文件读取并写入元胞数组的方法与步骤
一. TXT数据文件读取 Data = load('train.txt'); %简单的文件读取,这时在工作区可以看到导入的大数据变量Data 二.大数据变量Data装入元胞数组中 D = cell ...
- matlab笔记(1) 元胞结构cell2mat和num2cell
摘自于:https://zhidao.baidu.com/question/1987862234171281467.html https://www.zybang.com/question/dcb09 ...
- matlab的cell数组
matlab的cell数组 元胞数组: 元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵.组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每 ...
- 美国康奈尔大学BioNB441元胞自动机MATLAB应用
美国康奈尔大学BioNB441在Matlab中的元胞自动机 介绍 元胞自动机(CA)是用于计算计划利用当地的规则和本地通信.普遍CA定义一个网格,网格上的每个点代表一个有限数量的状态中的细胞.过渡规则 ...
随机推荐
- 软件工程(c编码实践) 学习笔记(一)
vim 有三种模式:一般模式,编辑模式,命令模式. -------------------------------------------------------------------------- ...
- CoreAnimation-03-隐式动画
简介 每个UI控件,默认自动创建一个图层(根图层),即每个UI控件对应于至少一个图层 可以手动创建图层,这些图层为非根图层 对非根图层的某些属性(标记为Animatable的属性)进行修改,默认会自动 ...
- iOS之UI--涂鸦画板实例 (有待更新)
首先是搭建框架 其他的略过,直接展示效果: 然后接下来上传搭建好两个控制器框架的源码百度云下载链接: http://pan.baidu.com/s/1skjpDox 密码: ardx ,工程里面还有我 ...
- Resharper注册机实现以及源代码
一直用Resharper,每次找注册机也麻烦,就想怎么才能自己能做个注册机,把它原理给搞懂了,不就不用找了.今天早上起来研究了下Resharper注册机,网上找到一位大神之前做Resharper注册机 ...
- 关于git
一.Git基础教程 01.[入门练习]廖雪峰 git教程网:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8 ...
- 问题解决——XP线程池找不到QueueUserWorkItem
2013年7月11号 主管让同事写一个并发100的小工具进行什么压力测试,据说是创建100个线程. 我表示这真真的是在坑人! 线程创建消耗资源,以自己的笔记本来跑这个东西,时间片都消耗在了线程切换上了 ...
- C语言杂谈(三)存储类别
本文讨论C语言中的存储类别,包括数据在内存的存储.变量的存储类别.函数的存储类别.生存周期.下图为计算机的存储空间,有寄存器和内存. 一.存储区域 1.寄存器:存放立即参加运算的数据. 2.系统区:存 ...
- 关于统计变换(CT/MCT/RMCT)算法的学习和实现
原文地址http://blog.sina.com.cn/s/blog_684c8d630100turx.html 刚开会每周的例会,最讨厌开会了,不过为了能顺利毕业,只能忍了.闲话不多说了,下面把上周 ...
- linux chromuim安装常用插件(flash,手势,拖拽,广告屏蔽)
1.本机kali2.0 64位,kali基于Debian.文章所用的所有插件请到http://files.cnblogs.com/files/yuuyuu/chromium_plugins.tar. ...
- Hadoop Shell命令字典(可收藏)
可以带着下面问题来阅读: 1.chmod与chown的区别是什麽?2.cat将路径指定文件的内容输出到哪里?3.cp能否是不同之间复制?4.hdfs如何查看文件大小?5.hdfs如何合并文件?6.如何 ...