文章目錄
- 1.4.3 矩陣的拼接重構重排
- 1.4.3.1 橫向拼接
- 1.4.3.2 縱向拼接
- 1.4.3.3 矩陣的重構重排
- 1.4.4 矩陣的運算
- 1.4.4.1 算數運算
- 1.4.4.2 矩陣加減
- 1.4.4.3 矩陣乘法
- 1.4.4.4 矩陣轉置
1.4.3 矩陣的拼接重構重排
1.4.3.1 橫向拼接
A和B的行數相同,那么使用[A,B]
、[A B]
以及cat(2,A,B)
都能將A和B橫向拼接成一個大的矩陣。
B = [1:4;2:5;3:6;];
C = ones(3,2);
D = [B,C];
D2 = cat(2,B,C);
% 打印結果
D2 =1 2 3 4 1 12 3 4 5 1 13 4 5 6 1 1
1.4.3.2 縱向拼接
A和B的列數相同,那么使用[A;B]
以及cat(1,A,B)
都能將A和B以縱向拼接為一個大的矩陣。
% 縱向拼接
B2 = ones(2,4);
% 方式1
D3 = [B;B2];
% 方式2
D4 = cat(1,B,B2)
% 打印結果
D3 =1 2 3 42 3 4 53 4 5 61 1 1 11 1 1 1
1.4.3.3 矩陣的重構重排
(1)reshape函數
:更改矩陣的形狀,reshape(A,m,n)
或者reshape(A,[m,n])
A = randi(10,2,6);
A
B = reshape(A,3,4);
B% 打印結果
A =3 10 10 10 6 31 7 2 8 5 8B =3 7 10 51 10 8 310 2 6 8
(2)sort函數
:對向量或者矩陣進行排序,sort(A,dim)
,在最后面加一個輸入參數descend
,變成從大到小的降序排列
- dim=1時,沿著行方向(從上至下)對矩陣的每一列升序排列。
- dim=2時,沿著列方向(從左至右)對矩陣的每一列升序排列。
A = randi(10,2,6);
A
sort(A,1)
% 輸出結果
A =9 7 5 9 4 36 10 1 7 10 7ans =6 7 1 7 4 39 10 5 9 10 7% 按照每一行進行單獨排序
sort(A,2)
% 排序結果
ans =2 5 6 7 8 91 2 2 4 4 8% 降序排列
sort(A,2,'descend')
ans =10 10 7 4 4 18 7 3 3 2 1
(3)sortrows函數
:基于矩陣的某一列對矩陣進行排序,同一行的元素不會改變。sortrows(score,列)
,在最后面加一個輸入參數descend
,變成從大到小的降序排列。
sortrows(A,2,"descend")ans =5 9 1 1 10 103 3 10 6 9 1
1.4.4 矩陣的運算
1.4.4.1 算數運算
函數名 | 函數的作用 |
---|---|
sum | 求和函數 |
prod | 求乘積函數 |
cumsum | 計算累積和 |
diff | 計算差分 |
mean | 計算平均值 |
median | 計算中位數 |
mode | 計算眾數 |
var | 計算方差 |
std | 計算標準差 |
min | 求最小值 |
max | 求最大值 |
如下是函數的幾個例子:
%% 矩陣運算
clear;
clc;
A = randi(10,3,4);
A
sum(A,1) %參數為1的時候,計算每一列的和
sum(A,2) % 計算每一行的和
sum(A(:))
sum(A,'all')prod(A(:))
prod(A,"all")% 運算結果
A =2 6 9 24 5 5 41 10 9 10ans =7 21 23 16ans =191830ans =67ans =67ans =77760000ans =77760000
1.4.4.2 矩陣加減
(1)矩陣加法(+)
矩陣加法是 對應位置的元素相加,要求兩個矩陣的大小相同。
示例:
A = [1 2; 3 4];
B = [5 6; 7 8];
C = A + B % 逐元素相加
結果:
C =6 810 12
(2)矩陣減法(-)
矩陣減法與加法類似,是對應元素相減,要求兩個矩陣大小相同。
示例:
A = [10 20; 30 40];
B = [1 2; 3 4];
C = A - B % 逐元素相減
結果:
C =9 1827 36
(3)標量與矩陣的加減
如果是一個 標量 與 矩陣 進行加法或減法,則標量會與矩陣的 每個元素 進行運算。
示例:
A = [1 2; 3 4];
C = A + 10 % 每個元素加 10
D = A - 5 % 每個元素減 5
結果:
C =11 1213 14D =-4 -3-2 -1
(4)矩陣與相同列數的行向量
如果一個是矩陣A,另外一個是具有相同列數的行向量B,則把B堆疊成完全相同的兩行,然后再和A相加。
示例:
A = 3 5 66 9 4
B = 3 9 6
結果:
ans =6 14 129 18 10
(5)矩陣與相同行數的列向量
如果一個是矩陣A,另外一個是具有相同行數的列向量B,則把B堆疊成完全相同的三列,然后再和A相加。
示例:
A = 3 6 52 6 8
B = 65
結果:
ans =9 12 117 11 13
(6)列向量和行向量相加
如果一個是列向量,另外一個是行向量。
示例:
A = 25
B = 1 8 3
結果:
ans =3 10 56 13 8
1.4.4.3 矩陣乘法
MATLAB 提供了 兩種 矩陣乘法方式:
- 矩陣乘法(
\*
) —— 線性代數中的矩陣乘法(點積)。 - 逐元素乘法(
.\*
) —— 對應元素相乘。
(1)矩陣乘法遵循線性代數規則,即:
- A 的列數 必須等于 B 的行數(
m×n
矩陣 ×n×p
矩陣 →m×p
矩陣)。 - 計算方式是 行與列的點積。
示例:
A = [1 2; 3 4]; % 2×2 矩陣
B = [5 6; 7 8]; % 2×2 矩陣
C = A * B; % 進行矩陣乘法
計算步驟:
計算結果:
C =19 2243 50
(2)逐元素乘法(.*
)
逐元素乘法是 對應位置的元素相乘,要求矩陣大小相同。
示例:
A = [1 2; 3 4];
B = [5 6; 7 8];
C = A .* B; % 逐元素乘法
計算方式:
計算結果:
C =5 1221 32
1.4.4.4 矩陣轉置
在 MATLAB 中,矩陣的轉置(Transpose)可以使用 '
(單引號) 或 transpose()
函數實現。矩陣轉置的作用是將行變為列,列變為行。
(1)使用A'
進行矩陣轉置
最常用的方法是使用 '
(單引號),它會執行 共軛轉置(conjugate transpose),即:
- 對 實數矩陣,
A'
只是 單純的轉置。 - 對 復數矩陣,
A'
既 轉置 也 取共軛(虛部變號)。
示例1:實數矩陣轉置
A = [1 2 3; 4 5 6]; % 2×3 矩陣
B = A'; % 3×2 矩陣
disp(B);
計算方式:
轉置后:
1 4
2 5
3 6
(2)使用 transpose(A)
MATLAB 也提供了 transpose(A)
函數,它 僅執行轉置,不改變復數矩陣的虛部符號。
示例:
A = [1 2 3; 4 5 6];
B = transpose(A);
disp(B);
結果:
1 4
2 5
3 6