利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。
素材来源“数学建模清风”
特此说明:本博客的内容只在于总结在使用matlab中的一些小技巧,并非教程,若想系统的学习MATLAB,也可以移步去链接中的视频,观看学习。也欢迎各位在留言区补充,纠错,讨论。
元胞数组
1 概念
元胞数组(cell)作为一个独立的存储单元,可以将不同数据类型的数据存储在同一个矩阵中。它是一种包含名为元胞的索引数据容器的数据类型,其中的每个元胞都可以包含任意类型的数据。元胞数组通常包含文本列表、文本和数字的组合或者不同大小的数值数组。
2 数据类型
下面介绍的元胞数组涉及到许多不同的数据类型,所以在这里先简单的介绍以下各种数学类型。
数值类型(double):用来保存数值数据,包括整型和浮点型,其中整型和浮点型还可以进步细分。我们创建的数值矩阵都是默认的双精度浮点型。
文本类型:用来保存文本数据,可细分为字符类型(char)和字符串类型(string)。
逻辑类型(logical):包含布尔型变量true和false,分别表示逻辑值1和逻辑值0。
元胞数组类型(cell):包含名为元胞的索引数据容器的数据类型,其中的每个元胞都可以包含任意类型的数据。。
结构体数组类型(struct):带有可以包含各种类型和大小的数据的命名字段的数组.
分类数组类型(categorical):用于保存分类型变量的数据,例如性别、等级等.
日期时间类型(datetime):用于保存日期、时间的数据.
表格类型(table):保存表格形式的数据.
函数句柄(function handle):可用于引用和间接调用函数.
3 创建元胞数组
创建元胞数组需要在英文模式下使用大括号 {} 。在元胞数组中,同行元素之间可以用逗号或者空格分隔,而行与行之间则通过分号或者回车键分隔。
A = {1:3, 'afabvab';
char('afg','bva','adf') 0989;
[12 34 32;2 2 43] [2;4]}
从上面可以看出元胞数组中保存的数据非常灵活,数据大小和数据类型都没有限制。
并且在新版本的MATLAB中,会将元胞数组的保存在一个表格中,且每一个元素的类型都是灵活和,可以为任意数值类型。
既然有如此多的数据类型,为什么MATLAB还要采用元胞数组的类型去表达这些数值呢?
这种设计基于元胞数组的特性,允许在同一数组中存储不同类型和大小的数据。例如,初始的元胞可能包含一个数值向量[123],后续可以轻松更换为其他向量、矩阵或不同类型的数据。
MATLAB中的元胞数组将每个元素视为独立的元胞,使得修改时不会影响整体结构。这种设计显著增强了元胞数组的灵活性,成为处理不规则数据的理想选择。
4 引用元胞数组
引用元胞数组有两种方式:使用小括号()和使用大括号{}。这两种引用方式有着不同的用途和效果。
下面用一个4x2的元胞数组来作为例子举例:
A = {1:3, 'afabvab';
true,7898;
[12 34 32;2 2 43],[2;4];
char('ad','vbh','bj'),5+8i}
(1)当使用小括号()引用时
当使用小括号()来引用元胞数组时,我们实际上是在引用元胞数组中的元胞,因此小括号引用时返回的是一个元胞数组,而不是元胞中存储的数据。
A = {1:3, 'afabvab';
true,7898;
[12 34 32;2 2 43],[2;4];
char('ad','vbh','bj'),5+8i}
%第一行第二列位置的元素
A1 = A(1,2)
%第四行第一列位置的元素
A2 = A(4,1)
%使用class查看A1的数据类型
class(A1)
%查看A1的大小
size(A1)
%奇数行元素
A(1:2:end)
%线性索引为5的元素
A(5)
%按照线性索引的顺序重新排列元胞数组
A(:)
(1)当使用大括号 { } 引用时
使用大括号{}引用元胞数组时,我们可以直接得到对应位置的元胞数组中的数据。
A = {1:3, 'afabvab';
true,7898;
[12 34 32;2 2 43],[2;4];
char('ad','vbh','bj'),5+8i}
%第一行第二列位置的元素
A1 = A{1,2}
%第四行第一列位置的元素
A2 = A{4,1}
%使用class查看A1的数据类型
class(A1)
%查看A1的大小
size(A1)
%第一行元胞中的数据
A{1,:}
% 使用两个变量保存第一行元胞中的数据
[B,C] = A{1,:}
%返回变量数量小于引用的元胞数量
[x, y] = A{1:2,:}