MATLAB Repmat
本教程將討論使用 MATLAB 中的 repmat()
函式建立具有陣列重複值的矩陣。
MATLAB repmat()
函式
repmat()
函式從一個小陣列建立大矩陣。該函式重複陣列的給定值以建立大矩陣。
repmat()
函式具有三種基本語法。第一種語法如下。
M = repmat(A,n);
上面的語法返回一個陣列,其中包含 A
在行和列維度上的 n
個副本。當 A
是矩陣時,輸出矩陣 M
將等於矩陣 A
的大小乘以 n
,大於 A
的大小。
repmat()
函式的第一個引數是輸入陣列,可以是標量、矩陣、向量或多維陣列。第二個引數將設定輸入陣列在行和列維度上重複的次數。
repmat()
函式的第二種語法如下。
M = repmat(A,r1,...,rN);
上面的語法返回一個標量列表,描述每個維度中 A
的副本的排列。當 A
是具有 N
維的矩陣時,M
的大小大於 A
的大小。
r1
將定義輸入陣列在第一個維度上重複的次數。repmat()
函式的第三種語法如下所示。
M = repmat(A,r);
上面的語法根據行向量 r
的重複方案返回一個包含行和列維度中 A
副本的陣列。
例如,我們可以使用向量 r
定義給定陣列或矩陣在行和列維度上重複的次數,該向量將包含輸入陣列或矩陣將被重複以建立輸出的次數矩陣。
我們可以使用 repmat()
函式通過重複單個值來建立矩陣。例如,讓我們建立一個包含值 5 的 2×2 矩陣。
請參閱下面的程式碼。
clc
clear
M = repmat(5,2,2)
輸出:
M =
5 5
5 5
clc
和 clear
命令用於清除上述程式碼中的命令和工作區視窗。輸出是一個僅包含數字 5 的 2×2 矩陣。
我們還可以使用 repmat()
函式從另一個矩陣的重複中建立一個矩陣。例如,讓我們使用 diag()
函式建立一個對角矩陣,然後通過重複對角矩陣建立一個矩陣。
請參閱下面的程式碼。
clc
clear
D = diag([5 15 25])
M = repmat(D,2,3)
輸出:
D =
5 0 0
0 15 0
0 0 25
M =
5 0 0 5 0 0 5 0 0
0 15 0 0 15 0 0 15 0
0 0 25 0 0 25 0 0 25
5 0 0 5 0 0 5 0 0
0 15 0 0 15 0 0 15 0
0 0 25 0 0 25 0 0 25
在上面的程式碼中,我們在行維度上重複了 2 次對角矩陣,在列維度上重複了 3 次。
輸出矩陣的大小將變為 6×9,因為輸入有 3 行,我們重複了 2 次,輸出行大小將變為 6,輸入矩陣有 3 列,我們重複了 3 次這樣輸出列大小將變為 9。
我們還可以使用 repmat()
函式製作 3D 矩陣。我們必須在重複方案中使用三個值。
例如,讓我們使用 repmat()
函式建立一個 6×3×2 矩陣。請參閱下面的程式碼。
clc
clear
D = diag([5 15 25])
M = repmat(D,2,1,2)
輸出:
D =
5 0 0
0 15 0
0 0 25
M(:,:,1) =
5 0 0
0 15 0
0 0 25
5 0 0
0 15 0
0 0 25
M(:,:,2) =
5 0 0
0 15 0
0 0 25
5 0 0
0 15 0
0 0 25
我們可以看到,輸出矩陣是一個 3 維矩陣。我們還可以建立一個包含水平或垂直行向量堆疊的矩陣。
例如,如果我們不想在某個維度上重複向量,我們可以在其位置傳遞 1。在 repmat()
函式中,第二個引數定義了第一個或行維度的重複方案。
第三個引數定義第二個或列維度的重複方案。
例如,讓我們建立一個帶有行向量水平堆疊的矩陣。請參閱下面的程式碼。
clc
clear
D = (1:5)'
M = repmat(D,1,5)
輸出:
D =
1
2
3
4
5
M =
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
在上面的程式碼中,我們對給定向量進行了轉置,將其轉換為列向量以建立水平堆疊,但在垂直堆疊的情況下,我們不必對給定向量進行轉置。
我們還可以使用 repmat()
函式從一個小表建立一個大表。例如,讓我們使用 table()
函式建立一個表,並從第一個表建立另一個大表。
請參閱下面的程式碼。
clc
clear
T_1 = table([19; 16],[60; 53],'VariableNames',{'Age' 'Height'})
T_2 = repmat(T_1, 2,2)
輸出:
T_1 =
2×2 table
Age Height
___ ______
19 60
16 53
T_2 =
4×4 table
Age Height Age_1 Height_1
___ ______ _____ ________
19 60 19 60
16 53 16 53
19 60 19 60
16 53 16 53
在上面的程式碼中,我們將行和列維度重複了 2 次以建立更大的表。