MATLAB元胞数组
元胞数组是MATLAB的一种特殊数据类型,可以将元胞数组看做一种无所不包的通用矩阵,或者叫做广义矩阵。组成元胞数组的元素可以是任何一种数据类型的常数或者常量,每一个元素也可以具有不同的尺寸和内存占用空间,每一个元素的内容也可以完全不同,所以元胞数组的元素叫做元胞(cell)。和一般的数值矩阵一样,元胞数组的内存空间也是动态分配的。
精华之处就是在可以存储不同类型的数据.可以是Matlab的类型或者自定义的类型.
cell创建:
元胞数组的定义可以用两种方法来实现,一种是用赋值语句直接定义,另一种是由cell函数预分配存储空间,而后对元胞元素逐个赋值。用大括号"{}"创建元胞数组并赋值.
第一种:
>> a=[1,3,5;2,4,6];
>> b=[1,3;5,7;9,11];
>> x={ a,b,[1,2,3,4;5,6,7,8];'love',1:3,a*b }
x =
[2x3 double] [3x2 double] [2x4 double]
'love' [1x3 double] [2x2 double]
第二种:
>> y=cell(2,3)
y =
[] [] []
[] [] []
>> y{1,1}=a;
>> y{1,2}=b;
>> y{1,3}=[1,2,3,4;5,6,7,8];
>> y{2,1}='love';
>> y{2,2}=1:3;
>> y{2,3}=a*b;
>> y
y =
[2x3 double] [3x2 double] [2x4 double]
'love' [1x3 double] [2x2 double]
读取cell内数据内容:
读取内容:{ 大括号加下标 }和 ( 小括号加下标 )
区别在于类型( )是cell数组 ,{ }是实际类型.结果显示是一致的
>> a={‘a',123,[3 5 6],[1 2;7 8],sym(1)}
a =
‘a' [123] [1x3 double] [2x2 double] [1x1 sym]
>> class(a{1})
ans =
char #大括号显示实际类型为字符类型
>> class(a(1))
ans =
cell #小括号显示实际类型为cell类型
查看显示结果相同:
>>a(1)
ans =
'a'
>>a{1}
ans =
a
Cell数据类型转换:
cell数组的类型转换看到上面的那些类型转换函数,也许你会笑了,感觉也没有什么特别的,但是使用过这个cell数组的朋友,估计大部分都会有转换失败的经历-_-很坑爹的...
Cell Array and Struct Array
s = cell2struct(c, fields, dim)
cell数组转换为struct数组,注意fields为char数组或者cell数组,
这个经常错误就是fields类型以及dim不对.
c = struct2cell(s) struct
数组转换为cell数组 这个基本没有什么错误的
Matrix and Cell Array
c = mat2cell(x, m, n)
转换为 m行n列cell数组
m = cell2mat(c) 必须是同一类型,而且限制不可包含cell数组或object类型,但是struct结构是可以的(同样这个struct不含 cell和object类型,否则依旧出错)
Double and Cell Array
C = num2cell(A, [dim1, dim2, …] )
dimN 是一个整数,范围是1到ndims(A)
只有数值矩阵才可以直接转换为cell,没有供cell转为double的方法.这是非常让人恼火的!不过理解之后就知道,cell本来就是混合类型的,直接转向数值类型单一矩阵,这样是不合理的.
通常如果是的确是数值类型的可以走以下路线:cell->cell2mat 这时候注意cell2mat的条件非cell和object.否则,循环或者cellfun处理.如果可以使用 cell2mat 或者cat(dim,c{:}).很多时候都很方便
Cell Arrays of Strings
单独列出了是因为很多时候都要接触这个,基本txt之类读取来的数值数据都是char的cell数组~
可以使用cell参数与字符有关的部分函数(基本都支持)
cellstr Convert a character array to a cell array of strings.会去除末尾空白
char Convert a cell array of strings to a character array. 会恢复转换时候失去的空白
deblank Remove trailing blanks from a string.
iscellstr Return true for acell array of strings.
sort 排序.
strcat连接字符.
strcmp对比字符.
strmatch 查找字符.
strrep 替换字符
regexp系列及accumarray支持行列向量.
元胞数组常用函数:
函数名
|
说明
|
函数名
|
说明
|
cell
|
生成元胞数组
|
deal
|
输入/输出处理
|
cellfun
|
对元胞数组变量中的元素函数
|
cell2struct
|
将元胞数组转换为结构数组
|
celldisp
|
显示元胞数组变量的内容
|
struct2cell
|
将结构数组转换为元胞数组
|
cellplot
|
用图形显示元胞数组变量的内容
|
iscell
|
判断是否为元胞数组变量
|
num2cell
|
将数值数组转换为元胞数组
|
reshape
|
改变元胞数组的结构
|