記事「MQL5での行列およびベクトル演算」についてのディスカッション - ページ 6

 
Rashid Umarov #:
ゆっくり休んで、明日、このディスカッションでの質問をすべて読み直す必要がある。

あなたのアドバイスが役に立った。

でも、今はまだ質問と格闘しています:

1.行列をベクトルで割る必要があります。これはパーセンテージを計算する典型的なタスクで、各行/列の合計があり、各セルのパーセンテージを知る必要があります。

   matrixf Test;
   Test.Init(3,2);
   Test.Fill(1);//行列をゼロで埋める

   vectorf Zero;
   Zero.Init(3);
   Zero.Fill(0);//行列をゼロで埋める

   Zero=Test/Zero;

エラーが出る

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

ベクトルから行列を作成する場合、基本的に列を複製して計算の対象となる行列のサイズを復元することになりますが、この方法では不必要に多くのメモリを消費します。行列からベクトルを取り出すサイクルはリソースを消費し、合理的ではありません。

2.除数がゼロの場合、"-nan(ind) "となることがある。- この場合、ゼロまたは他の強制的な値を得るか、あるいはこのセルで計算を行わないようにするか、選択できる可能性があるかもしれない。

   matrixf Test;
   Test.Init(3,2);
   Test.Fill(0);//行列をゼロで埋める

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

あなたのアドバイスが役に立った。

でも、今はまだ迷っているんだ:

1.行列をベクトルで割る必要があります。これはパーセンテージを計算する典型的なタスクで、各行/列の合計があり、各セルのパーセンテージを知る必要があります。

エラー


あなたは何でも壊したがる。これ以上手助けはしない。例題を見るのは苦痛だ。

//+------------------------------------------------------------------+
//| スクリプト番組開始機能|
//+------------------------------------------------------------------+
void OnStart()
 {
//---
   matrixf m;
   m.Init(3,2);
   m.Fill(7);//行列をゼロ以外で埋める

   vectorf divider;
   divider.Init(2);
   divider.Fill(3);//ゼロなしでベクトルを埋める

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

あなたはすべてを壊したいという願望を持っている。これ以上は手助けしない。こういう例を見るのは心が痛む。

構文は行かないのだろう)))))

 
Rashid Umarov #:

あなたはすべてを壊したいという願望を持っている。これ以上は手助けしない。こういう例を見るのは心が痛む。

だから、もっと確実にやってくれ。)

行列の各列をベクトルの対応する行の値で割る必要がある。つまり、ベクトルは行ではなく列を表す必要があります。行列を転置する必要があるのは理解できますが......。ループなしでも可能だと思いました。

そして、もちろん2つ目の質問の答えにとても興味があります。答えというよりも、ゼロで割るときに最終的な行列にゼロを入れる可能性を追加することです。

 
あの男はすでにキャットバスターを壊してしまった。)
 
Maxim Dmitrievsky #:
あの男はすでにキャットバスターを壊してしまった。)

虚偽の情報を入れることで、この情報源で尊敬されている人物の発言を強化し、どうやら彼の権威に取り入って私を悪者に仕立て上げようとしているようだ、

個人的な恨みでもあるのか?

 
Aleksey Vyazmikin #:

虚偽の情報を入れることで、この情報源で尊敬されている人物の発言を増幅させ、彼の権威と自分を結びつけて、私を悪者に仕立て上げようとしているようだ、

個人的な恨みでもあるのか?

ユーモアはまだ禁止されていないと思う。

 
Maxim Dmitrievsky #:

ユーモアはまだ禁止されていないと思う。

おそらく面白い。発言の本当の前提を推測することもできる。しかし、MoDスレッドの常連でなければ、私たちが話していることを理解する人はほとんどいないだろう。

マトリックスの新しい構文を理解しているのか、考えるのが苦手なのは私だけか?

 
Aleksey Vyazmikin #:

たぶん面白い。発言の本当の前提を推測することもできる。しかし、MoDスレッドの常連でもない限り、その内容を理解する人はほとんどいないだろう。

マトリックスの新しい構文を理解しているのか、考えるのが苦手なのは私だけか?

読んではいないよ。どこの国でも実装は違うんだから、特殊なところを見ればいいんだ。

私自身pythonでデータフレームを使っています。

 

ある行列から別の行列に列をコピーする方法を教えてください!

ベクトルへのコピーの例が理解できません。

vector matrix::Col(
  const ulong   ncol      // 列番号
   );
 
void matrix::Col(
  const vector  v,        // 列ベクトル
  const ulong   ncol      // 列番号
   );

以下は私のコードの一部です。

   for(P=0; P<Type_Q_Perebor; P++)
   {
      matrixf m_Data_calc;//計算用の表を持つ行列
      vectorf V_Data_calc;// 配列から行列への転送用ベクトル
      switch(P)
      {
      case 0:
         m_Data_calc.Init(Strok_Total_Data*N_1, 1);// 行列を初期化する
         m_Data.Reshape(Strok_Total_Data, Stolb_Total_Data);// データで行列のサイズを改善する
         break;
      case 1:
         m_Data_calc.Init(Strok_Total_Data*N_0, 1);// 行列を初期化する
         m_Data.Reshape(Strok_Total_Data, Stolb_Total_Data);// データで行列のサイズを改善する
         break;
      }

      V_Data_calc.Cov(m_Data_calc,0);//行列から列ベクトルをコピーする
      m_Data_calc.Col(V_Data_calc,0);//列ベクトルを行列にコピーする
   }

エラーが発生します

'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