![MATLAB R2022a完全自学一本通](https://wfqqreader-1252317822.image.myqcloud.com/cover/854/47548854/b_47548854.jpg)
2.1.7 元胞数组类型
1.概述
元胞(Cell)数组是一种无所不包的广义矩阵。组成元胞数组的每个元素称为一个单元。每个单元可以包括一个任意数组,如数值数组、字符串数组、结构体数组或另外一个元胞数组,因而每个单元可以具有不同的尺寸和内存占用空间。
○ 注意
与一般的数值数组一样,元胞数组的维数不受限制,可以为一维、二维或多维。
MATLAB中使用元胞数组的目的在于,它可以把不同类型的数据归并到一个数组中。
○ 注意
元胞数组的创建有两种方法:使用赋值语句创建元胞数组和利用cell函数创建空元胞数组。
(1)使用赋值语句创建元胞数组。与一般数组不同的是,元胞数组使用花括号“{}”来创建,使用逗号“,”或空格来分隔每个单元,使用分号“;”来分行。
例2-18:创建元胞数组。
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_53_1.jpg?sign=1738928042-Y5TCDlR6kfyHYqPGIjguqo8IIKBhKLOZ-0-ddf55881db0a156a4b5abab175c9cbbb)
程序运行结果如下:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_53_2.jpg?sign=1738928042-h3s2gWX7e9snoWdL220o6rzM9ZBwgbty-0-830538c796cb42bbd503eb12f651dedd)
(2)利用cell函数创建空元胞数组。
cell函数的调用格式如下:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_53_3.jpg?sign=1738928042-bm1TuVqTAMGNfmUEYLO1L7sUHvoeT2wy-0-0ef0f4821bb4dd95704ea6d5b2564c5d)
该函数创建一个m×n的空元胞数组,每个单元均为空矩阵。
例2-19:创建空元胞数组。
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_53_4.jpg?sign=1738928042-bOBBK6FTjdSnRYdVj20OylgQAQvrmLEG-0-6e55531dbcbf391b1c585deff140daaa)
程序运行结果如下:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_53_5.jpg?sign=1738928042-xxGJ7siINFjFLtiNKyQlpIoh5UGOCvAc-0-7cc54571db867298a7b236b235a96751)
与一般的数值数组一样,元胞数组的内存空间也是动态分配的。因此,使用cell函数创建空元胞数组的主要目的是为该元胞数组预先分配连续的存储空间,以节约内存,提高执行效率。
2.元胞数组的寻访
在元胞数组中,单元和单元中的内容是两个不同范畴的东西,因此,寻访单元和单元中的内容是两种不同的操作。MATLAB为上述两种操作设计了相对应的操作对象:单元外标识(Cell Indexing)和单元内编址(Content Addressing)。
对于元胞数组C,C(m,n)指的是元胞数组中第m行第n列的单元,而C{m,n}指的是元胞数组中第m行第n列单元中的内容。
例2-20:元胞数组的寻访。
在命令行窗口中依次输入以下命令:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_54_1.jpg?sign=1738928042-M536hJs0fdKsg9AeOiQT5C9api2r7VSV-0-09af1a2d0a7f3403a1c1bf586bd0b9a4)
得到的结果如下:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_54_2.jpg?sign=1738928042-KPpgpJ1Q7xuEvPxtcByaajVsEwtMhzTZ-0-3f7dc09d31b374447e693f9582b92239)
3.元胞数组的操作
元胞数组的操作包括合并/删除元胞数组中的指定单元、改变元胞数组的形状等。
(1)元胞数组的合并。
例2-21:元胞数组的合并。
在命令行窗口中依次输入以下命令:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_54_3.jpg?sign=1738928042-uCoNlbCaMKEAZ85MdXdoBTgrmiWY8abs-0-0c3b4ce620bb5b2967c9ee1df0e276a5)
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_55_1.jpg?sign=1738928042-WDNHcgOOaYgYutYmFFzuR7VM9y5Ffe2v-0-a0e7d5e86a590790267774496d408e4b)
得到的结果如下:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_55_2.jpg?sign=1738928042-cPnb6ZkKMq8xSEBCTVhEMitehmdOOJPw-0-d8a86a2e59d7eb73f556ced5374f8811)
(2)元胞数组中指定单元的删除。
如果要删除元胞数组中某个指定单元,则只需将空矩阵赋给该单元,即:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_55_3.jpg?sign=1738928042-nziR2QiWYU2vavuztRB8PwbL87vO9f9Q-0-c069822087d813067a5b860ab00ecdd4)
例2-22:有一个元胞数组C,删除其中的某个单元。
在命令行窗口中输入下列命令:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_55_4.jpg?sign=1738928042-bkxfReaKxX5pSALngpCktIrIMWRSeEOQ-0-778cfd169d8734a0ea7f5d33734b9366)
得到的结果如下:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_55_5.jpg?sign=1738928042-yavKo6rs8jbCgkDaulIzJlof5lEuN65v-0-2565059a498b4abab1f5f8dc875d641a)
(3)使用reshape函数改变元胞数组的形状。
reshape函数的调用格式为:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_55_6.jpg?sign=1738928042-bQxmOEVYNKlhgZfW1xHP8BbbCNM5vyQq-0-2fd053ef449d13cfcf46a758f57ba71f)
该函数将元胞数组C改变成一个具有M行N列的新元胞数组。
例2-23:将例2-22中的元胞数组C(1×4)改变成newC(4×1)。
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_55_7.jpg?sign=1738928042-6VxhetQ3oQYVt6nRhQyCsoHgrlXY2jun-0-4b1818940a3d40dc7d049ee0637b3a74)
得到的结果如下:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_55_8.jpg?sign=1738928042-tmBS0g8u0vJOUs9I73Zue0SezVF7prE8-0-0f81a9ce28a6feb2bf629ec3d1c832bd)