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

 
Rashid Umarov #:
Vous devez vous reposer et relire toutes les questions de cette discussion demain.

Vos conseils m'ont aidé, merci.

Mais maintenant, je me débats encore avec des questions :

1. Je dois diviser une matrice par un vecteur - c'est une tâche typique pour calculer des pourcentages, lorsqu'il y a un total pour chaque ligne/colonne et que je dois connaître le pourcentage de chaque cellule - très demandé.

   matrixf Test;
   Test.Init(3,2);
   Test.Fill(1);/Remplir la matrice avec des zéros

   vectorf Zero;
   Zero.Init(3);
   Zero.Fill(0);/Remplir la matrice avec des zéros

   Zero=Test/Zero;

J'obtiens une erreur

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 vous créez une matrice à partir d'un vecteur, en dupliquant essentiellement les colonnes pour rétablir la taille de la matrice sur laquelle le calcul est effectué, cette approche consomme inutilement beaucoup de mémoire. Extraire des vecteurs d'une matrice en cycles consomme des ressources et ne semble pas rationnel.

2) Parfois, le diviseur est nul, et nous obtenons alors "-nan(ind)". - Mais ce n'est pas très pratique pour la suite du travail, peut-être y a-t-il une possibilité d'obtenir zéro ou une autre valeur forcée dans ce cas, ou de ne pas effectuer de calcul dans cette cellule - au choix ?

   matrixf Test;
   Test.Init(3,2);
   Test.Fill(0);/Remplir la matrice avec des zéros

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

Vos conseils m'ont aidé, merci.

Mais je me pose encore des questions :

1. Je dois diviser une matrice par un vecteur - c'est une tâche typique pour calculer des pourcentages, quand il y a une somme totale de chaque ligne/colonne et que je dois connaître le pourcentage de chaque cellule - très demandé.

J'obtiens une erreur


Vous avez envie de tout casser. Allez plus loin vous-même, je ne vous aiderai plus - ça fait mal de regarder les exemples

//+------------------------------------------------------------------+
//| Fonction de démarrage du programme de script|
//+------------------------------------------------------------------+
void OnStart()
 {
//---
   matrixf m;
   m.Init(3,2);
   m.Fill(7);/Remplir la matrice avec des NON-ZÉROs

   vectorf divider;
   divider.Init(2);
   divider.Fill(3);/Remplir le vecteur avec des zéros NONE

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

Vous avez envie de tout casser. Vous pouvez prendre le relais, je ne vous aiderai pas plus, ça fait mal de voir des exemples comme ça.

Je suppose que la syntaxe ne va pas)))))

 
Rashid Umarov #:

Vous avez envie de tout casser. Vous pouvez prendre le relais, je ne vous aiderai pas plus, ça fait mal de voir des exemples comme ça.

Alors faites-le de manière plus fiable :)))))))

L'exemple est faux, je dois diviser chaque colonne de la matrice par la valeur correspondante dans la ligne du vecteur. C'est-à-dire que le vecteur doit représenter une colonne et non une ligne. Je comprends que je dois alors transposer la matrice..... Je pensais que c'était possible sans boucle.

Et, bien sûr, je suis très intéressé par la réponse à la deuxième question. Pas même une réponse, mais plutôt l'ajout d'une possibilité de mettre un zéro dans la matrice finale lors de la division par zéro.

[Supprimé]  
L'homme a déjà cassé les catbusters, bientôt il ne restera plus rien des matrices )
 
Maxim Dmitrievsky #:
L'homme a déjà cassé le catbuster, bientôt il ne restera plus rien des matrices )

En lançant de fausses informations, vous renforcez la déclaration d'une personne respectée sur cette ressource, en essayant apparemment de vous attacher à son autorité et de me faire apparaître sous un mauvais jour,

Avez-vous une rancune personnelle ?

[Supprimé]  
Aleksey Vyazmikin #:

En ajoutant de fausses informations, vous amplifiez la déclaration d'une personne respectée sur cette ressource, en essayant apparemment de vous attacher à son autorité et de me faire mal paraître,

Avez-vous une rancune personnelle ?

Je ne pense pas que l'humour ait été banni jusqu'à présent.

 
Maxim Dmitrievsky #:

Je ne pense pas qu'ils aient encore interdit l'humour.

C'est probablement drôle. Je peux même deviner la véritable prémisse de la déclaration. Cependant, peu de gens comprendront de quoi nous parlons, s'ils ne sont pas des habitués du fil MoD.

Comprenez-vous la nouvelle syntaxe des matrices, et suis-je le seul à être si peu doué pour la réflexion ?

[Supprimé]  
Aleksey Vyazmikin #:

C'est peut-être drôle. Je peux même deviner la véritable prémisse de la déclaration. Toutefois, peu de gens comprendront de quoi il s'agit, à moins d'être des habitués du fil de discussion sur le ministère de la défense.

Comprenez-vous la nouvelle syntaxe des matrices, et suis-je le seul à être aussi mauvais en matière de réflexion ?

Je ne l'ai pas lue, elle est implémentée différemment partout, il suffit de regarder les particularités.

Je pense que tout est clair, j'utilise moi-même des dataframes en python, cela a ses propres spécificités.

 

Veuillez préciser comment copier une colonne d'une matrice à une autre !

Je ne comprends pas l'exemple de la copie vers un vecteur.

vector matrix::Col(
  const ulong   ncol      // numéro de colonne
   );
 
void matrix::Col(
  const vector  v,        // vecteur colonne
  const ulong   ncol      // numéro de colonne
   );

Voici un morceau de mon code

   for(P=0; P<Type_Q_Perebor; P++)
   {
      matrixf m_Data_calc;//Matrice avec tableau pour les calculs
      vectorf V_Data_calc;//Vecteur pour le transfert du tableau à la matrice
      switch(P)
      {
      case 0:
         m_Data_calc.Init(Strok_Total_Data*N_1, 1);//Initialiser la matrice
         m_Data.Reshape(Strok_Total_Data, Stolb_Total_Data);//Améliorer la taille de la matrice à l'aide des données
         break;
      case 1:
         m_Data_calc.Init(Strok_Total_Data*N_0, 1);//Initialiser la matrice
         m_Data.Reshape(Strok_Total_Data, Stolb_Total_Data);//Améliorer la taille de la matrice à l'aide des données
         break;
      }

      V_Data_calc.Cov(m_Data_calc,0);/Copier le vecteur colonne de la matrice
      m_Data_calc.Col(V_Data_calc,0);/Copier le vecteur colonne dans la matrice
   }

J'obtiens une erreur

'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