## 介绍
Matlab中有一种特殊的数组,称为**单元数组**(Cell arrays)。单元数组的元素是其他数组的一份拷贝,这意味着单元数组可以包含许多拥有不同数据类型元素的数组。
## 创建单元数组
### 使用cell()
可以使用`cell()`函数创建空的单元数组:
![](https://leanote.com/api/file/getImage?fileId=58148ff4ab644162e1003339)
### 使用花括号
然而通常的创建方法是使用花括号`{}`来创建单元数组,被花括号包含着的是其它将被拷贝的数组:
![](https://leanote.com/api/file/getImage?fileId=58148ff4ab644162e1003338)
上面的`sum(A)`生成一个1x4的矩阵,每一个元素是A的一列元素之和;`prod(A)`对矩阵A的每一列求乘积,然后将这些乘积组合成1x4的矩阵。
我们注意到第三个单元的内容被直接显示出来了,而不是显示"[1x1 double]"这样的东西。这是因为前两个单元太大,导致Matlab仅对内容较少的单元直接输出。
### 从其他数组生成
Matlab提供了一些函数,这些函数能够将其他数组转化为单元数组,如`cellstr()`函数:
![](https://leanote.com/api/file/getImage?fileId=58149988ab644162e10033ea)
由于数组的每一行的长度都是相同的,因此像上图中展示的,不能直接创建拥有不同长度行的文本。借此我们可以使用`char()`函数,但使用单元数组可能是一个更好的选择,因为使用`char()`生成的数组是对空缺的位置进行了填补,这可能浪费大量空间。
## 获取单元
由于单元数组也是数组,因此我们可以使用下标来索引这些单元:
![](https://leanote.com/api/file/getImage?fileId=58149338ab644164d4003166)
如果想要查看这些单元的内容,要使用花括号:
![](https://leanote.com/api/file/getImage?fileId=58149338ab644164d4003167)
单元数组可以存储大小不同的矩阵,而三维数组只能存储大小相同的矩阵。