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

 
では、行列から列を取り出すにはどうすればいいのか?
 
Aleksey Vyazmikin #:

ベクトルではなく、マトリックスだ。

自分で考えるか、コンパイラを説得するしかない。例を見て、読んでください。


 
Aleksey Vyazmikin #:
では、行列から列を取り出すにはどうすればいいのだろうか?

行列からベクトルを取り出すには、 Colを 使います。

取り出す」とはどういう意味ですか?取り除く?

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

行列からベクトルを得るには Col

取り出す」とはどういう意味ですか?取り除く?

変換して使えるようにする、という意味です。

コルで失敗したコードを上に示したが、それはあなたが書いたようにベクトルではなく行列だった。

 
明日は休んで、このディスカッションの質問をすべて読み直す必要がある。
 
Rashid Umarov #:
休養が必要で、明日このオスバッドですべての質問を読み直す必要がある

ご心配をおかけしました!

ほとんどの質問は、あなたのおかげで解決しました。

明日まで待ちます。もしかしたら、後で私の質問に答えてくれるかもしれません。

 
Rashid Umarov #:

誰も読まないが、サポートは惜しまない。機械学習のスレッドで見かけたような?もしそうなら、記事に書かれていることを理解すべきだ。

私は完全には理解していないようだ。行列の要素がなぜ3つの値を持つのか。これは3次元配列です。なぜヘルプではベクトルは1次元の配列で、この例の行列は3次元の配列で表現されているのか。
ZY、それは起こります))))))))))))))))))))))))))))))))))))))))))))))))))))) 例題では3行4列の行列があります。
 

おそらく、ここに ちょっとした間違いがあるのだろう:

//--- 行列のコピー
  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);
  /*
行列
[[2,2]
[3,3]
[4,4]]
行列b
[[4,4]
[5,5]
[6,6]]
 マトリックスc
 [[2,2]
 [3,3]
 [4,4]]
  */

こうあるべきだ:

//--- 行列のコピー
  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", с);
  /*
行列
[[2,2]
[3,3]
[4,4]]
行列b
[[4,4]
[5,5]
[6,6]]
 マトリックスc
 [[4,4]
 [5,5]
 [6,6]]
  */
 

また、「時系列を行列またはベクトルにコピーする」 セクションに小さな誤りがある:

//--- 計算される文字のリスト
  string symbols[]= {"EURUSD", "GBPUSD", "USDJPY", "USDCAD", "USDCHF"};
  int size=ArraySize(symbols);
//--- 行列とベクトルで価格を求める 閉じる
  matrix rates(InBars, size);
  vector close;
  for(int i=0; i<size; i++)
   {
    //--- 終値のベクトル化
    if(close.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars))
     {
      //--- ベクトルを時系列行列に挿入する。
      rates.Col(close, i);
      PrintFormat("%d. %s: %d 終値がマトリックスに追加されました。", i+1, symbols[i], close.Size());
      //--- デバッグ用にベクトルの最初の20個の値を出力する。
      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;
     }
   }

おそらくこのようにした方がよい:

//--- 計算される文字のリスト
   string symbols[] = {"EURUSD", "GBPUSD", "USDJPY", "USDCAD", "USDCHF"};
   int size =::ArraySize(symbols);
//--- 行列とベクトルで価格を求める 閉じる
   matrix rates_mx(InBars, size);
   vector close_vc;
   for(int i = 0; i < size; i++)
      {
      ::ResetLastError();
      //--- 終値のベクトル化
      if(close_vc.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars))
         {
         //--- ベクトルを時系列行列に挿入する。
         rates_mx.Col(close_vc, i);
         ::PrintFormat("%d. %s: %d 終値がマトリックスに追加されました。", i + 1, symbols[i],close_vc.Size());
         //--- デバッグ用にベクトルの最初の20個の値を出力する。
         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 #:

ここに ちょっとした間違いがあるだろう:

こうあるべきだ:

ありがとうございました。