- Matlab 教程
- MATLAB - 首页
- MATLAB - 概述
- MATLAB - 特性
- MATLAB - 环境设置
- MATLAB - 编辑器
- MATLAB - 在线
- MATLAB - 工作区
- MATLAB - 语法
- MATLAB - 变量
- MATLAB - 命令
- MATLAB - 数据类型
- MATLAB - 运算符
- MATLAB - 日期和时间
- MATLAB - 数字
- MATLAB - 随机数
- MATLAB - 字符串和字符
- MATLAB - 文本格式化
- MATLAB - 时间表
- MATLAB - M 文件
- MATLAB - 冒号表示法
- MATLAB - 数据导入
- MATLAB - 数据输出
- MATLAB - 数据归一化
- MATLAB - 预定义变量
- MATLAB - 决策
- MATLAB - 决策
- MATLAB - If End 语句
- MATLAB - If Else 语句
- MATLAB - If…Elseif Else 语句
- MATLAB - 嵌套 If 语句
- MATLAB - Switch 语句
- MATLAB - 嵌套 Switch
- MATLAB - 循环
- MATLAB - 循环
- MATLAB - For 循环
- MATLAB - While 循环
- MATLAB - 嵌套循环
- MATLAB - Break 语句
- MATLAB - Continue 语句
- MATLAB - End 语句
- MATLAB - 数组
- MATLAB - 数组
- MATLAB - 向量
- MATLAB - 转置运算符
- MATLAB - 数组索引
- MATLAB - 多维数组
- MATLAB - 兼容数组
- MATLAB - 分类数组
- MATLAB - 元胞数组
- MATLAB - 矩阵
- MATLAB - 稀疏矩阵
- MATLAB - 表格
- MATLAB - 结构体
- MATLAB - 数组乘法
- MATLAB - 数组除法
- MATLAB - 数组函数
- MATLAB - 函数
- MATLAB - 函数
- MATLAB - 函数参数
- MATLAB - 匿名函数
- MATLAB - 嵌套函数
- MATLAB - Return 语句
- MATLAB - 空函数
- MATLAB - 局部函数
- MATLAB - 全局变量
- MATLAB - 函数句柄
- MATLAB - 滤波器函数
- MATLAB - 阶乘
- MATLAB - 私有函数
- MATLAB - 子函数
- MATLAB - 递归函数
- MATLAB - 函数优先级顺序
- MATLAB - Map 函数
- MATLAB - Mean 函数
- MATLAB - End 函数
- MATLAB - 错误处理
- MATLAB - 错误处理
- MATLAB - Try...Catch 语句
- MATLAB - 调试
- MATLAB - 绘图
- MATLAB - 绘图
- MATLAB - 绘制数组
- MATLAB - 绘制向量
- MATLAB - 条形图
- MATLAB - 直方图
- MATLAB - 图形
- MATLAB - 二维线图
- MATLAB - 三维图
- MATLAB - 格式化绘图
- MATLAB - 对数坐标轴绘图
- MATLAB - 绘制误差条
- MATLAB - 绘制三维等值线
- MATLAB - 极坐标图
- MATLAB - 散点图
- MATLAB - 绘制表达式或函数
- MATLAB - 绘制矩形
- MATLAB - 绘制频谱图
- MATLAB - 绘制网格曲面
- MATLAB - 绘制正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 线性插值
- MATLAB - 二维数组插值
- MATLAB - 三维数组插值
- MATLAB - 多项式
- MATLAB - 多项式
- MATLAB - 多项式加法
- MATLAB - 多项式乘法
- MATLAB - 多项式除法
- MATLAB - 多项式的导数
- MATLAB - 变换
- MATLAB - 变换
- MATLAB - 拉普拉斯变换
- MATLAB - 拉普拉斯滤波器
- MATLAB - 高斯-拉普拉斯滤波器
- MATLAB - 逆傅里叶变换
- MATLAB - 傅里叶变换
- MATLAB - 快速傅里叶变换
- MATLAB - 二维逆余弦变换
- MATLAB - 向坐标轴添加图例
- MATLAB - 面向对象
- MATLAB - 面向对象编程
- MATLAB - 类和对象
- MATLAB - 函数重载
- MATLAB - 运算符重载
- MATLAB - 用户定义类
- MATLAB - 复制对象
- MATLAB - 代数
- MATLAB - 线性代数
- MATLAB - 高斯消元法
- MATLAB - 高斯-约旦消元法
- MATLAB - 简化行阶梯形
- MATLAB - 特征值和特征向量
- MATLAB - 积分
- MATLAB - 积分
- MATLAB - 二重积分
- MATLAB - 梯形法则
- MATLAB - 辛普森法则
- MATLAB - 杂项
- MATLAB - 微积分
- MATLAB - 微分
- MATLAB - 矩阵的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用资源
- MATLAB - 快速指南
- MATLAB - 有用资源
- MATLAB - 讨论
MATLAB - 元胞数组
在 MATLAB 中,元胞数组是一种灵活的数据结构,允许您存储不同类型和大小的数据。这与常规数组不同,在常规数组中,数组中的元素必须具有相同的数据类型。
元胞数组提供了灵活性,在处理混合数据时特别有用。元胞数组非常擅长处理复杂数据集,并能够创建更动态和高效的 MATLAB 代码。
元胞数组与普通数组
元胞数组和普通数组都是 Matlab 中的数据结构。以下是它们之间的区别:
元胞数组 | 普通数组 |
---|---|
元胞数组可以存储不同数据类型的元素,例如数字、字符串、其他数组,甚至其他元胞数组。 | 普通数组(数值数组或矩阵)只能存储相同数据类型的元素。例如,如果您创建一个数值数组,则所有元素都必须是相同数据类型的数字(例如,double、int 等)。 |
元胞数组使用花括号 {} 来索引和访问单个元素。 | 普通数组使用圆括号 () 来索引和访问元素。 |
元胞数组可以在运行时动态增长或缩小,允许您根据需要添加或删除元素,而无需预先分配任何内存。 | 普通数组一旦创建,其大小就固定了。要更改普通数组的大小,您需要创建一个新数组并复制数据。 |
元胞数组在处理不同大小的数据元素时内存效率更高。 | 普通数组具有固定大小,如果您需要存储数据,则必须分配额外的内存。 |
访问元胞数组中的元素可能比访问普通数组中的元素稍慢,这是因为处理不同数据类型和大小的复杂数据结构。 | 访问普通数组中的元素通常更快,因为所有元素都具有相同的数据类型。 |
元胞数组适用于处理复杂和混合数据 元胞数组适用于处理复杂和混合数据。它们擅长处理多个输出函数并分层组织数据。 | 普通数组非常适合数值计算、矩阵运算以及数据类型统一且大小固定的应用。 |
元胞数组的描述和创建
您可以通过以下方式创建元胞数组:
- 使用元胞数组运算符 {}
- 使用 cell() 函数
要使用运算符 {} 创建元胞数组
元胞数组是一种数据结构,它包含称为单元格的索引数据容器,其中每个单元格都可以灵活地存储任何类型的数据。
要创建元胞数组,我们需要使用花括号 {}。
示例
C = {'2023-07-23',[10 20 30 40]}
在 matlab 中执行后,您将获得以下结果:
>> C = {'2023-07-23',[10 20 30 40]} C = { [1,1] = 2023-07-23 [1,2] = 10 20 30 40 } >>
我们上面创建的元胞数组的大小为 1x2,即一行两列。
让我们再添加一行,如下所示:
C(2,:) = {'2023-07-24',[11 22 33 44]};
执行后将获得以下单元格:
C = 2x2 cell array {'2023-07-23'} {[10 20 30 40]} {'2023-07-24'} {[11 22 33 44]} >>
让我们再添加一行。
C(3,:) = {'2023-07-25',[1 2 3 4]};
执行后的输出为:
C = 3x2 cell array {'2023-07-23'} {[10 20 30 40]} {'2023-07-24'} {[11 22 33 44]} {'2023-07-25'} {[ 1 2 3 4]} >>
因此,我们现在有 3 行 2 列,使其成为一个 3x2 元胞数组。
现在,要访问第一行,您可以简单地执行以下操作:
C(1,:)
执行后的输出为:
>> C(1,:) ans = 1x2 cell array {'2023-07-23'} {[10 20 30 40]} >>
要访问第一行中的第二列,您可以简单地执行以下操作:
C(1,2)
执行后的输出为:
>> C(1,2) ans = 1x1 cell array {[10 20 30 40]} >>
您还可以创建空单元格,如下所示:
A = {}
执行后,您应该看到如下所示:
>> A = {} A = 0x0 empty cell array >>
拥有空单元格数组后,您可以根据需要向其中添加数据。
使用 cell() 函数
此方法允许您预分配元胞数组,以便以后分配数据。
语法
C = cell(n) C = cell(sz1,...,szN) C = cell(sz)
- 创建一个大小为 nxn 的元胞数组 cell(n) 返回一个 n×n 的元胞数组,其中包含空矩阵。
- 创建一个大小为 sz1-by-...-by-szN 的元胞数组 cell(sz1,...,szN) 返回一个 sz1,...,szN 的元胞数组,其中包含空矩阵。这里 sz1..szN 表示每个维度的尺寸。例如 cell(3,3) 将返回一个大小为 3x3 的元胞数组。
- 创建一个大小为 sz 向量 的空元胞数组。例如 cell([3,3]) 将返回一个 3x3 的元胞数组。
让我们看看使用 cell() 函数的一些示例。
示例 1
A = cell(2)
在 matlab 命令窗口中执行后,输出为:
>> A = cell(2) A = { [1,1] = [](0x0) [2,1] = [](0x0) [1,2] = [](0x0) [2,2] = [](0x0) } >>
示例 2
在此示例中,将创建一个大小为 3x3x3 的元胞数组。该元胞数组在创建时为空,但其大小将为 3x3x3。
C = cell(3,3,3);
执行后,您将获得以下输出:
>> C = cell(3,3,3) 3x3x3 cell array C(:,:,1) = {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} C(:,:,2) = {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} C(:,:,3) = {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} >>
示例 3
在此示例中,将创建一个空元胞数组,然后更新其中的数据。数据将是不同类型。
C = cell(2, 3);
执行后,您将看到一个大小为 2x3 的空元胞数组,如下所示:
>> C = cell(2, 3) C = 2x3 cell array {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} >>
现在让我们为每个单元格分配数据。
C{1, 1} = 'Hello'; C{1, 2} = 50; C{1, 3} = [1, 2, 3]; C{2, 1} = 3.14; C{2, 2} = 'TEST'; C{2, 3} = magic(3);
执行后将获得以下结果:
>> C = cell(2, 3) C = 2x3 cell array {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} >> C{1, 1} = 'Hello'; C{1, 2} = 50; C{1, 3} = [1, 2, 3]; C{2, 1} = 3.14; C{2, 2} = 'TEST'; C{2, 3} = magic(3); >> C C = 2x3 cell array {'Hello' } {[ 50]} {[ 1 2 3]} {[3.1400]} {'TEST'} {3x3 double} >>
元胞数组中的每个单元格都可以保存不同类型的数据,例如字符串、数字、矩阵、数组;这使得元胞数组在 MATLAB 中处理异构数据时更加灵活。
将数组转换为元胞数组
在这里,我们将了解如何将给定数组转换为元胞数组。我们将使用函数 num2cell()。
num2cell()
num2cell() 允许您将数值数组转换为元胞数组,其中数值数组的每个元素都成为元胞数组的元素。
示例
nArr = [1, 2, 3, 4, 5]; C = num2cell(nArr)
在 Matlab 命令窗口中执行后,输出为:
>> nArr = [1, 2, 3, 4, 5]; C = num2cell(nArr) C = { [1,1] = 1 [1,2] = 2 [1,3] = 3 [1,4] = 4 [1,5] = 5 } >>
在这个例子中,num2cell() 函数将给定的数值数组 [1, 2, 3, 4, 5] 转换为一个元胞数组,其中数值数组的每个元素都变成了元胞数组的一个元素。元胞数组 C 与给定的数值数组具有相同的大小,并且每个元胞包含数值数组中的一个元素。
将表格转换为元胞数组
在本节中,我们将看到一个示例,展示如何将表格转换为元胞数组。
Matlab 带有一个名为 table2cell() 的函数,可以帮助将表格转换为元胞数组。在此过程中,表格中的每个变量都将成为元胞的列。
table2cell()
table2cell() 函数用于将表格转换为元胞数组。表格和元胞数组是 MATLAB 中两种不同的数据结构,表格用于存储和管理具有命名列的表格数据,而元胞数组是更通用的容器,可以在不同的元胞中存储不同类型的数据。
当您想要执行更容易使用元胞数组完成的操作时,将表格转换为元胞数组(使用 table2cell())会很有用。
示例
Name = {'Riya'; 'Siya'; 'Tiya'}; Age = [25; 30; 28]; Height = [160; 175; 168]; Weight = [55; 70; 65]; T = table(Name, Age, Height, Weight); C = table2cell(T)
在上面的例子中,我们首先创建一个包含 Name、Age、Height 和 Weight 列的示例表格 T。然后,我们使用 table2cell() 函数将表格 T 转换为元胞数组 C。最后,我们显示元胞数组 C 中的内容。
当您在 Matlab 命令窗口中执行相同的操作时,输出为:
>> Name = {'Riya'; 'Siya'; 'Tiya'}; Age = [25; 30; 28]; Height = [160; 175; 168]; Weight = [55; 70; 65]; T = table(Name, Age, Height, Weight); C = table2cell(T) C = 3x4 cell array {'Riya'} {[25]} {[160]} {[55]} {'Siya'} {[30]} {[175]} {[70]} {'Tiya'} {[28]} {[168]} {[65]} >>