"MQL5'te matrisler ve vektörlerle çalışma" makalesi için tartışma - sayfa 5

 
Peki bir matristen bir sütunu nasıl çıkarırsınız?
 
Aleksey Vyazmikin #:

Bu bir vektör değil, bir matris, yukarıdaki koda sahibim

Bunu kendiniz çözmeniz veya derleyiciyi ikna etmeniz gerekir. Örneklere bakın, okuyun.


 
Aleksey Vyazmikin #:
Peki bir matristen bir sütunu nasıl elde edersiniz?

Col kullanarak bir matristen bir vektör elde edebilirsiniz

"Çıkarmak" derken neyi kastediyorsunuz? Çıkarmak mı?

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

Col kullanarak bir matristen bir vektör elde edebilirsiniz

"Çıkarmak" derken neyi kastediyorsunuz? Kaldırmak mı?

Çalışmak için bir şeye dönüştürme açısından çıkarın.

Col ile başarısız olduğum kodu yukarıda gösterdim, yazdığınız gibi bir vektör değil, bir matristi.

 
Dinlenmeniz ve yarın bu tartışmadaki tüm sorularınızı tekrar okumanız gerekiyor.
 
Rashid Umarov #:
Dinlenmeniz ve yarın bu osbud'daki tüm sorularınızı tekrar okumanız gerekiyor

İlginiz için teşekkür ederiz!

Soruların çoğu sizin yardımınızla çözüldü.

Yarına kadar bekleyeceğim, belki soruma daha sonra cevap verebilirsiniz.

 
Rashid Umarov #:

Kimse okumuyor ama destek vermeye hazır. Sizi makine öğrenimi başlığında gördüğümü sanıyordum? Eğer öyleyse, makalede ne yazdığını anlamanız gerekir.

Sanırım tam olarak anlamadım. Bir matris elemanının neden 3 değeri vardır. Bu 3 boyutlu bir dizi. Neden yardımda vektör tek boyutlu bir dizi ve bu örnekteki matris üç boyutlu bir dizi ile temsil ediliyor.
ZY, oluyor)))) örnekte 3 satır ve 4 sütun var)))) matris))))))
 

Muhtemelen burada küçük bir hata var:

//--- matris kopyalama
  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);
  /*
matris a
[[2,2]
[3,3]
[4,4]]
matris b
[[4,4]
[5,5]
[6,6]]
 matris c
 [[2,2]
 [3,3]
 [4,4]]
  */

Şöyle olmalı:

//--- matris kopyalama
  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", с);
  /*
matris a
[[2,2]
[3,3]
[4,4]]
matris b
[[4,4]
[5,5]
[6,6]]
 matris c
 [[4,4]
 [5,5]
 [6,6]]
  */
 

"Zaman serilerini matrise veya vektöre kopyalama" bölümünde bir başka küçük hata:

//--- hesaplanacak karakterlerin listesi
  string symbols[]= {"EURUSD", "GBPUSD", "USDJPY", "USDCAD", "USDCHF"};
  int size=ArraySize(symbols);
//--- fiyatları almak için matris ve vektör Kapat
  matrix rates(InBars, size);
  vector close;
  for(int i=0; i<size; i++)
   {
    //--- Kapanış fiyatlarını vektör haline getirin
    if(close.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars))
     {
      //--- vektörü zaman serisi matrisine yerleştirin
      rates.Col(close, i);
      PrintFormat("%d. %s: %d Matrise eklenen kapanış fiyatları.", i+1, symbols[i], close.Size());
      //--- hata ayıklama için vektörün ilk 20 değerinin çıktısını alın
      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;
     }
   }

Muhtemelen böyle daha iyi:

//--- hesaplanacak karakterlerin listesi
   string symbols[] = {"EURUSD", "GBPUSD", "USDJPY", "USDCAD", "USDCHF"};
   int size =::ArraySize(symbols);
//--- fiyatları almak için matris ve vektör Kapat
   matrix rates_mx(InBars, size);
   vector close_vc;
   for(int i = 0; i < size; i++)
      {
      ::ResetLastError();
      //--- Kapanış fiyatlarını vektör haline getirin
      if(close_vc.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars))
         {
         //--- vektörü zaman serisi matrisine yerleştirin
         rates_mx.Col(close_vc, i);
         ::PrintFormat("%d. %s: %d Matrise eklenen kapanış fiyatları.", i + 1, symbols[i],close_vc.Size());
         //--- hata ayıklama için vektörün ilk 20 değerinin çıktısını alın
         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 #:

Muhtemelen burada küçük bir hata var:

Şöyle olmalı:

Teşekkürler, düzeltildi