文章 "MQL5 中的矩阵和向量操作" - 页 5

 
那么,如何从矩阵中取出一列呢?
 
Aleksey Vyazmikin #:

这不是一个向量,而是一个矩阵,我有上面的代码

你必须自己解决,或者说服编译器。请阅读示例。


 
Aleksey Vyazmikin #:
那么,如何从矩阵中获取一列呢?

使用 Col 可以从 矩阵 中取出一个向量。

你说的 "取出 "是什么意思?删除?

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

您可以使用 Col

你说的 "取出 "是什么意思?删除?

取出是指将它转换成可以使用的东西。

我在上面展示了我在使用 Col 时失败的代码,它是一个矩阵,而不是你写的矢量。

 
你需要休息,明天重新阅读讨论中的所有问题。
 
Rashid Umarov #:
您需要休息一下,明天再重新阅读您在本网站上提出的所有问题。

谢谢您的关心!

在您的帮助下,大部分问题都得到了解决。

我会等到明天,也许您可以稍后再回答我的问题。

 
Rashid Umarov #:

无人阅读,但愿意支持。我好像在机器学习主题里看到过你?如果是的话,你应该能理解文章中的内容。

我想我没有完全理解。为什么一个矩阵元素有 3 个值。这是一个三维数组。为什么帮助中的矢量是一维数组,而本例中的矩阵是三维数组?
ZY, it happens)))) in the example there are 3 rows and 4 columns)))) 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);
  /*
矩阵 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", с);
  /*
矩阵 a
[[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 #:

这里 可能有点误会:

应该是这样的

谢谢,已更正