- Tipos de matrices y vectores
- Creación e inicialización de matrices y vectores
- Copiar matrices, vectores y arrays
- Copiar series temporales en matrices y vectores
- Copiar el historial de ticks en matrices y vectores
- Evaluación de expresiones con matrices y vectores
- Manipulación de matrices y vectores
- Productos de matrices y vectores
- Transformaciones (descomposición) de matrices
- Obtener estadísticas
- Características de matrices y vectores
- Resolución de ecuaciones
- Métodos de aprendizaje automático
Manipulación de matrices y vectores
Cuando se trabaja con matrices y vectores se pueden realizar manipulaciones básicas sin necesidad de cálculos. Al principio de la lista figuran exclusivamente métodos matriciales, mientras que los cuatro últimos también son aplicables a vectores.
- Transpose: transposición de matrices
- Col, Row, Diag: extraer y fijar filas, columnas y diagonales por número
- TriL, TriU: obtener la matriz triangular inferior y superior por el número de la diagonal
- SwapCols, SwapRows: reordenar filas y columnas indicadas por números
- Flat: establecer y obtener un elemento de matriz mediante un índice
- Reshape: remodelar una matriz «in situ»
- Split, Hsplit, Vsplit: dividir una matriz en varias submatrices
- resize: redimensionar una matriz o un vector «in situ»
- Compare, CompareByDigits: comparar dos matrices o dos vectores con una precisión dada de números reales
- Sort: ordenar «in situ» (permutación de elementos) y obteniendo un vector o matriz de índices
- clip: limitar el rango de valores de los elementos «in situ»
Tenga en cuenta que no se proporciona la división de vectores.
A continuación se muestran los métodos prototipo para matrices.
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)
Para los vectores existe un conjunto más reducido de métodos.
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)
Ejemplo de transposición de matrices:
matrix a = {{0, 1, 2}, {3, 4, 5}};
|
Varios ejemplos de ajuste de diferentes diagonales utilizando el método Diag:
vector v1 = {1, 2, 3};
|
Modificación de la configuración de la matriz mediante Reshape:
matrix matrix_a = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};
|
Aplicaremos la división de matrices en submatrices en un ejemplo cuando realicemos la Resolución de ecuaciones.
Los métodos Col y Row permiten no sólo obtener columnas o filas de una matriz por su número, sino también insertarlas «in situ» en matrices previamente definidas. En este caso no cambiarán ni las dimensiones de la matriz ni los valores de los elementos fuera del vector columna (para el caso Col) o de un vector fila (para el caso Row).
Si cualquiera de estos dos métodos se aplica a una matriz cuyas dimensiones aún no se han establecido, se creará una matriz nula de tamaño [N * M], donde N y M se definen de forma diferente para Col y Row, en función de la longitud del vector y del índice de columna o fila dado:
- Para Col, N es la longitud del vector de columnas y M es en 1 mayor que el índice especificado de la columna insertada
- Para Row, N es en 1 mayor que el índice especificado de la fila insertada y M es la longitud del vector de la fila
En el momento de escribir este capítulo, MQL5 no proporcionaba métodos para la inserción completa de filas y columnas con la expansión de los elementos subsiguientes, ni para excluir filas y columnas especificadas.