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

 
Rashid Umarov #:
Var, makaleyi okuyun .

Makale çok boyutlu bir diziyi kopyalıyor, ancak sizin tek boyutlu bir diziye ihtiyacınız var!

 
Herkese merhaba. Göstergeyi incelemek istiyorum ama nereden başlayacağımı bilmiyorum.
 

Neden sadece yardım edemediğinizi, bir örnek gösteremediğinizi anlamıyorum - makale tartışması bunun için - üzücü.

Genel olarak, sadece bir vektör aracılığıyla mümkün olduğuna karar verdim - oraya bir dizi geçirmek ve sonra onu bir matrise vidalamak, ancak şimdiye kadar nasıl büküleceği noktasına bile gelmedim (bir vektörden belirli sayıda sütuna sahip bir matris yapmak mümkün mü, sanki dönüştürüyormuş gibi?) ve bunun mümkün olduğu gerçeği değil, bu yüzden bir çökme yaşadım.

2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      Access violation at 0x0000000140D77E04 write to 0x00000002CBD3617E
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)         crash -->  0000000140 D77E04 6644896473 FE      mov        [rbx+rsi*2-0x2], r12w
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E0A 83 F8FE            cmp        eax, 0xfe
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E0D 751 C              jnz        0x140d77e2b
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E0F 4 C3BF7            cmp        r14, rdi
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E12 751 B              jnz        0x140d77e2f
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E14 443865 F0          cmp        [rbp-0x10], r12b
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E18 7478              jz         0x140d77e92
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      00: 0x0000000140D77E04
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      01: 0x00000001403246C7
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      02: 0x0000000140BCBBC8
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      03: 0x0000000140BCBA81
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      04: 0x0000000140BCB78B
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      05: 0x0000000140BB848B
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      06: 0x0000000140BBA5D1
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      07: 0x0000000140BBA491
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      08: 0x00000000040E06D0
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      

Elbette kodu ekliyorum

//+------------------------------------------------------------------+
//|Test_Matrix_02.mq5 |
//|Telif Hakkı 2022, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Komut dosyası programı başlatma işlevi|
//+------------------------------------------------------------------+
void OnStart()
  {
   matrix target;
   int count=1000;
   target.Init(count, 1);
   vector V_Target;//Hedefleri içeren bir dizi almak ve bunu bir matrise aktarmak için vektör
   int arr_Target[];
   ArrayResize(arr_Target,count);
   int T_Rand=0;//Rastgele bir şey yazacağız
   for(int i=0; i<count; i++)
     {
     T_Rand=rand();
     if(T_Rand>32767/2)arr_Target[i]=1;
     else arr_Target[i]=0;
     }
   V_Target.Assign(arr_Target);
   if(!target.Col(V_Target,0))
   return ;
   Print("data after Col(V_Target) \n", target);
   
  }
//+------------------------------------------------------------------+
 

Alexei, her şey benim için çalışıyor. İşte biraz değiştirilmiş senaryonuz:

//+------------------------------------------------------------------+
//| Komut dosyası programı başlatma işlevi|
//+------------------------------------------------------------------+
void OnStart()
  {
   const int count = 20;
   ::MathSrand(1);
//--- dizi
   int target_arr[];
   ::ArrayResize(target_arr, count);
   for(int i = 0; i < count; i++)
     {
      int T_Rand = ::MathRand();
      if(T_Rand > 32767 / 2)
         target_arr[i] = 1;
      else
         target_arr[i] = 0;
     }
//--- vektör
   vector target_vc;
   target_vc.Assign(target_arr);
//--- matris
   matrix target_mx(count, 1);
   if(!target_mx.Col(target_vc, 0))
      return;
   ::Print("data after Col(target_vc) \n", target_mx);
   int rows, cols;
   rows = 4;
   cols = 5;
   if(!target_mx.Reshape(rows, cols))
      return;
   ::Print("data after Reshape \n", target_mx);
  }
//+------------------------------------------------------------------+


Günlük:

2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)        data after Col(target_vc) 
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)        [[0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)        data after Reshape 
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)        [[0,1,0,1,1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0,0,1,1,1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0,1,1,1,0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0,0,0,0,0]]
 
Denis Kirichenko #:

Alexei, her şey benim için çalışıyor. İşte biraz değiştirilmiş senaryonuz:


Günlük:

Teşekkür ederim. Evet, yazdırmadaki /n'nin çökmeye neden olduğunu biliyorum, ancak ":" nin ne anlama geldiğini bilmiyorum.

Matris aktarımı için teşekkürler - bu sabah okudum ama henüz denemedim. Ancak yine de çok fazla bellek tüketileceği ortaya çıkıyor - diyelim ki verileri tek boyutlu bir dizide topladık, sonra bir vektöre, sonra bir matrise koymamız gerekiyor - zaten 3 tekrarlanan varlık, ki bu iyi değil. Neden tek boyutlu bir diziyi hemen bir matrise aktaramıyoruz?

 

Anlayamıyorum:

1. Bir matris bir diziye nasıl aktarılır

2. Matriste belirli bir değerin nasıl okunacağı ve satır ve sütun belirtilerek nasıl yazılacağı

Makaleyi birden fazla kez okudum - belki de içindeki ifadeleri anlamıyorum, ama gerçek şu ki - sorular var.

 
Aleksey Vyazmikin #:

Teşekkür ederim. Evet, yazdırmadaki /n'nin çökmeye neden olduğunu biliyorum, ancak ":" ne anlama geliyor bilmiyorum.

Matris aktarımı için teşekkürler - bu sabah okudum ama henüz denemedim. Ancak yine de çok fazla bellek tüketileceği ortaya çıkıyor - diyelim ki verileri tek boyutlu bir dizide topladık, sonra bir vektöre, sonra bir matrise koymamız gerekiyor - zaten 3 tekrarlanan varlık, ki bu iyi değil. Neden tek boyutlu bir diziyi hemen bir matrise aktaramıyoruz?

Bilmiyorum, sanırım Geliştirici daha iyi biliyor.... Ve neden "array-vector-matrix" zincirini atlayarak verileri hemen bir matrise toplayamıyorsunuz? ))

 
Denis Kirichenko #:

Bilmiyorum, belki Geliştirici daha iyi biliyordur.... Neden "dizi-vektör-matris" zincirini atlayarak verileri bir matriste toplayamıyorsunuz? ))

Şimdiye kadar matrisi doğrudan hücrelerle nasıl dolduracağımı ve ondan nasıl okuyacağımı anlamadım.

Genel olarak bin dosyasından diziye veri okuyorum - bu bir örnek - onunla bir matris gibi çalışmak istedim, sanırım başlangıçta dosyadan bir matris okumak için bir fırsat vardı, ancak şimdi talimatlarda böyle bir fırsat görmüyorum.

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

Şimdiye kadar matrisi doğrudan hücre hücre nasıl dolduracağımı ve ondan nasıl okuyacağımı anlamadım.

OpenCL'de matris çarpımı ile ilgili örneğe bakın

 
Ya da MatrixSetValues makalesinde arama yapın, her şey açıkça görülebilir.