在 MATLAB 中将向量附加到 3D 矩阵

Ammar Ali 2024年2月15日
在 MATLAB 中将向量附加到 3D 矩阵

本教程将讨论使用 MATLAB 中的 cat() 函数将向量附加到 3D 矩阵。

在 MATLAB 中将向量附加到 3D 矩阵

3D 矩阵或阵列不同于 2D 矩阵或阵列。在二维矩阵或数组中,我们有两个维度,其中第一个维度称为行,第二个维度称为列。

在 3D 矩阵或数组中,我们有 3 个维度,其中前两个维度与 2D 矩阵或数组相同,第三个维度称为页面或表格。一个简单的 3D 矩阵或数组如下所示。

3d 矩阵

在二维矩阵或数组中,每个元素都放置在特定位置或行列号上,我们可以使用其位置获取和替换元素。在 3D 矩阵或数组中,每个元素都放置在特定的位置、行、列和页码上,我们可以使用它的位置来获取和替换元素。

例如,3D 矩阵或数组中的第一个元素将被放置在位置 (1,1,1),这也显示在上图中。如果我们想在 3D 矩阵的末尾附加一个向量,向量的大小应该与 3D 矩阵中存在的每一页或第 3 维的大小相同。

例如,让我们创建一个具有 1 行、2 列和 2 页的 3D 矩阵或数组。请参阅下面的代码。

clc
clear

MyMatrix   = ones(1,2,2)

输出:

MyMatrix(:,:,1) =

     1     1


MyMatrix(:,:,2) =

     1     1

MATLAB 显示关于第三维的 3D 数组或矩阵。在上面的示例中,我们有一个包含 2 个页面的 3D 矩阵,每个页面将有一个 1 行 2 列的 2D 矩阵,显示在输出中。

如果我们想从 3D 矩阵中获取一个元素,我们必须给出它的位置,比如行、列和页码。如果我们想在上述 3D 矩阵或数组的末尾追加或添​​加另一个向量,我们可以使用 cat() 函数,它根据给定的维度连接两个矩阵。

cat() 函数有三个输入参数,其中第一个参数是维数,第二个参数是 3D 矩阵,第三个参数是我们要附加到 3D 矩阵的向量或矩阵。在我们的例子中,我们想要在 3D 矩阵的末尾添加向量,这意味着我们想要在最后一页之后添加向量。

cat() 函数将在 3D 矩阵中创建另一个页面来存储给定的向量。

例如,让我们使用 cat() 函数在上述 3D 矩阵或数组的末尾创建并附加一个向量。请参阅下面的代码。

MyVector = [5 6];
MyMatrix   = ones(1,2,2)
s = "After Adding Another Vector"
MyMatrix = cat(3, MyMatrix, MyVector)

输出:

MyMatrix(:,:,1) =

     1     1


MyMatrix(:,:,2) =

     1     1


s =

    "After Adding Another Vector"


MyMatrix(:,:,1) =

     1     1


MyMatrix(:,:,2) =

     1     1


MyMatrix(:,:,3) =

     5     6

正如我们在上面的输出中看到的,3D 矩阵在连接后有 3 页,最后一页包含输入向量。为了成功连接,我们在 cat() 函数中传递的维度大小和向量大小应该相同。

在上面的例子中,我们每页只有一行,所以我们没有遇到任何错误。如果我们有一个多于一行的 3D 矩阵,则第三维或页面的大小将与给定向量的大小不同。

为了解决这个问题,我们可以使用 zeros() 函数创建一个零向量,其大小与第三维或页面相同,然后我们可以将零矩阵的第一个数组替换为给定的向量.现在,给定的向量将变成一个带有额外零的矩阵,我们可以轻松地将其添加或附加到 3D 矩阵的末尾。

例如,让我们创建一个 2 行、2 列和 2 页的 3D 矩阵,然后使用上述方法添加给定的向量。请参阅下面的代码。

clc
clear

MyVector = [5 6];
MyMatrix   = ones(2,2,2)
NewVector = zeros(2,2)
NewVector(1,:) = MyVector
s = "After Adding Another Vector"
MyMatrix = cat(3, MyMatrix, NewVector)

输出:

MyMatrix(:,:,1) =

     1     1
     1     1


MyMatrix(:,:,2) =

     1     1
     1     1


NewVector =

     0     0
     0     0


NewVector =

     5     6
     0     0


s =

    "After Adding Another Vector"


MyMatrix(:,:,1) =

     1     1
     1     1


MyMatrix(:,:,2) =

     1     1
     1     1


MyMatrix(:,:,3) =

     5     6
     0     0

我们可以在上面的输出中看到向量被添加到 3D 矩阵中,但我们还必须添加零以使大小相等。如果我们想添加一个列向量,我们必须遵循上面讨论的相同方法。

如果 3D 矩阵在每一页上只有一列,并且它的大小等于输入列向量的大小,我们可以使用 cat() 函数轻松添加它们。如果 3D 矩阵有多于一列或大小不同,我们必须通过沿给定列向量添加零来使大小相等,然后我们可以使用我们在案例中使用的相同方法将其添加到 3D 矩阵添加行向量。

我们还可以替换 3D 矩阵的行、列或整页。例如,让我们使用 ones() 函数创建一个 3D 矩阵,并使用 append 运算符替换第一页的第一行。

请参阅下面的代码。

clc
clear

MyVector = [5 6];
MyMatrix   = ones(2,2,2)
s = "After replacing row"
MyMatrix(1,:,1) = MyVector

输出:

MyMatrix(:,:,1) =

     1     1
     1     1


MyMatrix(:,:,2) =

     1     1
     1     1


s =

    "After replacing row"


MyMatrix(:,:,1) =

     5     6
     1     1


MyMatrix(:,:,2) =

     1     1
     1     1

在上面的代码中,我们创建了一个 2 行、2 列和 2 页的 3D 矩阵。我们用另一个向量替换了第一页的第一行。

正如我们在上面的输出中看到的,输出上显示的文本之前和之后的输出是不同的,因为我们替换了第一页的第一行。被替换的行大小和新行应该相同。

我们也可以用另一个矩阵或数组替换整个页面或任何维度,但大小应该相同。

作者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

相关文章 - MATLAB Matrix