MATLAB中的许多函数都可以提取现有数组的元素,然后按照不同的形状或顺序放置。这样有助于预处理数据,便于之后进行计算或分析。
1、重构
reshape
函数可以更改数组的大小和形状。例如,将 3×4 矩阵重构成 2×6 矩阵。
A = [1 4 7 10; 2 5 8 11; 3 6 9 12]
A = 3×4
1 4 7 10
2 5 8 11
3 6 9 12
B = reshape(A,2,6)
B = 2×6
1 3 5 7 9 11
2 4 6 8 10 12
只要不同形状中的元素数量相同,就可以将它们重构成具有任意维度的数组。使用 A
中的元素,创建一个 2×2×3 的多维数组。
C = reshape(A,2,2,3)
C =
C(:,:,1) =
1 3
2 4
C(:,:,2) =
5 7
6 8
C(:,:,3) =
9 11
10 12
2、转置和翻转
线性代数中常见的任务是转置矩阵,即将矩阵的行变成列,将列变成行。要实现此目的,可以使用 transpose
函数或 .'
运算符。
创建一个 3×3 矩阵并计算其转置。
代码语言:javascript复制A = magic(3)
A = 3×3
8 1 6
3 5 7
4 9 2
B = A.'
B = 3×3
8 3 4
1 5 9
6 7 2
类似的运算符 '
可以计算复矩阵的共轭转置。此操作计算每个元素的复共轭并对其进行转置。创建一个 2×2 复矩阵并计算其共轭转置。
A = [1 i 1-i; -i i]
A = 2×2 complex
1.0000 1.0000i 1.0000 - 1.0000i
0.0000 - 1.0000i 0.0000 1.0000i
B = A'
B = 2×2 complex
1.0000 - 1.0000i 0.0000 1.0000i
1.0000 1.0000i 0.0000 - 1.0000i
flipud
上下翻转矩阵的行,fliplr
左右翻转矩阵的列。
A = [1 2; 3 4]
A = 2×2
1 2
3 4
B = flipud(A)
B = 2×2
3 4
1 2
C = fliplr(A)
C = 2×2
2 1
4 3
3、平移和旋转
使用 circshift
函数,可以将数组的元素平移一定的位置数。例如,创建一个 3×4 矩阵,然后将其各列向右平移 2 个位置。第二个参数 [0 2]
要求 circshift
将各行平移 0 个位置,将各列向右平移 2 个位置。
A = [1 2 3 4; 5 6 7 8; 9 10 11 12]
A = 3×4
1 2 3 4
5 6 7 8
9 10 11 12
B = circshift(A,[0 2])
B = 3×4
3 4 1 2
7 8 5 6
11 12 9 10
要将 A
的各行向上平移 1 个位置而各列保持不动,请将第二个参数指定为 [-1 0]
。
C = circshift(A,[-1 0])
C = 3×4
5 6 7 8
9 10 11 12
1 2 3 4
rot90
函数可以将矩阵逆时针旋转 90 度。
A = [1 2; 3 4]
A = 2×2
1 2
3 4
B = rot90(A)
B = 2×2
2 4
1 3
如果再旋转 3 次(使用第二个参数指定旋转次数),最后将得到原始矩阵 A
。
C = rot90(B,3)
C = 2×2
1 2
3 4
4、排序
对数组中的数据进行排序也是一项实用功能,MATLAB 提供了几种排序方法。例如,sort
函数可以按升序或降序对矩阵的每一行或每一列中的元素进行排序。创建矩阵 A
,并按升序对 A
的每一列进行排序。
A = magic(4)
A = 4×4
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
B = sort(A)
B = 4×4
4 2 3 1
5 7 6 8
9 11 10 12
16 14 15 13
按降序对每一行进行排序。第二个参数值 2
指定您希望逐行排序。
C = sort(A,2,'descend')
C = 4×4
16 13 3 2
11 10 8 5
12 9 7 6
15 14 4 1
要整行排序,请使用 sortrows
函数。例如,根据第一列中的元素按升序对 A
的各行排序。行的位置发生变化,但每一行中元素的顺序不变。
D = sortrows(A)
D = 4×4
4 14 15 1
5 11 10 8
9 7 6 12
16 2 3 13