Engee 文档
Notebook

阵列中的排列及其形状的变化

许多Engee函数使用数组元素并为它们提供不同的形状或序列。 这对于数据预处理、后续计算或数据分析非常有用。

改变形状

功能 reshape 修改数组的大小和形状。 例如,变换大小为3的矩阵 4在尺寸为2的矩阵中 6.

In [ ]:
A = [1 4 7 10; 2 5 8 11; 3 6 9 12]
Out[0]:
3×4 Matrix{Int64}:
 1  4  7  10
 2  5  8  11
 3  6  9  12
In [ ]:
B = reshape(A,2,6)
Out[0]:
2×6 Matrix{Int64}:
 1  3  5  7   9  11
 2  4  6  8  10  12

使用来自a的元素,您可以创建一个多维数组,该数组将包含3个大小为2的矩阵 2.

In [ ]:
C = reshape(A,2,2,3)
Out[0]:
2×2×3 Array{Int64, 3}:
[:, :, 1] =
 1  3
 2  4

[:, :, 2] =
 5  7
 6  8

[:, :, 3] =
  9  11
 10  12

换位和翻转

线性代数中的一个常见任务是处理矩阵的转置,它将行变成列,将列变成行。 为此,请使用函数 transpose 或运营商 ' .

In [ ]:
A = rand(3, 3)
Out[0]:
3×3 Matrix{Float64}:
 0.671146  0.15141   0.445067
 0.205738  0.600742  0.832939
 0.992871  0.645874  0.623041
In [ ]:
A'
Out[0]:
3×3 adjoint(::Matrix{Float64}) with eltype Float64:
 0.671146  0.205738  0.992871
 0.15141   0.600742  0.645874
 0.445067  0.832939  0.623041
In [ ]:
B = [1+im 1-im; -im im]
Out[0]:
2×2 Matrix{Complex{Int64}}:
 1+1im  1-1im
 0-1im  0+1im
In [ ]:
transpose(B) 
Out[0]:
2×2 transpose(::Matrix{Complex{Int64}}) with eltype Complex{Int64}:
 1+1im  0-1im
 1-1im  0+1im

功能 reverse 根据关键字值,上下移动行和从左到右移动列。 dims.

dims=1#使用字符串
dims=2#使用列
In [ ]:
A = [1 2; 3 4]
Out[0]:
2×2 Matrix{Int64}:
 1  2
 3  4
In [ ]:
B = reverse(A, dims=1)
Out[0]:
2×2 Matrix{Int64}:
 3  4
 1  2
In [ ]:
С = reverse(A, dims=2)
Out[0]:
2×2 Matrix{Int64}:
 2  1
 4  3

位移和旋转

您可以使用该函数将数组元素移位一定数量的位置 circshift. 例如,创建大小为3的矩阵 4并将其列向右移动2。 第二个参数[0 2]告诉 circshift 你需要将行移动0个地方,将列移动2个地方。

In [ ]:
A = [1 2 3 4; 5 6 7 8; 9 10 11 12]
Out[0]:
3×4 Matrix{Int64}:
 1   2   3   4
 5   6   7   8
 9  10  11  12
In [ ]:
B = circshift(A,[0 2])
Out[0]:
3×4 Matrix{Int64}:
  3   4  1   2
  7   8  5   6
 11  12  9  10

要将行从A向上移动1并将列保持在适当位置,请将第二个参数指定为[-1 0]。

In [ ]:
C = circshift(A,[-1 0])
Out[0]:
3×4 Matrix{Int64}:
 5   6   7   8
 9  10  11  12
 1   2   3   4
In [ ]:
A = [1 2; 3 4]
Out[0]:
2×2 Matrix{Int64}:
 1  2
 3  4

分类方法

对数组中的数据进行排序也是一个有价值的工具。 例如,函数 sort 按升序或降序分别对矩阵的每一行或每一列的元素进行排序。 Dims关键字的含义告诉您正在进行行或列的工作。

创建一个矩阵A并按升序从A中对每列进行排序。

In [ ]:
A = rand(4,4)
Out[0]:
4×4 Matrix{Float64}:
 0.461938  0.0393388  0.227309  0.0815622
 0.278592  0.850108   0.563387  0.646155
 0.385563  0.42562    0.851425  0.859178
 0.655341  0.601584   0.659288  0.238689
In [ ]:
B = sort(A, dims=1) 
Out[0]:
4×4 Matrix{Float64}:
 0.278592  0.0393388  0.227309  0.0815622
 0.385563  0.42562    0.563387  0.238689
 0.461938  0.601584   0.659288  0.646155
 0.655341  0.850108   0.851425  0.859178

如果指定关键字值 rev = true,那么排序不会是升序,而是降序。

In [ ]:
C = sort(A, dims=2, rev=true)
Out[0]:
4×4 Matrix{Float64}:
 0.461938  0.227309  0.0815622  0.0393388
 0.850108  0.646155  0.563387   0.278592
 0.859178  0.851425  0.42562    0.385563
 0.659288  0.655341  0.601584   0.238689

结论

在本文中,我们回顾了转换矩阵的一些函数:形状移位,转置,移位和旋转以及排序。 您可以在[线性代数]一节中找到有关矩阵运算的更多信息(https://engee.com/helpcenter/stable/ru/julia/stdlib/LinearAlgebra.html )。