Документация Engee
Notebook

Базовые операции с матрицами

Матрица - это двумерный прямоугольный массив элементов, расположенных в строках и столбцах. Элементами могут быть числа, логические значения (true или false), дата и время, строки, категориальные значения или какой-либо другой тип данных.

Определение матриц

Матрицу можно создать с помощью квадратных скобок [], заранее заключив в них необходимые элементы.

In [ ]:
A = [1 2 3] # создание матрицы в виде вектор-строки
Out[0]:
1×3 Matrix{Int64}:
 1  2  3

Матрица с одним столбцом будет отображена как другой тип данных - вектор:

In [ ]:
A = [1, 2, 3]
Out[0]:
3-element Vector{Int64}:
 1
 2
 3

Создание обычной, прямоугольной матрицы, производится с помощью определения строк и их разделения с помощью знака точки с запятой:

In [ ]:
A = [1 2 3 4; 5 6 7 8]
Out[0]:
2×4 Matrix{Int64}:
 1  2  3  4
 5  6  7  8

Есть множество функций, которые помогают создавать матрицы с определенными значениями элементов или определенной структурой. Например, функции zeros и ones создают матрицы из всех нулей или единиц. Первым и вторым аргументами этих функций являются количество строк и количество столбцов матрицы:

In [ ]:
A = zeros(3, 3) # определение матрицы с нулями
Out[0]:
3×3 Matrix{Float64}:
 0.0  0.0  0.0
 0.0  0.0  0.0
 0.0  0.0  0.0
In [ ]:
A = ones(3, 3) # определение матрицы с единицами
Out[0]:
3×3 Matrix{Float64}:
 1.0  1.0  1.0
 1.0  1.0  1.0
 1.0  1.0  1.0

Функция Diagonal, библиотеки LinearAlgebra размещает входные элементы на диагонали массива:

In [ ]:
using LinearAlgebra
A = [12, 62, 93, -8]
B = Diagonal(A)
Out[0]:
4×4 Diagonal{Int64, Vector{Int64}}:
 12   ⋅   ⋅   ⋅
  ⋅  62   ⋅   ⋅
  ⋅   ⋅  93   ⋅
  ⋅   ⋅   ⋅  -8

С помощью функции convert преобразуем матрицу B из типа Diagonal в тип данных Matrix{Float64}

In [ ]:
B = convert(Matrix{Float64}, B)
Out[0]:
4×4 Matrix{Float64}:
 12.0   0.0   0.0   0.0
  0.0  62.0   0.0   0.0
  0.0   0.0  93.0   0.0
  0.0   0.0   0.0  -8.0

Объединение матриц

Матрицы можно объединять по горизонтали используя квадратные скобки [ ]:

In [ ]:
A = [1 2; 3 4; 5 6; 7 8]
C = [A B]
Out[0]:
4×6 Matrix{Float64}:
 1.0  2.0  12.0   0.0   0.0   0.0
 3.0  4.0   0.0  62.0   0.0   0.0
 5.0  6.0   0.0   0.0  93.0   0.0
 7.0  8.0   0.0   0.0   0.0  -8.0

Аналогичным образом матрицы можно объединять по вертикали (должны быть одной размерности) указав точку с запятой:

In [ ]:
A = ones(1,4)
B = zeros(1,4)
D = [A; B]
Out[0]:
2×4 Matrix{Float64}:
 1.0  1.0  1.0  1.0
 0.0  0.0  0.0  0.0

Для объединения можно использовать специальные функции, такие как vcat и hcat:

In [ ]:
C = hcat(A, B)
Out[0]:
1×8 Matrix{Float64}:
 1.0  1.0  1.0  1.0  0.0  0.0  0.0  0.0
In [ ]:
D = vcat(A, B)
Out[0]:
2×4 Matrix{Float64}:
 1.0  1.0  1.0  1.0
 0.0  0.0  0.0  0.0

Генерация числовых последовательностей

С помощью функции collect можно сгенерировать числовую последовательность в виде вектора:

In [ ]:
E = collect(-10:5:10) # collect(Начало:Интервал:Конец)
Out[0]:
5-element Vector{Int64}:
 -10
  -5
   0
   5
  10

Изменение формы матрицы

Для того чтобы изменить размерность матрицы можно воспользоваться функцией reshape.

In [ ]:
A = [1 2 3 4 5; 6 7 8 9 10; 11 12 13 14 15; 16 17 18 19 20] # определяем матрицу, исходный размер 4 на 5
Out[0]:
4×5 Matrix{Int64}:
  1   2   3   4   5
  6   7   8   9  10
 11  12  13  14  15
 16  17  18  19  20

Преобразуем матрицу в вектор-строку:

In [ ]:
reshape(A, (1, 20))
Out[0]:
1×20 Matrix{Int64}:
 1  6  11  16  2  7  12  17  3  8  13  18  4  9  14  19  5  10  15  20

Преобразуем матрицу в вектор-столбец:

In [ ]:
reshape(A, (20, 1))
Out[0]:
20×1 Matrix{Int64}:
  1
  6
 11
 16
  2
  7
 12
 17
  3
  8
 13
 18
  4
  9
 14
 19
  5
 10
 15
 20

При указании одного из размеров матрицы с помощью двоеточия reshape вернёт матрицу с указанным количеством строк или столбцов:

In [ ]:
reshape(A, (1, :))
Out[0]:
1×20 Matrix{Int64}:
 1  6  11  16  2  7  12  17  3  8  13  18  4  9  14  19  5  10  15  20