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
matlab的cell数组的更多相关文章
- MATLAB cell 数组介绍
转载:http://www.matlabsky.com/forum.php?mod=viewthread&tid=21089 由于工作需要,经常要处理大量的实验数据.基本都是由仪器导出来,随着 ...
- MATLAB 的 cell 大法(单元格数组)
MATLAB 的 cell,称单元格数组 or 元胞数组:使用频率特别高,甚至比 struct 结构体还高. MATLAB文档给出的 cell 官方定义: A cell array is a coll ...
- MATLAB元胞数组
MATLAB元胞数组 元胞数组: 元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵.组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每一个元 ...
- matlab之细胞数组
学习matlab的一个博客:https://blog.csdn.net/smf0504/article/details/51814362 Matlab从5.0版开始引入了一种新的数据类型—细胞( ce ...
- MATLAB中cell函数用法
cell元包是matlab中提供的一种数据类型,功能强大. 关于cell的创建: 1.跟一般创建举证一样,直接使用C = {A B D E}这种形式,不过这里把"[]"改成了}&q ...
- Matlab 之 字符串数组查找
Matlab的优势在于向量操作,字符串操作往往费时费力,但是如果能充分利用Matlab自带的一些函数,也可以取得不错的效果.下面就介绍一下字符串数组查找的小技巧. 字符串数组我通常会选择应用cell格 ...
- cell数组
问题: (注意,matlab判断一个数的类型的函数是class(var)) 如果p为一个数,那么h(1)=p,是没有问题的. 如果p为一个向量,那么h(1,:)=p是没有问题的. 如果p是一个矩阵的 ...
- matlab中cell array的理解
1. matlab中有一个函数iscell() 用于判断一个数组是不是cell array 参考:MATLAB Function Reference iscell Determine whether ...
- MATLAB——元胞数组
一. 1.元胞数组的创建 >> a={;ones(,),:} a = ] [2x3 ;ones(,),:} >> b=[{};{ones(,)},{:}] b = ] [2x3 ...
随机推荐
- bash if 表达式
.bash把[[ $a -lt $b ]]看作一个单独的元素,并且返回一个退出码.退出码0为真,非零为假 例如: a= b=c [[ $a -lt $b ]] echo $? # a小于b为真 [[ ...
- linux中创建静态库和动态库
1. 函数库有两种:静态库和动态库. 静态库在程序编译的时候会被连接到目标代码中,程序运行时将不再需要改静态库. 动态库中程序编译的时候并不会连接到目标代码中,而是在程序运行时才被载入,因此在程序运行 ...
- 解析嵌套json字符串,一个json字符串中嵌套另一个json字符串
我现在有一个字符串是这样: { "msg": { ", "attrName": "sensorData", "trans ...
- struts启动报错Javassist library is missing
很久不用struts2,最近在配置的时候,启动服务器报错 Caused by: java.lang.ExceptionInInitializerError at com.opensymphony.xw ...
- [DEncrypt] HashEncode--哈希加密帮助类 (转载)
点击下载 HashEncode.zip 这个类是关于加密,解密的操作,文件的一些高级操作1.HashEncode 得到随机哈希加密字符串2.HashEncode 得到一个随机数值3.HashEncod ...
- 理解java Web项目中的路径问题
本文以项目部署在tomcat服务器为例,其他相信也是一样的. 先说明请求页面的写法,在web中,页面路径主要写的有以下几种 1.请求重定向 2.浏览器的请求被服务器请求到新页面(我称为“转发”) 3. ...
- 各大浏览器内核(Rendering Engine)
记得刚开始写网页的时候,听童鞋们说各大浏览器的内核,也是懵懵懂懂的,知一不知其二,今天特地查一下: 内核只是一个通俗的说法,其英文名称为“Layout engine”,翻译过来就是“排版引擎”,也被称 ...
- MVVM模式应用 之xml文件的读取
XML如下所示: <?xml version="1.0" encoding="utf-8" ?> <schools> <schoo ...
- PreResultListener使用
PreResultListener是一个监听器接口,可以在Action处理完之后,系统转入实际视图前被回调. Struts2应用可以给Action.拦截器添加PreResultListener监听器, ...
- mysql 时间戳与日期格式的相互转换
1.UNIX时间戳转换为日期用函数: FROM_UNIXTIME() ); 输出:2006-08-22 12:11:10 2.日期转换为UNIX时间戳用函数: UNIX_TIMESTAMP() Sel ...