MATLAB 语言基础知识 矩阵和数组 多维数组

MATLAB中的多维数组是指具有两个以上维度的数组。在矩阵中,两个维度由行和列表示。
在这里插入图片描述

每个元素由两个下标(即行索引和列索引)来定义。多维数组是二维矩阵的扩展,并使用额外的下标进行索引。例如,三维数组使用三个下标。前两个维度就像一个矩阵,而第三个维度表示元素的页数或张数。
在这里插入图片描述

创建多维数组

要创建多维数组,可以先创建二维矩阵,然后再进行扩展。例如,首先定义一个 3×3 矩阵,作为三维数组中的第一页。

A = [1 2 3; 4 5 6; 7 8 9]
A = 3×3
 1     2     3
 4     5     6
 7     8     9

现在添加第二页。要完成此操作,可将另一个 3×3 矩阵赋给第三个维度中的索引值 2。语法 A(:,:,2) 在第一个和第二个维度中使用冒号,以在其中包含赋值表达式右侧的所有行和所有列。

A(:,:,2) = [10 11 12; 13 14 15; 16 17 18]
A = 
A(:,:,1) =
 1     2     3
 4     5     6
 7     8     9
A(:,:,2) =
10    11    12
13    14    15
16    17    18

cat 函数可用于构造多维数组。例如,在 A 后以串联方式添加第三页,由此创建一个新的三维数组 B。第一个参数指示要沿哪一个维度进行串联。

B = cat(3,A,[3 2 1; 0 9 8; 5 3 7])
B = 
B(:,:,1) =
 1     2     3
 4     5     6
 7     8     9
B(:,:,2) =
10    11    12
13    14    15
16    17    18
B(:,:,3) =
 3     2     1
 0     9     8
 5     3     7

快速扩展多维数组的另一种方法是将一个元素赋给一整页。例如,为数组 B 添加第四页,其中包含的值全部为零。

B(:,:,4) = 0
B = 
B(:,:,1) =
 1     2     3
 4     5     6
 7     8     9
B(:,:,2) =
10    11    12
13    14    15
16    17    18
B(:,:,3) =
 3     2     1
 0     9     8
 5     3     7
B(:,:,4) =
 0     0     0
 0     0     0
 0     0     0

访问元素

要访问多维数组中的元素,请使用整数下标,就像在向量和矩阵中一样。例如,找到 A 中下标为 1,2,2 的元素,它位于 A 的第二页上的第一行第二列。

A
A = 
A(:,:,1) =
 1     2     3
 4     5     6
 7     8     9
A(:,:,2) =
10    11    12
13    14    15
16    17    18
elA = A(1,2,2)
elA = 11

在第二个维度中使用索引向量 [1 3],只访问 A 的每一页上的第一列和最后一列。

C = A(:,[1 3],:)
C = 
C(:,:,1) =
 1     3
 4     6
 7     9
C(:,:,2) =
10    12
13    15
16    18

要查找每一页的第二行和第三行,请使用冒号运算符创建索引向量。

D = A(2:3,:,:)
D = 
D(:,:,1) =
 4     5     6
 7     8     9
D(:,:,2) =
13    14    15
16    17    18

操作数组

多维数组的元素可以通过多种方式移动,类似于向量和矩阵。reshape、permute 和 squeeze 函数可用于重新排列元素。假设有一个两页的三维数组。

重构多维数组有助于执行某些操作或可视化数据。使用 reshape 函数,将一个三维数组的元素重新排列成 6×5 矩阵。

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];
B = reshape(A,[6 5])
B = 6×5
 1     3     5     7     5
 9     6     7     5     5
 8     5     2     9     3
 2     4     9     8     2
 0     3     3     8     1
 1     0     6     4     3

reshape 逐列操作,沿 A 中各列连续逐一提取元素来创建新矩阵,从第一页开始,之后是第二页。

置换操作用于重新排列数组的维度顺序。假设有一个三维数组 M。

M(:,:,1) = [1 2 3; 4 5 6; 7 8 9];
M(:,:,2) = [0 5 4; 2 7 6; 9 3 1]
M = 
M(:,:,1) =
 1     2     3
 4     5     6
 7     8     9
M(:,:,2) =
 0     5     4
 2     7     6
 9     3     1

使用 permute 函数,通过在第二个参数中指定维度顺序,将每一页上的行下标和列下标交换。M 的原始行现在是列,原始列现在是行。

P1 = permute(M,[2 1 3])
P1 = 
P1(:,:,1) =
 1     4     7
 2     5     8
 3     6     9
P1(:,:,2) =
 0     2     9
 5     7     3
 4     6     1

同样,将 M 的行下标和页下标交换。

P2 = permute(M,[3 2 1])
P2 = 
P2(:,:,1) =
 1     2     3
 0     5     4
P2(:,:,2) =
 4     5     6
 2     7     6
P2(:,:,3) =
 7     8     9
 9     3     1

操作多维数组时,您可能会遇到某些数组有一个长度为 1 的多余维度。squeeze 函数可以执行另一种操作,消除长度为 1 的维度。例如,使用 repmat 函数创建一个 2×3×1×4 数组,其元素全部为 5,第三个维度的长度为 1。

A = repmat(5,[2 3 1 4])
A = 
A(:,:,1,1) =
 5     5     5
 5     5     5
A(:,:,1,2) =
 5     5     5
 5     5     5
A(:,:,1,3) =
 5     5     5
 5     5     5
A(:,:,1,4) =
 5     5     5
 5     5     5
szA = size(A)
szA = 1×4
2     3     1     4
numdimsA = ndims(A)
numdimsA = 4

使用 squeeze 函数删除第三个维度,从而得到一个三维数组。

B = squeeze(A)
B = 
B(:,:,1) =
 5     5     5
 5     5     5
B(:,:,2) =
 5     5     5
 5     5     5
B(:,:,3) =
 5     5     5
 5     5     5
B(:,:,4) =
 5     5     5
 5     5     5
szB = size(B)
szB = 1×3
 2     3     4
numdimsB = ndims(B)
numdimsB = 3
  • 4
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

结冰架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值