Diskussion zum Artikel "Matrix- und Vektoroperationen in MQL5" - Seite 5

 
Wie erhält man also eine Spalte aus einer Matrix?
 
Aleksey Vyazmikin #:

Es ist kein Vektor, es ist eine Matrix, ich habe den Code oben

Du musst es selbst herausfinden oder den Compiler überzeugen. Siehe Beispiele, lesen.


 
Aleksey Vyazmikin #:
Wie erhält man also eine Spalte aus einer Matrix?

Man kann einen Vektor aus einer Matrix mit Col

Was meinen Sie mit "herausziehen"? Entfernen?

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

Sie können einen Vektor aus einer Matrix erhalten, indem Sie Col

Was meinen Sie mit "herausnehmen"? Entfernen?

Herausnehmen im Sinne einer Umwandlung in etwas, mit dem man arbeiten kann.

Ich habe oben den Code gezeigt, der mir mit Col nicht gelungen ist, es war eine Matrix, kein Vektor, wie du geschrieben hast.

 
Sie müssen sich ausruhen und morgen alle Ihre Fragen in dieser Diskussion noch einmal lesen.
 
Rashid Umarov #:
Sie müssen sich ausruhen und morgen noch einmal alle Ihre Fragen in diesem osbud lesen

Vielen Dank für Ihr Interesse!

Die meisten Fragen wurden mit Ihrer Hilfe geklärt.

Ich werde bis morgen warten, vielleicht können Sie meine Frage später beantworten.

 
Rashid Umarov #:

Niemand liest sie, aber sie sind bereit, sie zu unterstützen. Ich dachte, ich hätte Sie in dem Thread über maschinelles Lernen gesehen? Wenn ja, dann sollten Sie verstehen, was in dem Artikel steht.

Ich schätze, ich verstehe es nicht ganz. Warum ein Matrixelement 3 Werte hat. Es ist ein 3-dimensionales Array. Warum in der Hilfe der Vektor ein eindimensionales Array ist und die Matrix in diesem Beispiel durch ein dreidimensionales dargestellt wird.
ZY, es passiert)))) in dem Beispiel gibt es 3 Zeilen und 4 Spalten)))) Matrix))))))
 

Hier liegt wahrscheinlich ein kleiner Fehler vor:

//--- Kopieren der Matrix
  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);
  /*
Matrix a
[[2,2]
[3,3]
[4,4]]
matrix b
[[4,4]
[5,5]
[6,6]]
 matrix c
 [[2,2]
 [3,3]
 [4,4]]
  */

Es sollte so sein:

//--- Kopieren der Matrix
  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", с);
  /*
Matrix a
[[2,2]
[3,3]
[4,4]]
matrix b
[[4,4]
[5,5]
[6,6]]
 matrix c
 [[4,4]
 [5,5]
 [6,6]]
  */
 

Ein weiterer kleiner Fehler im Abschnitt"Kopieren von Zeitreihen in Matrix oder Vektor":

//--- Liste der zu berechnenden Zeichen
  string symbols[]= {"EURUSD", "GBPUSD", "USDJPY", "USDCAD", "USDCHF"};
  int size=ArraySize(symbols);
//--- Matrix und Vektor zur Ermittlung der Preise Schließen
  matrix rates(InBars, size);
  vector close;
  for(int i=0; i<size; i++)
   {
    //--- Schließen der Preise in einen Vektor umwandeln
    if(close.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars))
     {
      //--- Einfügen des Vektors in die Zeitreihenmatrix
      rates.Col(close, i);
      PrintFormat("%d. %s: %d Schlusskurse zur Matrix hinzugefügt.", i+1, symbols[i], close.Size());
      //--- Ausgabe der ersten 20 Werte des Vektors zur Fehlersuche
      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;
     }
   }

Wahrscheinlich ist es besser so:

//--- Liste der zu berechnenden Zeichen
   string symbols[] = {"EURUSD", "GBPUSD", "USDJPY", "USDCAD", "USDCHF"};
   int size =::ArraySize(symbols);
//--- Matrix und Vektor zur Ermittlung der Preise Schließen
   matrix rates_mx(InBars, size);
   vector close_vc;
   for(int i = 0; i < size; i++)
      {
      ::ResetLastError();
      //--- Schließen der Preise in einen Vektor umwandeln
      if(close_vc.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars))
         {
         //--- Einfügen des Vektors in die Zeitreihenmatrix
         rates_mx.Col(close_vc, i);
         ::PrintFormat("%d. %s: %d Schlusskurse zur Matrix hinzugefügt.", i + 1, symbols[i],close_vc.Size());
         //--- Ausgabe der ersten 20 Werte des Vektors zur Fehlersuche
         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 #:

Hier liegt wahrscheinlich ein kleiner Fehler vor:

Es sollte so sein:

Danke, korrigiert