Discusión sobre el artículo "Trabajamos con matrices y vectores en MQL5" - página 5

 
¿Cómo se saca una columna de una matriz?
 
Aleksey Vyazmikin #:

No es un vector, es una matriz, tengo el código de arriba

Tienes que averiguarlo tu mismo o convencer al compilador. Ver ejemplos, leer.


 
Aleksey Vyazmikin #:
¿Cómo se obtiene una columna de una matriz?

Puedes obtener un vector de una matriz utilizando Col

¿Qué quieres decir con "sacar"? ¿Sacar?

Документация по MQL5: Методы матриц и векторов / Манипуляции / Col
Документация по MQL5: Методы матриц и векторов / Манипуляции / Col
  • www.mql5.com
Col - Манипуляции - Методы матриц и векторов - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Rashid Umarov #:

Puede obtener un vector a partir de una matriz utilizando Col

¿Qué quieres decir con "sacar"? ¿Quitar?

Sacarlo en términos de convertirlo en algo con lo que trabajar.

Arriba mostré el código que me falló con Col, era una matriz, no un vector, como escribiste.

 
Necesitas descansar y releer todas tus preguntas en esta discusión mañana.
 
Rashid Umarov #:
Usted necesita descansar y volver a leer todas sus preguntas en este osbud mañana

Gracias por preocuparte.

La mayoría de las preguntas se han resuelto con su ayuda.

Voy a esperar hasta mañana, tal vez usted puede responder a mi pregunta más tarde.

 
Rashid Umarov #:

Nadie lee, pero están dispuestos a apoyar. ¿Me ha parecido verte en el hilo sobre aprendizaje automático? Si es así, usted debe entender lo que está escrito en el artículo.

Creo que no lo entiendo del todo. Por qué un elemento de la matriz tiene 3 valores. Es una matriz de 3 dimensiones. Por qué en la ayuda el vector es un array unidimensional y la matriz en este ejemplo está representada por uno tridimensional.
ZY, sucede)))) en el ejemplo hay 3 filas y 4 columnas)))) matriz))))))
 

Probablemente hay un pequeño error aquí:

//--- copia de matrices
  matrix a= {{2, 2}, {3, 3}, {4, 4}};
  matrix b=a+2;
  matrix c;
  Print("matrix a \n", a);
  Print("matrix b \n", b);
  c.Assign(b);
  Print("matrix c \n", a);
  /*
matriz a
[[2,2]
[3,3]
[4,4]]
matriz b
[[4,4]
[5,5]
[6,6]]
 matriz c
 [[2,2]
 [3,3]
 [4,4]]
  */

Debería ser así:

//--- copia de matrices
  matrix a= {{2, 2}, {3, 3}, {4, 4}};
  matrix b=a+2;
  matrix c;
  Print("matrix a \n", a);
  Print("matrix b \n", b);
  c.Assign(b);
  Print("matrix c \n", с);
  /*
matriz a
[[2,2]
[3,3]
[4,4]]
matriz b
[[4,4]
[5,5]
[6,6]]
 matriz c
 [[4,4]
 [5,5]
 [6,6]]
  */
 

Otro pequeño error en la sección"Copiar series temporales a matriz o vector":

//--- lista de caracteres a calcular
  string symbols[]= {"EURUSD", "GBPUSD", "USDJPY", "USDCAD", "USDCHF"};
  int size=ArraySize(symbols);
//--- matriz y vector para obtener precios Cerrar
  matrix rates(InBars, size);
  vector close;
  for(int i=0; i<size; i++)
   {
    //--- obtener los precios de cierre en el vector
    if(close.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars))
     {
      //--- inserta el vector en la matriz de series temporales
      rates.Col(close, i);
      PrintFormat("%d. %s: %d Precios de cierre añadidos a la matriz"., i+1, symbols[i], close.Size());
      //--- salida de los primeros 20 valores del vector para depuración
      int  digits=(int)SymbolInfoInteger(symbols[i], SYMBOL_DIGITS);
      Print(VectorToString(close, 20, digits));
     }
    else
     {
      Print("vector.CopyRates(%d,COPY_RATES_CLOSE) failed. Error ", symbols[i], GetLastError());
      return;
     }
   }

Probablemente mejor así:

//--- lista de caracteres a calcular
   string symbols[] = {"EURUSD", "GBPUSD", "USDJPY", "USDCAD", "USDCHF"};
   int size =::ArraySize(symbols);
//--- matriz y vector para obtener precios Cerrar
   matrix rates_mx(InBars, size);
   vector close_vc;
   for(int i = 0; i < size; i++)
      {
      ::ResetLastError();
      //--- obtener los precios de cierre en el vector
      if(close_vc.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars))
         {
         //--- inserta el vector en la matriz de series temporales
         rates_mx.Col(close_vc, i);
         ::PrintFormat("%d. %s: %d Precios de cierre añadidos a la matriz"., i + 1, symbols[i],close_vc.Size());
         //--- salida de los primeros 20 valores del vector para depuración
         int  digits = (int)::SymbolInfoInteger(symbols[i], SYMBOL_DIGITS); ::Print(VectorToString(close_vc, 20, digits));
         }
      else
         {
         ::PrintFormat("vector.CopyRates(%s,COPY_RATES_CLOSE) failed. Error %d", symbols[i], ::GetLastError());
         return;
         }
      }
 
Denis Kirichenko #:

Probablemente hay un pequeño error aquí:

Debería ser así:

Gracias, corregido