Matlab教程004:Matlab矩阵的拼接重构重排以及矩阵的运算
文章目录
- 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 1
2 3 4 5 1 1
3 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 4
2 3 4 5
3 4 5 6
1 1 1 1
1 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 3
1 7 2 8 5 8
B =
3 7 10 5
1 10 8 3
10 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 3
6 10 1 7 10 7
ans =
6 7 1 7 4 3
9 10 5 9 10 7
% 按照每一行进行单独排序
sort(A,2)
% 排序结果
ans =
2 5 6 7 8 9
1 2 2 4 4 8
% 降序排列
sort(A,2,'descend')
ans =
10 10 7 4 4 1
8 7 3 3 2 1
(3)sortrows函数
:基于矩阵的某一列对矩阵进行排序,同一行的元素不会改变。sortrows(score,列)
,在最后面加一个输入参数descend
,变成从大到小的降序排列。
sortrows(A,2,"descend")
ans =
5 9 1 1 10 10
3 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 2
4 5 5 4
1 10 9 10
ans =
7 21 23 16
ans =
19
18
30
ans =
67
ans =
67
ans =
77760000
ans =
77760000
1.4.4.2 矩阵加减
(1)矩阵加法(+)
矩阵加法是 对应位置的元素相加,要求两个矩阵的大小相同。
示例:
A = [1 2; 3 4];
B = [5 6; 7 8];
C = A + B % 逐元素相加
结果:
C =
6 8
10 12
(2)矩阵减法(-)
矩阵减法与加法类似,是对应元素相减,要求两个矩阵大小相同。
示例:
A = [10 20; 30 40];
B = [1 2; 3 4];
C = A - B % 逐元素相减
结果:
C =
9 18
27 36
(3)标量与矩阵的加减
如果是一个 标量 与 矩阵 进行加法或减法,则标量会与矩阵的 每个元素 进行运算。
示例:
A = [1 2; 3 4];
C = A + 10 % 每个元素加 10
D = A - 5 % 每个元素减 5
结果:
C =
11 12
13 14
D =
-4 -3
-2 -1
(4)矩阵与相同列数的行向量
如果一个是矩阵A,另外一个是具有相同列数的行向量B,则把B堆叠成完全相同的两行,然后再和A相加。
示例:
A =
3 5 6
6 9 4
B = 3 9 6
结果:
ans =
6 14 12
9 18 10
(5)矩阵与相同行数的列向量
如果一个是矩阵A,另外一个是具有相同行数的列向量B,则把B堆叠成完全相同的三列,然后再和A相加。
示例:
A =
3 6 5
2 6 8
B = 6
5
结果:
ans =
9 12 11
7 11 13
(6)列向量和行向量相加
如果一个是列向量,另外一个是行向量。
示例:
A =
2
5
B =
1 8 3
结果:
ans =
3 10 5
6 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 22
43 50
(2)逐元素乘法(.*
)
逐元素乘法是 对应位置的元素相乘,要求矩阵大小相同。
示例:
A = [1 2; 3 4];
B = [5 6; 7 8];
C = A .* B; % 逐元素乘法
计算方式:
计算结果:
C =
5 12
21 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