Discussione sull’articolo "Operazioni con matrici e vettori in MQL5" - pagina 6

 
Rashid Umarov #:
Dovete riposare e rileggere tutte le domande di questa discussione domani.

Il tuo consiglio mi ha aiutato, grazie.

Ma ora sono ancora alle prese con le domande:

1. Devo dividere una matrice per un vettore - questo è un compito tipico per il calcolo delle percentuali, quando c'è un totale di ogni riga/colonna e ho bisogno di sapere la percentuale di ogni cella - molto richiesto.

   matrixf Test;
   Test.Init(3,2);
   Test.Fill(1);//riempire la matrice di zeri

   vectorf Zero;
   Zero.Init(3);
   Zero.Fill(0);//riempire la matrice di zeri

   Zero=Test/Zero;

Ottengo un errore

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

Se si crea una matrice da un vettore, duplicando essenzialmente le colonne per ripristinare le dimensioni della matrice su cui viene eseguito il calcolo, questo approccio consuma molta memoria inutilmente. Estrarre i vettori da una matrice in cicli consuma risorse e non sembra razionale.

2. A volte il divisore è zero, e allora si ottiene "-nan(ind)". - Ma questo non è molto comodo per il lavoro successivo, forse c'è la possibilità di ottenere zero o un altro valore forzato in questo caso, o di non eseguire il calcolo in questa cella - a scelta?

   matrixf Test;
   Test.Init(3,2);
   Test.Fill(0);//riempire la matrice di zeri

   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 #:

Il suo consiglio è stato utile, grazie.

Ma ora mi sto ancora chiedendo:

1. Ho bisogno di dividere una matrice per un vettore - questo è un compito tipico per il calcolo delle percentuali, quando c'è una somma totale di ogni riga/colonna e ho bisogno di sapere la percentuale di ogni cella - molto richiesto.

Ottengo un errore


Hai il desiderio di rompere tutto. Andate avanti da soli, non vi aiuterò più - fa male guardare gli esempi

//+------------------------------------------------------------------+
//| Funzione di avvio del programma di script|
//+------------------------------------------------------------------+
void OnStart()
 {
//---
   matrixf m;
   m.Init(3,2);
   m.Fill(7);/Riempire la matrice con i NON ZERO

   vectorf divider;
   divider.Init(2);
   divider.Fill(3);//riempire il vettore con NESSUNO zero

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

Avete il desiderio di rompere tutto. Da qui in poi potete andare avanti, non vi aiuterò oltre, fa male vedere esempi di questo tipo.

Immagino che la sintassi non vada)))))

 
Rashid Umarov #:

Avete il desiderio di rompere tutto. Da qui in poi potete andare avanti, non vi aiuterò oltre, fa male vedere esempi di questo tipo.

Allora fallo in modo più affidabile :)))))))

L'esempio è sbagliato, devo dividere ogni colonna della matrice per il valore corrispondente nella riga del vettore. Cioè il vettore dovrebbe rappresentare una colonna, non una riga. Capisco che poi devo trasporre la matrice..... Pensavo che fosse possibile senza un ciclo.

E, naturalmente, sono molto interessato alla risposta alla seconda domanda. Non è nemmeno una risposta, ma piuttosto l'aggiunta di una possibilità di mettere uno zero nella matrice finale quando si divide per zero.

 
L'uomo ha già rotto i catbuster, presto non resterà più nulla delle matrici).
 
Maxim Dmitrievsky #:
L'uomo ha già rotto il catbuster, presto non rimarrà più nulla delle matrici.)

Gettando informazioni false, rafforzi la dichiarazione di una persona rispettata su questa risorsa, cercando apparentemente di attaccarti alla sua autorità e di mettermi in cattiva luce,

Hai un rancore personale?

 
Aleksey Vyazmikin #:

Inserendo informazioni false, si amplifica l'affermazione di una persona rispettata su questa risorsa, cercando apparentemente di attaccarsi alla sua autorità e di mettermi in cattiva luce,

Ha un rancore personale?

Non credo che l'umorismo sia stato ancora bandito.

 
Maxim Dmitrievsky #:

Non credo che abbiano ancora vietato l'umorismo.

Probabilmente è divertente. Posso anche ipotizzare la vera premessa dell'affermazione. Tuttavia, poche persone capiranno di cosa stiamo parlando, se non sono frequentatori abituali del thread sulla MoD.

Capisci la nuova sintassi delle matrici, e sono l'unico a non saper pensare?

 
Aleksey Vyazmikin #:

Forse è divertente. Posso anche ipotizzare la vera premessa della dichiarazione. Tuttavia, pochi capiranno di cosa si tratta, a meno che non siano frequentatori abituali del thread sul MoD.

Capite la nuova sintassi delle matrici e sono l'unico a non saper pensare?

Non l'ho letta, è implementata in modo diverso dappertutto, basta guardare le particolarità.

Penso che sia tutto chiaro, io stesso uso i dataframe in python, ha le sue specificità.

 

Si prega di chiarire come copiare una colonna da una matrice a un'altra!

Non capisco l'esempio di copia in un vettore.

vector matrix::Col(
  const ulong   ncol      // numero di colonna
   );
 
void matrix::Col(
  const vector  v,        // vettore di colonne
  const ulong   ncol      // numero di colonna
   );

Ecco un pezzo del mio codice

   for(P=0; P<Type_Q_Perebor; P++)
   {
      matrixf m_Data_calc;//Matrice con tabella per i calcoli
      vectorf V_Data_calc;/Vettore per il trasferimento da matrice a matrice
      switch(P)
      {
      case 0:
         m_Data_calc.Init(Strok_Total_Data*N_1, 1);//Inizializzare la matrice
         m_Data.Reshape(Strok_Total_Data, Stolb_Total_Data);//Migliorare la dimensione della matrice con i dati
         break;
      case 1:
         m_Data_calc.Init(Strok_Total_Data*N_0, 1);//Inizializzare la matrice
         m_Data.Reshape(Strok_Total_Data, Stolb_Total_Data);//Migliorare la dimensione della matrice con i dati
         break;
      }

      V_Data_calc.Cov(m_Data_calc,0);/Copia il vettore colonna dalla matrice
      m_Data_calc.Col(V_Data_calc,0);/Copia il vettore colonna nella matrice
   }

Ottengo un errore

'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