Matlab-cell

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
改变元胞数组的结构

猜你喜欢

转载自www.cnblogs.com/jwg-fendi/p/10052861.html
今日推荐