Discussion de l'article "Opérations sur les Matrices et les Vecteurs en MQL5" - page 5

 
Comment obtenir une colonne à partir d'une matrice ?
 
Aleksey Vyazmikin #:

Ce n'est pas un vecteur, c'est une matrice, j'ai le code ci-dessus

Vous devez le découvrir vous-même ou convaincre le compilateur. Voir des exemples, lire.


 
Aleksey Vyazmikin #:
Comment obtenir une colonne à partir d'une matrice ?

Vous pouvez obtenir un vecteur à partir d'une matrice en utilisant Col

Qu'entendez-vous par "extraire" ? Retirer ?

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

Vous pouvez obtenir un vecteur à partir d'une matrice en utilisant Col

Qu'entendez-vous par "retirer" ? Enlever ?

Retirer en termes de conversion en quelque chose avec lequel on peut travailler.

J'ai montré ci-dessus le code que j'ai échoué avec Col, c'était une matrice, pas un vecteur, comme vous l'avez écrit.

 
Vous devez vous reposer et relire toutes les questions de cette discussion demain.
 
Rashid Umarov #:
Vous avez besoin de vous reposer et de relire toutes vos questions dans cet osbud demain.

Merci de votre attention !

La plupart des questions ont été résolues avec votre aide.

Je vais attendre jusqu'à demain, peut-être pourrez-vous répondre à ma question plus tard.

 
Rashid Umarov #:

Personne ne lit, mais ils sont prêts à soutenir. J'ai cru vous voir dans le fil de discussion sur l'apprentissage automatique ? Si c'est le cas, vous devriez comprendre ce qui est écrit dans l'article.

Je suppose que je ne comprends pas tout à fait. Pourquoi un élément de matrice a 3 valeurs. Il s'agit d'un tableau à 3 dimensions. Pourquoi, dans l'aide, le vecteur est un tableau à une dimension et la matrice, dans cet exemple, est représentée par un tableau à trois dimensions.
ZY, il se trouve que)))) dans l'exemple il y a 3 lignes et 4 colonnes)))) matrice))))))
 

Il y a probablement une petite erreur :

//--- copie de la matrice
  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);
  /*
matrice a
[[2,2]
[3,3]
[4,4]]
matrice b
[[4,4]
[5,5]
[6,6]]
 matrice c
 [[2,2]
 [3,3]
 [4,4]]
  */

Cela devrait être comme ceci :

//--- copie de la matrice
  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", с);
  /*
matrice a
[[2,2]
[3,3]
[4,4]]
matrice b
[[4,4]
[5,5]
[6,6]]
 matrice c
 [[4,4]
 [5,5]
 [6,6]]
  */
 

Une autre erreur mineure dans la section"Copying timeseries to matrix or vector" :

//--- liste des caractères à calculer
  string symbols[]= {"EURUSD", "GBPUSD", "USDJPY", "USDCAD", "USDCHF"};
  int size=ArraySize(symbols);
//--- matrice et vecteur pour obtenir les prix Fermer
  matrix rates(InBars, size);
  vector close;
  for(int i=0; i<size; i++)
   {
    //--- Obtenir les prix de clôture dans un vecteur
    if(close.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars))
     {
      //--- insérer le vecteur dans la matrice des séries temporelles
      rates.Col(close, i);
      PrintFormat("%d. %s : %d Close prices added to the matrix"., i+1, symbols[i], close.Size());
      //--- sortir les 20 premières valeurs du vecteur pour le débogage
      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;
     }
   }

Il serait probablement préférable de procéder comme suit :

//--- liste des caractères à calculer
   string symbols[] = {"EURUSD", "GBPUSD", "USDJPY", "USDCAD", "USDCHF"};
   int size =::ArraySize(symbols);
//--- matrice et vecteur pour obtenir les prix Fermer
   matrix rates_mx(InBars, size);
   vector close_vc;
   for(int i = 0; i < size; i++)
      {
      ::ResetLastError();
      //--- Obtenir les prix de clôture dans un vecteur
      if(close_vc.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars))
         {
         //--- insérer le vecteur dans la matrice des séries temporelles
         rates_mx.Col(close_vc, i);
         ::PrintFormat("%d. %s : %d Close prices added to the matrix"., i + 1, symbols[i],close_vc.Size());
         //--- sortir les 20 premières valeurs du vecteur pour le débogage
         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 #:

Il y a probablement une petite erreur :

Cela devrait être comme ceci :

Merci, corrigé