阵列排列和形状变化¶
Engee 的许多函数都使用数组元素,并赋予它们不同的形状或序列。这对于预处理数据、后续计算或分析数据都很有用。
改变形状¶
reshape
函数可以改变数组的大小和形状。例如,将大小为 3$\times$ 4 的矩阵转换为大小为 2$\times$ 6 的矩阵。
In [ ]:
A = [1 4 7 10; 2 5 8 11; 3 6 9 12]
Out[0]:
In [ ]:
B = reshape(A,2,6)
Out[0]:
使用 A 中的元素可以创建一个多维数组,其中包含 3 个大小为 2$\times$ 2 的矩阵。
In [ ]:
C = reshape(A,2,2,3)
Out[0]:
反转和翻转¶
线性代数中的一个常见任务是矩阵转置,即把行变成列,把列变成行。为此,可使用函数transpose
或运算符'
。
In [ ]:
A = rand(3, 3)
Out[0]:
In [ ]:
A'
Out[0]:
In [ ]:
B = [1+im 1-im; -im im]
Out[0]:
In [ ]:
transpose(B)
Out[0]:
函数reverse
根据关键字dims
的值上下移动行,左右移动列。
dims = 1 # 处理行
dims = 2 # 使用列
In [ ]:
A = [1 2; 3 4]
Out[0]:
In [ ]:
B = reverse(A, dims=1)
Out[0]:
In [ ]:
С = reverse(A, dims=2)
Out[0]:
偏移和旋转¶
您可以使用函数circshift
将数组元素移动一定的位置。例如,创建一个大小为 3$\times$ 4 的矩阵,并将其列向右移动 2 位。第二个参数 [0 2] 告诉circshift
将行向右移动 0 位,列向右移动 2 位。
In [ ]:
A = [1 2 3 4; 5 6 7 8; 9 10 11 12]
Out[0]:
In [ ]:
B = circshift(A,[0 2])
Out[0]:
如果要将 A 的行向上移动 1 位并保持列不变,则第二个参数为 [-1 0]。
In [ ]:
C = circshift(A,[-1 0])
Out[0]:
In [ ]:
A = [1 2; 3 4]
Out[0]:
排序¶
对数组中的数据进行排序也是一种有价值的工具。例如,函数sort
可以按升序或降序分别对矩阵的每一行或每一列进行排序。dims 关键字的值会告诉你哪一行或哪一列正在排序。
创建一个矩阵 A,将 A 中的每一列按升序排序。
In [ ]:
A = rand(4,4)
Out[0]:
In [ ]:
B = sort(A, dims=1)
Out[0]:
如果指定关键字rev = true
的值,排序将不是升序,而是降序。
In [ ]:
C = sort(A, dims=2, rev=true)
Out[0]:
结论¶
本文介绍了一些矩阵变换函数:重塑、跨距、移位和旋转,以及排序。有关矩阵运算的更多信息,请参阅 Linear Algebra。