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

 
Rashid Umarov #:
Necesitas descansar y releer todas tus preguntas en esta discusión mañana.

Tus consejos me han ayudado, gracias.

Pero, ahora todavía estoy luchando con preguntas:

1. Necesito dividir una matriz por un vector - es una tarea típica para calcular porcentajes, cuando hay un total de cada fila/columna y necesito saber el porcentaje de cada celda - muy exigente.

   matrixf Test;
   Test.Init(3,2);
   Test.Fill(1);//Rellenar la matriz con ceros

   vectorf Zero;
   Zero.Init(3);
   Zero.Fill(0);//Rellenar la matriz con ceros

   Zero=Test/Zero;

Obtengo un error

cannot convert type 'vectorf' to type 'matrixf' Primer_02.mq5   325     11
cannot convert type 'matrixf' to type 'vectorf' Primer_02.mq5   325     10

Si haces una matriz a partir de un vector, esencialmente duplicando columnas para restaurar el tamaño de la matriz sobre la que se realiza el cálculo, este enfoque consume mucha memoria innecesariamente. Sacar vectores de una matriz en ciclos consume recursos y no parece racional.

2. A veces el divisor es cero, y entonces obtenemos "-nan(ind)". - pero esto no es muy conveniente para el trabajo posterior, tal vez hay una posibilidad de obtener cero u otro valor forzado en este caso, o no llevar a cabo el cálculo en esta celda - por elección?

   matrixf Test;
   Test.Init(3,2);
   Test.Fill(0);//Rellenar la matriz con ceros

   float z=0;
   Test=Test/z;
   Print(Test);
2022.10.13 06:09:52.125 Primer_02 (EURUSD,H1)   [[-nan(ind),-nan(ind)]
2022.10.13 06:09:52.125 Primer_02 (EURUSD,H1)    [-nan(ind),-nan(ind)]
2022.10.13 06:09:52.125 Primer_02 (EURUSD,H1)    [-nan(ind),-nan(ind)]]
 
Aleksey Vyazmikin #:

Tus consejos me han ayudado, gracias.

Pero ahora me sigo preguntando:

1. Necesito dividir una matriz por un vector - es una tarea típica para calcular porcentajes, cuando hay una suma total de cada fila/columna y necesito saber el porcentaje de cada celda - muy demandado.

Obtengo un error


Tienes ganas de romperlo todo. Ve más lejos tú mismo, no te ayudaré más - duele mirar los ejemplos

//+------------------------------------------------------------------+
//| Función de inicio del programa de script|
//+------------------------------------------------------------------+
void OnStart()
 {
//---
   matrixf m;
   m.Init(3,2);
   m.Fill(7);//Rellenar la matriz con NON-ZEROs

   vectorf divider;
   divider.Init(2);
   divider.Fill(3);//Rellenar el vector con ceros NONE

   for(ulong i=0;i<m.Rows();i++)
     {
      m.Row(m.Row(i)/divider,i);
     }
   Print(m);  
 }
 
Rashid Umarov #:

Tienes ganas de romperlo todo. Usted puede tomar desde aquí, no voy a ayudarle más, me duele ver ejemplos de esto.

Supongo que la sintaxis no va)))))

 
Rashid Umarov #:

Tienes ganas de romperlo todo. Usted puede tomar desde aquí, no voy a ayudarle más, me duele ver ejemplos de esto.

Pues hazlo de forma más fiable :))))))

El ejemplo está mal, tengo que dividir cada columna de la matriz por el valor correspondiente en la fila del vector. Es decir, el vector debe representar una columna, no una fila. Entiendo que entonces necesito transponer la matriz..... Pensé que era posible sin un bucle.

Y, por supuesto estoy muy interesado en la respuesta a la segunda pregunta. Ni siquiera una respuesta, sino añadir la posibilidad de poner un cero en la matriz final al dividir por cero.

[Eliminado]  
El hombre ya ha roto los catbusters, pronto no quedará nada de las matrices )
 
Maxim Dmitrievsky #:
El hombre ya ha roto el catbuster, pronto no quedará nada de las matrices )

Arrojando información falsa, usted refuerza la declaración de una persona respetada en este recurso, al parecer tratando de adjuntar a su autoridad y me hacen en una mala luz,

¿Tienes algún rencor personal?

[Eliminado]  
Aleksey Vyazmikin #:

Al arrojar información falsa, amplificas la declaración de una persona respetada en este recurso, aparentemente intentando adscribirte a su autoridad y hacerme quedar mal,

¿Tienes algún rencor personal?

No creo que el humor haya sido baneado todavía.

 
Maxim Dmitrievsky #:

Creo que aún no han prohibido el humor.

Probablemente sea gracioso. Incluso puedo suponer la premisa real de la declaración. Sin embargo, poca gente entenderá de qué estamos hablando, si no son asiduos del hilo de MdD.

¿Entiendes la nueva sintaxis de las matrices, y soy el único al que se le da tan mal pensar?

[Eliminado]  
Aleksey Vyazmikin #:

Tal vez sea gracioso. Incluso puedo suponer la premisa real de la declaración. Sin embargo, pocas personas entenderán de qué se trata, a menos que sean asiduas al hilo de MdD.

¿Entiendes la nueva sintaxis de las matrices, y soy el único al que se le da tan mal pensar?

No lo he leído, se implementa de forma diferente en todas partes, solo hay que ver las peculiaridades.

Creo que está todo claro, yo mismo uso dataframes en python, tiene sus particularidades.

 

Por favor, aclárame cómo copiar una columna de una matriz a otra.

No entiendo el ejemplo a través de copiar a vector.

vector matrix::Col(
  const ulong   ncol      // número de columna
   );
 
void matrix::Col(
  const vector  v,        // vector columna
  const ulong   ncol      // número de columna
   );

He aquí un trozo de mi código

   for(P=0; P<Type_Q_Perebor; P++)
   {
      matrixf m_Data_calc;//Matriz con tabla para cálculos
      vectorf V_Data_calc;//Vector para la transferencia de matriz a matriz
      switch(P)
      {
      case 0:
         m_Data_calc.Init(Strok_Total_Data*N_1, 1);//Inicializar la matriz
         m_Data.Reshape(Strok_Total_Data, Stolb_Total_Data);//Mejora el tamaño de la matriz con los datos
         break;
      case 1:
         m_Data_calc.Init(Strok_Total_Data*N_0, 1);//Inicializar la matriz
         m_Data.Reshape(Strok_Total_Data, Stolb_Total_Data);//Mejora el tamaño de la matriz con los datos
         break;
      }

      V_Data_calc.Cov(m_Data_calc,0);//Copiar el vector columna de la matriz
      m_Data_calc.Col(V_Data_calc,0);//Copiar el vector columna en la matriz
   }

Obtengo un error

'Cov' - wrong parameters count  Tree_Analiz_Bi_V_2_4.mq5        219     19
   built-in: matrixf vectorf:Cov(const vectorf&)        Tree_Analiz_Bi_V_2_4.mq5        219     19