- Типы матриц и векторов
- Создание и инициализация матриц и векторов
- Копирование матриц, векторов и массивов
- Копирование таймсерий в матрицу или вектор
- Копирование истории тиков в матрицу или вектор
- Вычисление выражений с матрицами и векторами
- Манипуляции над матрицами и векторами
- Произведения матриц и векторов
- Преобразования (разложение) матриц
- Получение статистики
- Характеристики матриц и векторов
- Решение уравнений
- Методы машинного обучения
Манипуляции над матрицами и векторами
При работе с матрицами и векторами доступны базовые манипуляции без проведения каких-либо вычислений. В начале списка приведены исключительно матричные методы, а четыре последних также применимы и для векторов.
- Transpose — транспонирование матрицы;
- Col, Row, Diag — извлечение и установка строк, столбцов и диагоналей по номеру;
- TriL, TriU — получение нижней и верхней треугольной матрицы по номеру диагонали;
- SwapCols, SwapRows — перестановка местами указанных по номерам строк и столбцов;
- Flat — установка и получение элемента матрицы по сквозному индексу;
- Reshape — изменение формы матрицы "по месту";
- Split, Hsplit, Vsplit — разделение матрицы на несколько подматриц;
- Resize — изменение размера матрицы и вектора "по месту";
- Compare, CompareByDigits — сравнение двух матриц или двух векторов с заданной точностью вещественных чисел;
- Sort — сортировка "по месту" (перестановка элементов) и через получение вектора или матрицы индексов;
- Clip — ограничение диапазона значений элементов "по месту".
Обратите внимание, что разделение вектора не предусмотрено.
Ниже представлены прототипы методов для матриц.
matrix<T> matrix<T>::Transpose()
vector matrix<T>::Col∫Row(const ulong n)
void matrix<T>::Col∫Row(const vector v, const ulong n)
vector matrix<T>::Diag(const int n = 0)
void matrix<T>::Diag(const vector v, const int n = 0)
matrix<T> matrix<T>::TriL∫TriU(const int n = 0)
bool matrix<T>::SwapCols∫SwapRows(const ulong n1, const ulong n2)
T matrix<T>::Flat(const ulong i)
bool matrix<T>::Flat(const ulong i, const T value)
bool matrix<T>::Resize(const ulong rows, const ulong cols, const ulong reserve = 0)
void matrix<T>::Reshape(const ulong rows, const ulong cols)
ulong matrix<T>::Compare(const matrix<T> &m, const T epsilon)
ulong matrix<T>::CompareByDigits(const matrix &m, const int digits)
bool matrix<T>::Split(const ulong nparts, const int axis, matrix<T> &splitted[])
void matrix<T>::Split(const ulong &parts[], const int axis, matrix<T> &splitted[])
bool matrix<T>::Hsplit∫Vsplit(const ulong nparts, matrix<T> &splitted[])
void matrix<T>::Hsplit∫Vsplit(const ulong &parts[], matrix<T> &splitted[])
void matrix<T>::Sort(func_reference compare = NULL, T context)
void matrix<T>::Sort(const int axis, func_reference compare = NULL, T context)
matrix<T> matrix<T>::Sort(func_reference compare = NULL, T context)
matrix<T> matrix<T>::Sort(const int axis, func_reference compare = NULL, T context)
bool matrix<T>::Clip(const T min, const T max)
Для векторов — набор методов поменьше.
bool vector<T>::Resize(const ulong size, const ulong reserve = 0)
ulong vector<T>::Compare(const vector<T> &v, const T epsilon)
ulong vector<T>::CompareByDigits(const vector<T> &v, const int digits)
void vector<T>::Sort(func_reference compare = NULL, T context)
vector vector<T>::Sort(func_reference compare = NULL, T context)
bool vector<T>::Clip(const T min, const T max)
Пример транспонирования матрицы:
matrix a = {{0, 1, 2}, {3, 4, 5}};
|
Несколько примеров установки разных диагоналей методом Diag:
vector v1 = {1, 2, 3};
|
Изменение конфигурации матрицы методом Reshape:
matrix matrix_a = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
|
Разделение матриц на подматрицы мы применим в примере в разделе о Решении уравнений.
Методы Col и Row позволяют не только получать столбцы или строки матрицы по их номеру, но и вставлять их "по месту" в ранее определенные матрицы. При этом не меняются ни размеры матрицы, ни значения элементов за пределами вектора-столбца (для случая Col) или вектора-строки (для случая Row).
Если же любой из этих двух методов применяется к матрице, размеры которой еще не установлены, то будет создана нулевая матрица размером [N * M], где N и M определяются по-разному для Col и Row, исходя из длины вектора и заданного индекса столбца или строки:
- в случае Col, N — это длина вектора-столбца, а M — на 1 больше заданного индекса вставляемого столбца;
- в случае Row, N — на 1 больше заданного индекса вставляемой строки, а M — длина вектора-строки;
На момент написания данной главы в MQL5 не предусмотрено методов для полноценной вставки строк и столбцов с раздвиганием последующих элементов, а также исключение заданных строк и столбцов.