讲真,我觉得最好的说明文档是MATLAB 帮助文档。但是由于朋友们可能看英文费劲,或者更喜欢看我的用“人话”讲解MATLAB用法。下面我从一个MATLAB深度用户的角度来讲解一下MATLAB 中cell数据类型的使用方法和注意事项。文末有福利
1、Cell定义
我感觉Cell的发明是为了补充数值矩阵的不足。Cell 能包含任何类型的数据,比如数值、字符串、逻辑值甚至是Cell自身。说句人话就是Cell 是个筐,啥个都能装。但是由于Cell自己的“都能装”的属性,这个读取和写入就变的些复杂。
2、生成Cell函数
最简单的生成方法就是采用{ }大括号就行。
比如生成2X3的cell矩阵C
C = {'one', 'two', 'three';
1, 2, 3};
或者采用cell生成指大小的空cell矩阵,比如生成2X3cell矩阵D
D=cell(2,3);
或者借助已有的数据矩阵,通过mat2cell生成cell矩阵。
a = magic(3)
c = num2cell(a)
3、Cell读取与写入
这里有一个特别注意的问题,{ }与()有不同的含义:()可以引用与读写“一片”的cell的集合。{ }只能对每一个cell个体进行读写。放心,我知道你们都没有明白我在说什么。具体用法可以看下面的“栗子”
A)( )读取‘一片’cell集合
upperLeft = C(1:2,1:2)
结果就是
upperLeft =
'one' 'two'
[ 1] [ 2]
B) ()写入“一片”
C(1,1:3) = {'first','second','third'}
这样就重新写入了C矩阵的第一行,可见现在的C
C =
'first' 'second' 'third'
[ 1] [ 2] [ 3]
C) { }对单独的一个Cell进行读写
last = C{2,3}
这是读取C的第2行第三列的值,可得
last =
3
要是你打算一起读取,比如
C{2,1:3}
就好得到
ans =
1
ans =
2
ans =
3
MATLAB 依旧我素我行,采用{ }读取好比是从树上摘果子,有一个果子就要有几袋子接着。正确的格式是
[r2c1,r2c2,r2c3]=C{2,:}
r2c1 =
1
r2c2 =
2
r2c3 =
3
4、注意问题
cell是较为高级的数据结构,提供了很多转换函数,能够将一些较为基础的数据结构转为cell,方便进行数据操作。
mat2cell数据矩阵变为cell矩阵,分块可变。num2cell数据矩阵变为cell矩阵,不能改变分块。struct2cell结构体变化cell矩阵table2cellTable变为cell矩阵。
但是也不是最“方便”的数据结构。比如它对自己的行数据和列数据不能进行命名,也没有较为简单的文件读写方式。这些问题在table型数据格式中会解决。