MATLAB Cell数组
2016-12-02 19:21
211 查看
matlab cell数组
cell数组是MATLAB的一种特殊矩阵,或者叫做广义矩阵。矩阵的每个元素可以是任何一种数据类型的常数、常量或者矩阵,所以矩阵的每个的元素叫做cell。和一般的数值矩阵一样,元胞数组的内存空间也是动态分配的。
在做图像处理的时候需要用到一维数组,数组的元素为一个3×3的像素矩阵。而矩阵式不能作为一般数值数组的元素的。这样就必须用到cell数组。具体应用如下:
StarPic=cell(0);
for j=1:1:i-1
StarPic{j}=[PicAllNew(MaxPix(1,j)-1,MaxPix(2,j)-1) PicAllNew(MaxPix(1,j)-1,MaxPix(2,j)) PicAllNew(MaxPix(1,j)-1,MaxPix(2,j)+1); ...
PicAllNew(MaxPix(1,j),MaxPix(2,j)-1) PicAllNew(MaxPix(1,j),MaxPix(2,j)) PicAllNew(MaxPix(1,j),MaxPix(2,j)+1); ...
PicAllNew(MaxPix(1,j)+1,MaxPix(2,j)-1) PicAllNew(MaxPix(1,j)+1,MaxPix(2,j)) PicAllNew(MaxPix(1,j)+1,MaxPix(2,j)+1)];
end
a=StarPic{1}
class(a)
b=StarPic(1)
class(b)
1、 用cell函数创建元胞数组,创建的数组为空元胞。cell函数创建空元胞数组的主要目的是为数组预先分配连续的存储空间,节约内存占用,提高执行效率。注意以下cell函数创建的区别:
>> a=cell(0);
a={}
>>a=cell(1)
a={[]}
>>a=cell(3,3)
a=[ ] [ ] [ ]
[ ] [ ] [ ]
[ ] [ ] [ ]
2、 从元胞数组中读取数据,可保存为一个标准的数组或一个新的单元数组,或取出数组进行计算。
通过小括号()里面加下标,访问cell数组中的数据,返回的是对应的cell。
通过大括号{}里面加下标,访问cell数组中的数据,返回的是对应cell的内容。
在上面的具体应用中,a的数据类型为:double,且a=[1.3 1.2. 1.4;1.3 1.2 1.4;1.2 1.4 1.3]
而b的数据类型为cell,b=[3×3 double]。
3、 使用元胞的下标,可将一个元胞数组的子集赋值给另一个变量,创建新的元胞数组。
4、 元胞数组的删除和重塑
1) 、要删除单元数组中的行或列,可以用冒号表示单元数组中的行或列,然后对其赋一个空矩阵即可。
a={123,'abcde';zeros(3,5),ones(3,3)}
a =
[ 123] 'abcde'
[3x5 double] [3x3 double]
>> a(1,:)=[]
a =
[3x5 double] [3x3 double]
>> a={123,'abcde';zeros(3,5),ones(3,3)}
a =
[ 123] 'abcde'
[3x5 double] [3x3 double]
>> a{1}=[]
a =
[] 'abcde'
[3x5 double] [3x3 double]
>> a={123,'abcde';zeros(3,5),ones(3,3)}
a =
[ 123] 'abcde'
[3x5 double] [3x3 double]
>> a(1)=[]
a =
[3x5 double] 'abcde' [3x3 double]
>> a={123,'abcde';zeros(3,5),ones(3,3)}
a =
[ 123] 'abcde'
[3x5 double] [3x3 double]
>> a(2)=[]
a =
[123] 'abcde' [3x3 double]
2)、元宝数组和其他数组一样,也可以通过reshape函数改变形状,改变后的元胞数组与原元胞数组的元素个数相同,不能通过改变形状来添加或删除元胞数组中的元素。
a={123,'abcde';zeros(3,5),ones(3,3)}
a =
[ 123] 'abcde'
[3x5 double] [3x3 double]
>> size a
ans =
1 1
>> size(a)
ans =
2 2
>> b=reshape(a,1,4)
b =
[123] [3x5 double] 'abcde' [3x3 double]
>> size(b)
ans =
1 4
5、元胞数组中的操作函数
cell:创建空的元胞数组
cellfun:为元胞数组的每个元胞执行指定的函数
celldisp:显示所有元胞的内容
cellplot:利用图形方式显示元胞数组
cell2mat:将元胞数组转变成为普通的矩阵
mat2cell:将数值矩阵转变成为元胞数组
num2cell:将数值数组转变成为元胞数组
deal:将输入参数赋值给输出
cell2struct:将元胞数组转变成为结构
struct2cell:将结构转变为元胞数组
iscell:判断输入是否为元胞数组
cellfun函数的主要功能是对元胞数组的元素(元胞)分别指定不同的函数,不过,能够在cellfun函数中使用的函数ushuliang是有限的。
能在cellfun中使用的函数:
isempty:若元胞元素为空,则返回逻辑真
islogical:若元胞元素为逻辑类型,则返回逻辑真
isreal:若元胞元素为实数,则返回逻辑真
length:元胞元素的长
ndims:元胞元素的维数
prodofsize:元胞元素包含的元素个数
举例:
a={123,'abcde';1-7i,ones(3,3)}
a =
[ 123] 'abcde'
[1.0000 - 7.0000i] [3x3 double]
>> b=cellfun('isreal',a)
b =
1 1
0 1
>> c=cellfun('length',a)
c =
1 5
1 3
>> d=cellfun('isclass',a,'double')
d =
1 0
1 1
6、元胞数组的嵌套
元胞数组的元胞中包含其他的元胞数组,称为嵌套元胞数组,没有嵌套结构的元胞则称为页元胞。使用嵌套的大括号或cell函数,或直接用赋值表达式,都可以创建嵌套单元数组,另外还可以访问嵌套元胞数组的子数组、元胞或元胞的元素。
cell数组是MATLAB的一种特殊矩阵,或者叫做广义矩阵。矩阵的每个元素可以是任何一种数据类型的常数、常量或者矩阵,所以矩阵的每个的元素叫做cell。和一般的数值矩阵一样,元胞数组的内存空间也是动态分配的。
在做图像处理的时候需要用到一维数组,数组的元素为一个3×3的像素矩阵。而矩阵式不能作为一般数值数组的元素的。这样就必须用到cell数组。具体应用如下:
StarPic=cell(0);
for j=1:1:i-1
StarPic{j}=[PicAllNew(MaxPix(1,j)-1,MaxPix(2,j)-1) PicAllNew(MaxPix(1,j)-1,MaxPix(2,j)) PicAllNew(MaxPix(1,j)-1,MaxPix(2,j)+1); ...
PicAllNew(MaxPix(1,j),MaxPix(2,j)-1) PicAllNew(MaxPix(1,j),MaxPix(2,j)) PicAllNew(MaxPix(1,j),MaxPix(2,j)+1); ...
PicAllNew(MaxPix(1,j)+1,MaxPix(2,j)-1) PicAllNew(MaxPix(1,j)+1,MaxPix(2,j)) PicAllNew(MaxPix(1,j)+1,MaxPix(2,j)+1)];
end
a=StarPic{1}
class(a)
b=StarPic(1)
class(b)
1、 用cell函数创建元胞数组,创建的数组为空元胞。cell函数创建空元胞数组的主要目的是为数组预先分配连续的存储空间,节约内存占用,提高执行效率。注意以下cell函数创建的区别:
>> a=cell(0);
a={}
>>a=cell(1)
a={[]}
>>a=cell(3,3)
a=[ ] [ ] [ ]
[ ] [ ] [ ]
[ ] [ ] [ ]
2、 从元胞数组中读取数据,可保存为一个标准的数组或一个新的单元数组,或取出数组进行计算。
通过小括号()里面加下标,访问cell数组中的数据,返回的是对应的cell。
通过大括号{}里面加下标,访问cell数组中的数据,返回的是对应cell的内容。
在上面的具体应用中,a的数据类型为:double,且a=[1.3 1.2. 1.4;1.3 1.2 1.4;1.2 1.4 1.3]
而b的数据类型为cell,b=[3×3 double]。
3、 使用元胞的下标,可将一个元胞数组的子集赋值给另一个变量,创建新的元胞数组。
4、 元胞数组的删除和重塑
1) 、要删除单元数组中的行或列,可以用冒号表示单元数组中的行或列,然后对其赋一个空矩阵即可。
a={123,'abcde';zeros(3,5),ones(3,3)}
a =
[ 123] 'abcde'
[3x5 double] [3x3 double]
>> a(1,:)=[]
a =
[3x5 double] [3x3 double]
>> a={123,'abcde';zeros(3,5),ones(3,3)}
a =
[ 123] 'abcde'
[3x5 double] [3x3 double]
>> a{1}=[]
a =
[] 'abcde'
[3x5 double] [3x3 double]
>> a={123,'abcde';zeros(3,5),ones(3,3)}
a =
[ 123] 'abcde'
[3x5 double] [3x3 double]
>> a(1)=[]
a =
[3x5 double] 'abcde' [3x3 double]
>> a={123,'abcde';zeros(3,5),ones(3,3)}
a =
[ 123] 'abcde'
[3x5 double] [3x3 double]
>> a(2)=[]
a =
[123] 'abcde' [3x3 double]
2)、元宝数组和其他数组一样,也可以通过reshape函数改变形状,改变后的元胞数组与原元胞数组的元素个数相同,不能通过改变形状来添加或删除元胞数组中的元素。
a={123,'abcde';zeros(3,5),ones(3,3)}
a =
[ 123] 'abcde'
[3x5 double] [3x3 double]
>> size a
ans =
1 1
>> size(a)
ans =
2 2
>> b=reshape(a,1,4)
b =
[123] [3x5 double] 'abcde' [3x3 double]
>> size(b)
ans =
1 4
5、元胞数组中的操作函数
cell:创建空的元胞数组
cellfun:为元胞数组的每个元胞执行指定的函数
celldisp:显示所有元胞的内容
cellplot:利用图形方式显示元胞数组
cell2mat:将元胞数组转变成为普通的矩阵
mat2cell:将数值矩阵转变成为元胞数组
num2cell:将数值数组转变成为元胞数组
deal:将输入参数赋值给输出
cell2struct:将元胞数组转变成为结构
struct2cell:将结构转变为元胞数组
iscell:判断输入是否为元胞数组
cellfun函数的主要功能是对元胞数组的元素(元胞)分别指定不同的函数,不过,能够在cellfun函数中使用的函数ushuliang是有限的。
能在cellfun中使用的函数:
isempty:若元胞元素为空,则返回逻辑真
islogical:若元胞元素为逻辑类型,则返回逻辑真
isreal:若元胞元素为实数,则返回逻辑真
length:元胞元素的长
ndims:元胞元素的维数
prodofsize:元胞元素包含的元素个数
举例:
a={123,'abcde';1-7i,ones(3,3)}
a =
[ 123] 'abcde'
[1.0000 - 7.0000i] [3x3 double]
>> b=cellfun('isreal',a)
b =
1 1
0 1
>> c=cellfun('length',a)
c =
1 5
1 3
>> d=cellfun('isclass',a,'double')
d =
1 0
1 1
6、元胞数组的嵌套
元胞数组的元胞中包含其他的元胞数组,称为嵌套元胞数组,没有嵌套结构的元胞则称为页元胞。使用嵌套的大括号或cell函数,或直接用赋值表达式,都可以创建嵌套单元数组,另外还可以访问嵌套元胞数组的子数组、元胞或元胞的元素。
相关文章推荐
- MATLAB访问cell数组的数据(大小括号的区别)
- matlab里cell和char,字符串与字符数组
- matlab的cell数组
- MATLAB中cell数组的是是非非
- Matlab中cell数组的使用
- MATLAB中cell数组的全面介绍
- matlab 判断cell数组里是否存在一个字符串
- matlab中cell数组的全面介绍
- matlab里cell和char,字符串与字符数组(zz)
- matlab cell类型数组存至txt文件
- matlab的cell数组
- MATLAB中cell数组的是是非非
- 如何将matlab中cell数组保存为可视化的文件
- [初学笔记]matlab中 访问单元格数组 cell 的内容
- Matlab删除cell数组中全为NaN的行和列
- MATLAB中cell数组的是是非非
- MATLAB中cell数组的是是非非
- Matlab: cell 数组
- Matlab中删除cell数组中的空元素
- MATLAB访问cell数组的数据(大小括号的区别)