文章目录
- 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