Cell
MATLAB 中 cell 类和 structure 类称为 heterogeneous containers, 它们是特殊的数组 array, 与一般 数组不同, 可以储存不同类型数据.
- Cell array 是对一般 array 的直接扩展, 即其中元素 (称为元胞 cell) 可以为不同数据类型
- 所以只含一个元素的 cell 类是没有意义的, 所以一般说 cell array 并默认其包含多个元素
- Cell array 中元素自然还可以是 cell 类, 构成 nested cell array
- 例子:

- 花括号
{}是 cell 的识别符
属性与显示
- 函数 iscell
- 显示
- 函数 celldisp 逐个显示 cell array 每个 cell 具体内容
- 函数 cellplot 显示 cell array 的结构图
创建
- 赋值语句
C(ind) = {x}C{ind} = x
- 其中 ind 即一般的数组索引
- 以上赋值语句也适用于扩展 cell array
- 函数 cell:
cell(<[sz1,...,szn]>)- 返回 sz1-…-szn 维 cell array, 其中每个 cell 都为空
[] - 只有一个参数 sz1 时, 返回 sz1-sz1 方 cell array
- 返回 sz1-…-szn 维 cell array, 其中每个 cell 都为空
!! 以上方法生成 “矩形” cell array, 未被赋值的 cell 默认为空 []
例子:
>> A = cell(2,3)
A =
2x3 cell array
{0x0 double} {0x0 double} {0x0 double}
{0x0 double} {0x0 double} {0x0 double}
>> A{1,1} = 'hello'
A =
2x3 cell array
{'hello' } {0x0 double} {0x0 double}
{0x0 double} {0x0 double} {0x0 double}
>> A(2,3) = {123}
A =
2x3 cell array
{'hello' } {0x0 double} {0x0 double}
{0x0 double} {0x0 double} {[ 123]}
>> A{3,3} = [1;2]
A =
3x3 cell array
{'hello' } {0x0 double} {0x0 double}
{0x0 double} {0x0 double} {[ 123]}
{0x0 double} {0x0 double} {2x1 double}访问与删减
Cell array 的访问完全通过 Matlab Array - Indexing, 只不过用圆括号 () 包裹索引时返回的是子 cell array (为 cell 类), 用花括号 {} 包裹索引时返回的才是其中元素本身
!! 这也解释了为什么 cell array 的赋值语法有两种
例子:
>> A{2,3}
ans =
123
>> A(2,3)
ans =
1x1 cell array
{[123]}通过索引就可以删除和切除 cell array
A{ind} = []删除索引为 ind 的元素 (赋空值)A(ind) = []切除 A- 为保证 cell array 为 “矩形”, ind 只能有一个分量不是引号
: - 即只能 “整行/整列” 地切除
- 为保证 cell array 为 “矩形”, ind 只能有一个分量不是引号
嵌套
Cell array 的 cell 自然可以为 cell array, 这样就构成 nested cell array. 其创建, 访问等过程与一般 array 一致. 见下例
>> A{2,2} = {1, 2;'hello', cell(2)}
A =
2x2 cell array
{0x0 double} {0x0 double}
{0x0 double} {2x2 cell }
>> A{2,2}(2,1)
ans =
1x1 cell array
{'hello'}
>> A{2,2}{2,2}(2) = {'sub'}
A =
2x2 cell array
{0x0 double} {0x0 double}
{0x0 double} {2x2 cell }
>> A{2,2}{2,2}{2}
ans =
'sub'!! 一般来说 nested cell array 的中间指标都是花括号 {}