在 MATLAB 中將向量附加到 3D 矩陣

Ammar Ali 2022年7月12日
在 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 矩陣。我們用另一個向量替換了第一頁的第一行。

正如我們在上面的輸出中看到的,輸出上顯示的文字之前和之後的輸出是不同的,因為我們替換了第一頁的第一行。被替換的行大小和新行應該相同。

我們也可以用另一個矩陣或陣列替換整個頁面或任何維度,但大小應該相同。

Author: 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