- 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
Copiar matrices, vectores y arrays
La forma más sencilla y habitual de copiar matrices y vectores es mediante el operador de asignación '='.
matrix a = {{2, 2}, {3, 3}, {4, 4}};
|
Este fragmento genera las siguientes entradas de registro:
matrix a
|
Los métodos Copy y Assign también pueden utilizarse para copiar matrices y vectores. La diferencia entre Assign y Copy es que Assign permite copiar no sólo matrices, sino también matrices.
bool matrix<T>::Copy(const matrix<T> &source)
bool matrix<T>::Assign(const matrix<T> &source)
bool matrix<T>::Assign(const T &array[])
También existen métodos y prototipos similares para los vectores.
A través de Assign es posible escribir un vector en una matriz: el resultado será una matriz de una fila.
bool matrix<T>::Assign(const vector<T> &v)
También puede asignar una matriz a un vector: se desenvolverá, es decir, todas las filas de la matriz se alinearán en una fila (equivalente a llamar al método Flat ).
bool vector<T>::Assign(const matrix<T> &m)
En el momento de escribir este capítulo, no había ningún método en MQL5 para exportar una matriz o vector a un array, aunque existe un mecanismo para «transferir» los datos (véase el método Swap).
En el siguiente ejemplo se muestra cómo se copia un array de enteros int_arr en una matriz de tipo double. En este caso, la matriz resultante se ajusta automáticamente al tamaño del array copiado.
matrix double_matrix = matrix::Full(2, 10, 3.14);
|
Tenemos la siguiente salida en el registro:
double_matrix before Assign()
|
Así, el método Assign puede utilizarse para pasar de arrays a matrices con conversión automática de tamaño y tipo.
Una forma más eficaz (rápida y sin necesidad de copiar) de transferir datos entre matrices, vectores y arrays es utilizar los métodos Swap.
bool matrix<T>::Swap(vector<T> &vec)
bool matrix<T>::Swap(matrix<T> &vec)
bool matrix<T>::Swap(T &arr[])
bool vector<T>::Swap(vector<T> &vec)
bool vector<T>::Swap(matrix<T> &vec)
bool vector<T>::Swap(T &arr[])
Funcionan de forma similar a ArraySwap: los punteros internos a búferes con datos dentro de dos objetos se intercambian. Como resultado, los elementos de una matriz o vector desaparecen en el objeto de origen y aparecen en el array receptor, o viceversa: pasan del array a la matriz o vector.
El método Swap permite trabajar con arrays dinámicos, incluidos los multidimensionales. Se aplica una determinada condición a los tamaños constantes de las dimensiones más altas de un array multidimensional (array[][N1][N2]...): El producto de estas dimensiones debe ser múltiplo del tamaño de la matriz o del vector. Así, un array de [][2][3] se redistribuye en bloques de 6 elementos. Por lo tanto, es intercambiable con matrices y vectores de tamaño 6, 12, 18, etc.