- 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 - 返回语句
- 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 专为数值计算和数据分析而设计,因此可以轻松创建、操作和执行多维数组上的计算。
- MATLAB 的底层架构针对数组操作进行了优化,从而可以高效地处理大型数据集和复杂的计算。
- 新手可以轻松熟悉 MATLAB 中的多维数组概念,并在他们的工作中使用它。
- MATLAB 强大的可视化功能使您可以使用各种类型的图、图表和图像来绘制、可视化和分析多维数据。
多维数组的缺点
- 多维数组可能会使用大量的内存,特别是对于大型数据集而言。处理大型数组可能会导致系统内存限制。
- 成本效益和性能可能会稍微慢一些。
创建多维数组
要创建一个多维数组,首先让我们创建一个二维数组,然后将其扩展为多维数组。
让我们创建一个如下所示的 3x3 二维数组:
A = [1 2 3; 4 5 6; 7 8 9]
命令窗口的输出如下:
>> A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >>
现在要添加第三维,您可以这样做:
A(:,:,2) = [10 11 12; 13 14 15; 16 17 18]
因此 A(:,:, 1) 包含 [1 2 3; 4 5 6; 7 8 9],而 A(:,:,2) 包含 [10 11 12; 13 14 15; 16 17 18]
让我们看看 MATLAB 命令窗口中的执行结果:
>> A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >> A(:,:,2) = [10 11 12; 13 14 15; 16 17 18] A(:,:,1) = 1 2 3 4 5 6 7 8 9 A(:,:,2) = 10 11 12 13 14 15 16 17 18 >> A(:,:, 1) ans = 1 2 3 4 5 6 7 8 9 >> A(:,:,2) ans = 10 11 12 13 14 15 16 17 18 >>
让我们将第 3 页和第 4 页添加到多维数组 A 中。
A(:,:,3) = 0 A(:,:,4) = 1
在 MATLAB 命令窗口中执行相同的操作时:
A(:,:,3) = 0 0 0 0 0 0 0 0 0 A(:,:,4) = 1 1 1 1 1 1 1 1 1
因此,当您在 MATLAB 命令窗口中检查矩阵 A 时,您将得到以下结果:
>> A A(:,:,1) = 1 2 3 4 5 6 7 8 9 A(:,:,2) = 10 11 12 13 14 15 16 17 18 A(:,:,3) = 0 0 0 0 0 0 0 0 0 A(:,:,4) = 1 1 1 1 1 1 1 1 1 >>
访问多维数组的元素
要从多维数组中访问元素,请对您要访问的行、列和页使用整数下标。
例如,在二维数组(矩阵)中,您将使用两个下标:一个用于行索引,一个用于列索引。在三维数组中,您将使用三个下标:一个用于行索引,一个用于列索引,一个用于“页”或深度索引。
考虑到每页的值如下所示,我们将从多维数组 A 中访问元素。
A(:,:,1) = [1 2 3; 4 5 6; 7 8 9] A(:,:,2) = [10 11 12; 13 14 15; 16 17 18]
在 MATLAB 命令窗口中执行后,数组 A 如下所示:
>> A(:,:,1) = [1 2 3; 4 5 6; 7 8 9] A(:,:,2) = [10 11 12; 13 14 15; 16 17 18] A(:,:,1) = 1 2 3 4 5 6 7 8 9 A(:,:,2) = 10 11 12 13 14 15 16 17 18
从上面的第 2 页,我想访问值:12。
为此,我们可以使用以下细节来访问它
A(1, 3, 2)
这里 1 是值 12 所在的行,3 是它所在的列,2 是页或深度。
在 MATLAB 命令窗口中执行相同的操作时:
>> A(1, 3, 2) ans = 12 >>
前面我们只访问了一个值,要访问一系列值,可以按如下方式进行:
在第二维中使用索引向量 [1 2] 来访问 A 的每一页的第一列和第二列。
C = A(:,[1 2],:)
执行相同的操作后,MATLAB 命令窗口中的输出为:
C(:,:,1) = 1 2 4 5 7 8 C(:,:,2) = 10 11 13 14 16 17
现在,如果您想获取每一页的第二行和第三行,您可以这样做:
D = A(2:3,:,:)
执行相同的操作后,MATLAB 命令窗口中的输出为:
>> D = A(2:3,:,:) D(:,:,1) = 4 5 6 7 8 9 D(:,:,2) = 13 14 15 16 17 18
操作多维数组
在多维数组中,可以像对向量和矩阵一样,以多种方式重新排列元素。reshape、permute 和 squeeze 函数被证明是调整这些元素排列的有价值工具。
让我们看看在两页多维数组 A 上使用 reshape()、permute() 和 squeeze() 的示例。
A = [1 2 3 4 5; 9 0 6 3 7; 8 1 5 0 2] A(:,:,2) = [9 7 8 5 2; 3 5 8 5 1; 6 9 4 3 3]
在 MATLAB 命令窗口中执行上述操作后,输出为:
>> A = [1 2 3 4 5; 9 0 6 3 7; 8 1 5 0 2] A(:,:,2) = [9 7 8 5 2; 3 5 8 5 1; 6 9 4 3 3] A = 1 2 3 4 5 9 0 6 3 7 8 1 5 0 2 A(:,:,1) = 1 2 3 4 5 9 0 6 3 7 8 1 5 0 2 A(:,:,2) = 9 7 8 5 2 3 5 8 5 1 6 9 4 3 3 >>
reshape()
让我们尝试在 A 上使用 reshape() 方法。
reshaped_A = reshape(A, [], size(A, 3))
在这里,您使用 reshape 函数将三维数组 A 转换为二维矩阵 reshaped_A。函数 reshape(A, [], size(A, 3)) 将 A 的元素重新排列成一个矩阵,其中行数根据 A 中的页数自动确定。
在 MATLAB 命令窗口中执行相同的操作后,您将得到:
>> reshaped_A = reshape(A, [], size(A, 3)) reshaped_A = 1 9 9 3 8 6 2 7 0 5 1 9 3 8 6 8 5 4 4 5 3 5 0 3 5 2 7 1 2 3 >>
permute()
permuted_A = permute(A, [3, 1, 2])
permute 函数重新排序原始三维数组 A 的维度。通过将 [3, 1, 2] 指定为排列顺序,您已将“页”维度移到前面,从而更改了数组中元素的排列。
在 MATLAB 命令窗口中执行后,输出为:
>> permuted_A = permute(A, [3, 1, 2]) permuted_A(:,:,1) = 1 9 8 9 3 6 permuted_A(:,:,2) = 2 0 1 7 5 9 permuted_A(:,:,3) = 3 6 5 8 8 4 permuted_A(:,:,4) = 4 3 0 5 5 3 permuted_A(:,:,5) = 5 7 2 2 1 3 >>
squeeze()
squeezed_A = squeeze(A)
squeeze 函数可用于从给定的三维数组 A 中移除单例维度,从而产生三维数组 squeezed_A。
在 MATLAB 命令窗口中执行后,输出为:
>> squeezed_A = squeeze(A) squeezed_A(:,:,1) = 1 2 3 4 5 9 0 6 3 7 8 1 5 0 2 squeezed_A(:,:,2) = 9 7 8 5 2 3 5 8 5 1 6 9 4 3 3 >>