Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 3260

 
Aleksey Vyazmikin #:
15000 * 100 * 4 Bytes / 1024 / 1024 5,72 MB

Dies ist die Eingabematrix.
Die Ausgabe besteht aus 15000 Zeilen für jede der 15000 Zeilen. Wie in allen anderen Beispielen sind das etwa 1,7 Gg (bei Verdoppelung um 8 Bytes).

 
Forester #:

Dies ist die Eingabematrix.
Die Ausgabe sind 15000 Striche in jeder der 15000 Zeilen. Wie in allen anderen Beispielen jeweils etwa 1,7 Gg (wenn in Double by 8 Bytes)

Ich stimme zu, dass dies nicht die Art ist, wie es zählt.

 
fxsaber #:

Bisher sehe ich kein technisches Hindernis für die Berechnung einer Million-mal-Million-Matrix auf einem einfachen Heimcomputer. Aber der Vergleich zwischen NumPy und MQL5 ist für mich sehr wichtig.

Sind Sie sicher?


Zum Beispiel ergibt eine Eingabematrix mit 50.000 Spalten/100 Zeilen eine Korrelationsmatrix von 50 .000 x 50. 000 x 8 Bytes / (1024 x 1024 x 1024) = 18,63 GB

 
input int inRows = 100; // Длина строки
input int inCols = 15000; // Количество строк

bool IsEqual( matrix<double> &Matrix1, const matrix<double> &Matrix2 )
{
  Matrix1 -= Matrix2;  
  
  const bool Res = (MathAbs(Matrix1.Mean()) < 1 e-15);
  
  Matrix1 += Matrix2;
  
  return(Res);
}

#define  TOSTRING(A) #A + " = " + (string)(A) + " "

void OnStart()
{  
  double Array[];  
  Print(FileLoad("qwe\\arr.csv", Array)); // RAM-drive. https://www.mql5.com/ru/forum/86386/page3258#comment_49549438
  
  matrix<double> Matrix;  
  Matrix.Assign(Array);
  Matrix.Init(inCols, inRows);
  Matrix = Matrix.Transpose();
  
  ArrayFree(Array);  
  Print(FileLoad("qwe\\matr.csv", Array)); // RAM-drive. https://www.mql5.com/ru/forum/86386/page3258#comment_49549438

  matrix<double> Matrix2;
  Matrix2.Assign(Array);
  Matrix2.Init(inCols, inCols);
  Matrix2 = Matrix2.Transpose();
    
  ArrayFree(Array);
  
  matrix<double> Matrix1 = CorrMatrix(Matrix); // https://www.mql5.com/ru/forum/86386/page3256#comment_49538685

  Print(TOSTRING(IsEqual(Matrix1, Matrix2)));
}


Vollständige Übereinstimmung von NumPy-Berechnungswerten mit MQL5.

1500000
225000000
IsEqual(Matrix1, Matrix2) = true 
 
Forester #:

Dies ist die Eingabematrix.
Die Ausgabe sind 15000 Striche in jeder der 15000 Zeilen. Wie in allen anderen Beispielen jeweils etwa 1,7 Gg (wenn in Double by 8 Bytes)

Im Allgemeinen weiß Python leider nicht, wie man mit int arbeitet - es wandelt sie anscheinend in double um.

import numpy as np
import time

def calc_corr_matrix():
    arr = np.random.randint(1, 101, size=(15000,100), dtype=np.int32)
    corr_matrix = np.corrcoef(arr)
    size_in_mb = corr_matrix.nbytes / 1024**2
    print("Array size:", size_in_mb, "MB")
    return corr_matrix

np.random.seed(123)

start_time = time.time()
corr_matrix = calc_corr_matrix()
end_time = time.time()

print("Time taken:", end_time - start_time, "seconds")
Array size: 1716.61376953125 MB
Time taken: 4.62926459312439 seconds
 
Aleksey Vyazmikin #:

Im Allgemeinen weiß Python leider nicht, wie man mit int arbeitet - es konvertiert es in double, anscheinend.

Hören Sie auf, Unsinn zu spammen. Korrelation in Ints zählt nicht.

 
Maxim Dmitrievsky #:

Hören Sie auf mit dem Blödsinn. Die Korrelation in Ints zählt nicht.

Du brauchst Amerika nicht zu öffnen. Es ist nicht üblich, zu zählen, aber es lohnt sich, darüber nachzudenken, wie es gemacht werden kann.

 
Aleksey Vyazmikin #:

Amerika muss nicht erst entdeckt werden. Es ist nicht üblich, darüber nachzudenken, aber es lohnt sich, darüber nachzudenken, wie es gemacht werden kann.

Denken Sie sich in einem neuen Thema etwas aus

 
Maxim Dmitrievsky #:

in dem neuen Thema, mit

Was für ein Haufen Leute - ich gehe hin, um Zeit für ihn zu verschwenden, und er ist unhöflich.

Was soll's...

 
Aleksey Vyazmikin #:

Amerika muss nicht erst entdeckt werden. Es ist nicht üblich, darüber nachzudenken, aber es lohnt sich, darüber nachzudenken, wie es gemacht werden kann.

Ich habe bereits die Art und Weise beschrieben - nehmen Sie Alglib f-iys (es gibt 8 Stücke von PearsonCorrM aufgerufen) und ändern Sie Datentypen. Sogar in 1 Byte uchar. 4-Byte-Ints bringen keinen großen Gewinn.
Machen Sie es selbst, wenn Sie es müssen.
Grund der Beschwerde: