Матрицы и векторы

Матрица — двумерный массив чисел типа double, float или complex.

Вектор — одномерный массив чисел типа double, float или complex. При этом у вектора нет признака, какой он — вертикальный или горизонтальный. Определяется из контекста использования, например, векторная операция Dot предполагает, что левый вектор — горизонтальный, правый вектор — вертикальный. Если нужна совершенная определённость, то можно использовать матрицы с одной строкой или одной колонкой, но как правило, в этом нет необходимости.

У матриц и векторов память под данные распределяется динамически. Фактически, матрицы и векторы являются объектами, которые имеют определённые свойства, такие как тип содержащихся данных и размеры. Свойства матриц и векторов могут быть получены при помощи методов, например, vector_a.Size(), matrix_b.Rows(), vector_c.Norm(), matrix_d.Cond() и т.д. При этом любая размерность может быть изменена.

При создании и инициализации матриц используются так называемые статические методы (это как статические методы класса), например: matrix::Eye(), matrix::Identity(), matrix::Ones(), vector::Ones(), matrix::Zeros(), vector::Zeros(), matrix::Full(), vector::Full(), matrix::Tri().

На данный момент операции над матрицами и векторами не предполагают использования типа данных комплекса — в этом направлении работа ещё не закончена.

В MQL5 реализована поддержка передачи матриц и векторов в DLL. Это позволяет импортировать функции, использующие этот тип данных, из внешних библиотек.

Матрицы и векторы передаются в DLL в виде указателя на буфер. Например, для передачи матрицы типа float, соответствующий параметр экспортируемой из DLL-функции должен принимать указатель на буфер с типом float.

MQL5

#import "mmlib.dll"
bool sgemm(uint flagsmatrix<float> &C, const matrix<float> &A, const matrix<float> &Bulong Mulong Nulong Kfloat alphafloat beta);
#import

C++

extern "C" __declspec(dllexportbool sgemm(UINT flagsfloat *Cconst float *Aconst float *BUINT64 MUINT64 NUINT64 Kfloat alphafloat beta)

Для правильной обработки матриц и векторов, кроме их буферов, следует передавать их размеры.

Ниже перечислены все методы матриц и векторов в алфавитном порядке.

Функция

Действие

Категория

Activation

Вычисляет значения функции активации и записывает в переданный вектор/матрицу

Машинное обучение

ArgMax

Возвращает индекс максимального значения

Статистика

ArgMin

Возвращает индекс минимального значения

Статистика

ArgSort

Возвращает отсортированный индекс

Манипуляции

Assign

Копирует матрицу, вектор или массив с автоматическим преобразованием

Инициализация

Average

Вычисляет средневзвешенное значение значений матрицы/вектора

Статистика

Cholesky

Вычисляет разложение Холецкого

Преобразования

Clip

Ограничивает элементы матрицы/вектора заданным диапазоном допустимых значений

Манипуляции

Col

Возвращает вектор-столбец. Записывает вектор в указанный столбец

Манипуляции

Cols

Возвращает количество столбцов в матрице

Характеристики

Compare

Сравнивает элементы двух матриц/векторов с заданной точностью

Манипуляции

CompareByDigits

Сравнивает элементы двух матриц/векторов на совпадение с точностью значащих цифр

Манипуляции

Cond

Вычисляет условное число матрицы

Характеристики

Convolve

Возвращает дискретную линейную свертку двух векторов

Произведения

Copy

Возвращает копию заданной матрицы/вектора

Манипуляции

CopyIndicatorBuffer

Получает в вектор данные указанного буфера указанного индикатора в указанном количестве

Инициализация

CopyRates

Получает в матрицу или вектор исторические серии структуры MqlRates указанного символа-периода в указанном количестве

Инициализация

CopyTicks

Получает в матрицу или вектор тики из структуры MqlTick

Инициализация

CopyTicksRange

Получает в матрицу или вектор тики из структуры MqlTick в указанном диапазоне дат

Инициализация

CorrCoef

Вычисляет коэффициент корреляции Пирсона (линейный коэффициент корреляции)

Произведения

Correlate

Вычисляет кросс-корреляцию двух векторов

Произведения

Cov

Вычисляет ковариационную матрицу

Произведения

CumProd

Возвращает кумулятивное произведение элементов матрицы/вектора, включая элементы вдоль заданной оси

Статистика

CumSum

Возвращает кумулятивную сумму элементов матрицы/вектора, включая элементы вдоль заданной оси

Статистика

Derivative

Вычисляет значения производной активационной функции и записывает в переданный вектор/матрицу

Машинное обучение

Det

Вычисляет детерминант квадратной невырожденной матрицы

Характеристики

Diag

Извлекает диагональ или строит диагональную матрицу

Манипуляции

Dot

Скалярное произведение двух векторов

Произведения

Eig

Вычисляет собственные значения и правые собственные векторы квадратной матрицы

Преобразования

EigVals

Вычисляет собственные значения общей матрицы

Преобразования

Eye

Возвращает матрицу с единицами на диагонали и нулями в других местах

Инициализация

Fill

Заполняет существующую матрицу или вектор заданным значением

Инициализация

Flat

Позволяет обращаться к элементу матрицы через один индекс вместо двух

Манипуляции

Full

Создает и возвращает новую матрицу, заполненную заданным значением

Инициализация

GeMM

Oбщее матричное произведение двух матриц (General Matrix Multiply)

Произведения

HasNan

Возвращает количество NaN значений в матрице/векторе

Манипуляции

Hsplit

Горизонтальное разделение матрицы на несколько подматриц. То же самое, что Split с axis=0

Манипуляции

Identity

Создает единичную матрицу указанного размера

Инициализация

Init

Инициализация матрицы или вектора

Инициализация

Inner

Внутреннее произведение двух матриц

Произведения

Inv

Вычисляет (мультипликативную) обратную квадратной невырожденной матрицы методом Жордана-Гаусса

Решения

Kron

Возвращает произведение Кронекера двух матриц, матрицы и вектора, вектора и матрицы или двух векторов

Произведения

LinearRegression

Вычисляет вектор/матрицу с рассчитанными значениями линейной регрессии

Статистика

Loss

Вычисляет значения функции потерь и записывает в переданный вектор/матрицу

Машинное обучение

LstSq

Возвращает решение линейных алгебраических уравнений по методу наименьших квадратов (для неквадратных или вырожденных матриц)

Решения

LU

LU-факторизация матрицы как произведения нижней треугольной матрицы и верхней треугольной матрицы

Преобразования

LUP

Факторизация LUP с частичной перестановкой, которая относится к разложению LU только с перестановкой строк: PA=LU

Преобразования

MatMul

Матричное произведение двух матриц

Произведения

Max

Возвращает максимальное значение в матрице/векторе

Статистика

Mean

Вычисляет среднее арифметическое значений элементов

Статистика

Median

Вычисляет медиану элементов матрицы/вектора

Статистика

Min

Возвращает минимальное значение в матрице/векторе

Статистика

Norm

Возвращает норму матрицы или вектора

Характеристики

Ones

Создает и возвращает новую матрицу, заполненную единицами

Инициализация

Outer

Вычисляет внешнее произведение двух матриц или двух векторов

Произведения

Percentile

Возвращает указанный процентиль значений элементов матрицы/вектора или элементов вдоль указанной оси

Статистика

PInv

Вычисляет псевдообратную матрицу методом Мура-Пенроуза

Решения

Power

Возводит квадратную матрицу в целочисленную степень

Произведения

Prod

Возвращает произведение элементов матрицы/вектора, которое также может быть выполнено для заданной оси

Статистика

Ptp

Возвращает диапазон значений матрицы/вектора или заданной оси матрицы

Статистика

QR

Вычисляет qr-факторизацию матрицы

Преобразования

Quantile

Возвращает указанный квантиль значений элементов матрицы/вектора или элементов вдоль указанной оси

Статистика

Rank

Возвращает ранг матрицы с помощью метода Гаусса

Характеристики

RegressionMetric

Вычисляет регрессионную метрику как ошибку отклонения от линии регрессии, построенной на указанном массиве данных

Статистика

Reshape

Изменение формы матрицы без изменения ее данных

Манипуляции

Resize

Возвращает новую матрицу с измененной формой и размером

Манипуляции

Row

Возвращает вектор-строку. Записывает вектор в указанную строку

Манипуляции

Rows

Возвращает количество строк в матрице

Характеристики

Set

Устанавливает значение для элемента вектора по указанному индексу

Манипуляции

Size

Возвращает размер вектора

Характеристики

SLogDet

Вычисляет знак и логарифм определителя матрицы

Характеристики

Solve

Решает линейное матричное уравнение или систему линейных алгебраических уравнений

Решения

Sort

Сортировка по месту

Манипуляции

Spectrum

Вычисляет спектр матрицы как набор ее собственных значений из произведения AT*A

Характеристики

Split

Разделение матрицы на несколько подматриц

Манипуляции

Std

Возвращает стандартное отклонение значений элементов матрицы/вектора или элементов вдоль заданной оси

Статистика

Sum

Возвращает сумму элементов матрицы/вектора, которая также может быть выполнена для заданной оси (осей)

Статистика

SVD

Сингулярное разложение значений

Преобразования

SwapCols

Меняет местами столбцы в матрице

Манипуляции

SwapRows

Меняет местами строки в матрице

Манипуляции

Trace

Возвращает сумму по диагоналям матрицы

Характеристики

Transpose

Транспонирует (меняет оси местами) и возвращает измененную матрицу

Манипуляции

Tri

Строит матрицу с единицами на заданной и ниже диагоналях и нулями в других местах

Инициализация

TriL

Возвращает копию матрицы с обнуленными элементами над k-й диагональю. Нижнетреугольная матрица

Манипуляции

TriU

Возвращает копию матрицы с обнуленными элементами ниже k-й диагонали. Верхнетреугольная матрица

Манипуляции

Var

Вычисляет дисперсию значений элементов матрицы/вектора

Статистика

Vsplit

Вертикальное разделение матрицы на несколько подматриц. То же самое, что Split с axis=1

Манипуляции

Zeros

Создает и возвращает новую матрицу, заполненную нулями

Инициализация