Обсуждение статьи "Работа с матрицами и векторами в 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 значения. Это 3х мерный массив. Почему в справке вектор это одномерный массив а матрица в данном примере представлена трехмерным.
ЗЫ, бывает))) в примере 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);
  /*
   matrix a
   [[2,2]
    [3,3]
    [4,4]]
   matrix b
   [[4,4]
    [5,5]
    [6,6]]
   matrix 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", с);
  /*
   matrix a
   [[2,2]
    [3,3]
    [4,4]]
   matrix b
   [[4,4]
    [5,5]
    [6,6]]
   matrix c
   [[4,4]
    [5,5]
    [6,6]]
  */
 

Ещё мелкая ошибка в разделе "Копирование таймсерий в матрицу или вектор":

//--- список символов для вычисления
  string symbols[]= {"EURUSD", "GBPUSD", "USDJPY", "USDCAD", "USDCHF"};
  int size=ArraySize(symbols);
//--- матрица и вектор для получения цен Close
  matrix rates(InBars, size);
  vector close;
  for(int i=0; i<size; i++)
   {
    //--- получим цены Close в вектор
    if(close.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars))
     {
      //--- вставим вектор в матрицу таймсерий
      rates.Col(close, i);
      PrintFormat("%d. %s: %d цен Close добавлено в матрицу", 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);
//--- матрица и вектор для получения цен Close
   matrix rates_mx(InBars, size);
   vector close_vc;
   for(int i = 0; i < size; i++)
      {
      ::ResetLastError();
      //--- получим цены Close в вектор
      if(close_vc.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars))
         {
         //--- вставим вектор в матрицу таймсерий
         rates_mx.Col(close_vc, i);
         ::PrintFormat("%d. %s: %d цен Close добавлено в матрицу", 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 #:

Наверное тут небольшая ошибка:

Должно быть так:

Спасибо, поправили