文章 "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 #:

你有打破一切的欲望。你自己看着办吧,我不会再帮你了,看到这样的例子我很伤心。

那就做得更可靠些吧 :)))))))

这个例子是错的,我需要用矩阵的每一列除以向量行中的相应值。也就是说,向量应该代表一列,而不是一行。我明白了,然后我需要对矩阵进行转置.....。我以为不需要循环就可以做到。

当然,我对第二个问题的答案也非常感兴趣。甚至不是答案,而是在除以零时,在最终矩阵中加入一个零的可能性。

 
这个人已经破坏了猫头鹰,很快矩阵就会荡然无存 )
 
Maxim Dmitrievsky #:
这个人已经弄坏了猫头鹰,很快矩阵就什么都不剩了。)

你抛出虚假信息,强化了本资源上一位受人尊敬者的声明,显然是想依附于他的权威,让我处于不利地位、

你有个人恩怨吗?

 
Aleksey Vyazmikin #:

你抛出虚假信息,扩大了本资源上一位受人尊敬者的言论,显然是想依附于他的权威,让我难堪、

你有个人恩怨吗?

我认为幽默还没有被禁止。

 
Maxim Dmitrievsky #:

我觉得他们还没有禁止幽默。

这可能很有趣。我甚至可以推测出这句话的真正前提。不过,如果不是国防部主题的常客,很少有人会明白我们在说什么。

你了解矩阵的新语法吗?只有我这么不善于思考吗?

 
Aleksey Vyazmikin #:

也许这很有趣。我甚至可以推测出这句话的真正前提。不过,除非是国防部主题的常客,否则很少有人能理解它的含义。

你了解矩阵的新语法吗?只有我这么不善于思考吗?

我没看过,各地的实现方式都不一样,你只需要看看其中的特殊性。

我想一切都很清楚了,我自己在 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