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

>> 
广告