Обсуждение статьи "Работа с матрицами и векторами в 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. Нужно матрицу поделить на вектор - это типичная задача для расчета процентов, когда есть итоговая сумма каждой строки/столбца и нужно узнать процент каждой ячейки - очень востребовано.

Получаю ошибку


У вас стремление всё сломать. Дальше сами, больше не буду помогать - больно смотреть на примеры

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
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 #:

Возможно это смешно. Я даже могу предположить реальные предпосылки высказывания. Однако, мало кто поймет о чем речь, если он не завсегдатый ветки про МО.

Вам новый синтаксис матриц понятен, и это только я так плохо соображаю?

я не читал, везде он реализован по разному, надо просто посмотреть особенности

вроде все понятно, сам на питоне датафреймами пользуюсь, там своя специфика

 

Прошу разъяснить, как скопировать столбец из одной матрицы в другую!

Пример через копирования в вектор не понимаю.

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