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定义一个网格,网格上的每个点代表一个有限数量的状态中的细胞.过渡规则 ...
随机推荐
- MongoDb的bin目录下文件mongod,mongo,mongostat命令的说明及使用
MongoDB的下载地址:http://www.mongodb.org/downloads. 下载好直接解压安装包,即可使用. bin目录下的几个文件说明: mongo 客户端程序,连接MongoDB ...
- 编写一个Java程序,计算半径为3.0的圆周长和面积并输出结果。把圆周率π定义为常量,半径定义为变量,然后进行计算并输出结果。
- MongoDB学习笔记——聚合操作之聚合管道(Aggregation Pipeline)
MongoDB聚合管道 使用聚合管道可以对集合中的文档进行变换和组合. 管道是由一个个功能节点组成的,这些节点用管道操作符来进行表示.聚合管道以一个集合中的所有文档作为开始,然后这些文档从一个操作节点 ...
- MongoDB学习笔记——数据库操作
使用use数据库名称来创建数据库,如果该数据库已经存在则返回这个数据库 语句格式:use DATABASE_NAME >use mynewdb switched to db mynewdb 使用 ...
- Python基本数据结构-集合-创建/与其他类型比较
- 如何在Java Filter 中注入 Service
在项目中遇到一个问题,在 Filter中注入 Serivce失败,注入的service始终为null.如下所示: public class WeiXinFilter implements Filter ...
- DevExpress GridControl使用方法总结(转)
一.如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 二.如何新增一条记录 (1).gridView.AddN ...
- DataGridView单元格内容自动匹配下拉显示
页面显示数据使用的控件是ComponentFactory.Krypton.Toolkit中的KryptonDataGridView控件.在指定“商品”单元格中需要根据用户输入内容自动匹配数据库中商品信 ...
- 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装
微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...
- 通过beego快速创建一个Restful风格API项目及API文档自动化
通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...