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

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

Ihr Rat hat mir geholfen, danke.

Aber jetzt kämpfe ich immer noch mit Fragen:

1. Ich muss eine Matrix durch einen Vektor dividieren - das ist eine typische Aufgabe für die Berechnung von Prozentsätzen, wenn es eine Gesamtsumme für jede Zeile/Spalte gibt und ich den Prozentsatz jeder Zelle wissen muss - sehr anspruchsvoll.

   matrixf Test;
   Test.Init(3,2);
   Test.Fill(1);//Füllen der Matrix mit Nullen

   vectorf Zero;
   Zero.Init(3);
   Zero.Fill(0);//Füllen der Matrix mit Nullen

   Zero=Test/Zero;

Ich erhalte eine Fehlermeldung

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

Wenn Sie eine Matrix aus einem Vektor erstellen und dabei im Wesentlichen Spalten duplizieren, um die Größe der Matrix wiederherzustellen, über die die Berechnung durchgeführt wird, verbraucht dieser Ansatz unnötig viel Speicher. Das zyklische Herausziehen von Vektoren aus einer Matrix ist ressourcenintensiv und erscheint nicht sinnvoll.

2. manchmal ist der Divisor Null, und dann erhalten wir "-nan(ind)". - Vielleicht gibt es eine Möglichkeit, in diesem Fall Null oder einen anderen erzwungenen Wert zu erhalten, oder die Berechnung in dieser Zelle nicht auszuführen - nach Wahl?

   matrixf Test;
   Test.Init(3,2);
   Test.Fill(0);//Füllen der Matrix mit Nullen

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

Ihr Rat hat mir geholfen, danke.

Aber jetzt bin ich immer noch verwundert:

1. Ich muss eine Matrix durch einen Vektor dividieren - das ist eine typische Aufgabe für die Berechnung von Prozentsätzen, wenn es eine Gesamtsumme für jede Zeile/Spalte gibt und ich den Prozentsatz jeder Zelle wissen muss - sehr anspruchsvoll.

Ich erhalte einen Fehler


Sie haben den Wunsch, alles zu zerstören. Gehen Sie selbst weiter, ich werde Ihnen nicht mehr helfen - es tut weh, sich die Beispiele anzusehen

//+------------------------------------------------------------------+
//| Skript-Programmstartfunktion|
//+------------------------------------------------------------------+
void OnStart()
 {
//---
   matrixf m;
   m.Init(3,2);
   m.Fill(7);//Füllen Sie die Matrix mit NON-ZEROs

   vectorf divider;
   divider.Init(2);
   divider.Fill(3);//Füllen des Vektors mit KEINEN Nullen

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

Du hast den Wunsch, alles kaputt zu machen. Du kannst von hier aus weitermachen, ich werde dir nicht weiter helfen, es tut weh, solche Beispiele zu sehen.

Ich schätze, die Syntax geht nicht)))))

 
Rashid Umarov #:

Du hast den Wunsch, alles kaputt zu machen. Du kannst von hier aus weitermachen, ich werde dir nicht weiter helfen, es tut weh, solche Beispiele zu sehen.

Also mach es zuverlässiger :)))))))

Das Beispiel ist falsch, ich muss jede Spalte der Matrix durch den entsprechenden Wert in der Zeile des Vektors dividieren. Das heißt, der Vektor sollte eine Spalte darstellen, nicht eine Zeile. Ich verstehe, dass ich dann die Matrix transponieren muss..... Ich dachte, das sei ohne Schleife möglich.

Und ich bin natürlich sehr an der Antwort auf die zweite Frage interessiert. Nicht einmal eine Antwort, sondern eher eine Möglichkeit, eine Null in die endgültige Matrix zu setzen, wenn man durch Null dividiert.

 
Der Mann hat bereits die Catbusters zerstört, bald wird von den Matrizen nichts mehr übrig sein.)
 
Maxim Dmitrievsky #:
Der Mann hat schon den Catbuster kaputt gemacht, bald wird nichts mehr von den Matrizen übrig sein )

Indem Sie falsche Informationen einwerfen, verstärken Sie die Aussage einer angesehenen Person auf dieser Ressource und versuchen offensichtlich, an seine Autorität anzuknüpfen und mich in ein schlechtes Licht zu rücken,

Haben Sie einen persönlichen Groll?

 
Aleksey Vyazmikin #:

Indem Sie falsche Informationen einwerfen, verstärken Sie die Aussage einer angesehenen Person in dieser Quelle und versuchen offensichtlich, sich mit seiner Autorität zu schmücken und mich schlecht aussehen zu lassen,

Hegen Sie einen persönlichen Groll?

Ich glaube nicht, dass Humor bisher verbannt wurde.

 
Maxim Dmitrievsky #:

Ich glaube nicht, dass sie den Humor schon verboten haben.

Es ist wahrscheinlich lustig. Ich kann sogar die eigentliche Prämisse der Aussage erahnen. Allerdings werden nur wenige Leute verstehen, worüber wir reden, wenn sie nicht regelmäßig den MoD-Thread lesen.

Verstehen Sie die neue Syntax der Matrizen, und bin ich der Einzige, der so schlecht im Denken ist?

 
Aleksey Vyazmikin #:

Vielleicht ist es lustig. Ich kann sogar die eigentliche Prämisse der Aussage erahnen. Allerdings werden nur wenige Menschen verstehen, worum es geht, es sei denn, sie sind Stammgäste im MoD-Thread.

Verstehen Sie die neue Syntax der Matrizen, und bin ich der Einzige, der so schlecht im Denken ist?

Ich habe sie nicht gelesen, sie ist überall anders implementiert, man muss sich nur die Eigenheiten ansehen.

Ich denke, es ist alles klar, ich benutze selbst Dataframes in Python, das hat seine eigenen Besonderheiten.

 

Bitte klären Sie, wie man eine Spalte von einer Matrix in eine andere kopiert!

Ich verstehe das Beispiel mit dem Kopieren in einen Vektor nicht.

vector matrix::Col(
  const ulong   ncol      // Spaltennummer
   );
 
void matrix::Col(
  const vector  v,        // Spaltenvektor
  const ulong   ncol      // Spaltennummer
   );

Hier ist ein Teil meines Codes

   for(P=0; P<Type_Q_Perebor; P++)
   {
      matrixf m_Data_calc;//Matrix mit Tabelle für Berechnungen
      vectorf V_Data_calc;//Vektor für Array-zu-Matrix-Übertragung
      switch(P)
      {
      case 0:
         m_Data_calc.Init(Strok_Total_Data*N_1, 1);//Initialisierung der Matrix
         m_Data.Reshape(Strok_Total_Data, Stolb_Total_Data);//Verbessern Sie die Matrixgröße mit den Daten
         break;
      case 1:
         m_Data_calc.Init(Strok_Total_Data*N_0, 1);//Initialisierung der Matrix
         m_Data.Reshape(Strok_Total_Data, Stolb_Total_Data);//Verbessern Sie die Matrixgröße mit den Daten
         break;
      }

      V_Data_calc.Cov(m_Data_calc,0);//Kopieren des Spaltenvektors aus der Matrix
      m_Data_calc.Col(V_Data_calc,0);//Kopieren des Spaltenvektors in die Matrix
   }

Ich erhalte einen Fehler

'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