L'Apprentissage Automatique dans le trading : théorie, modèles, pratique et trading algo - page 3260

 
Aleksey Vyazmikin #:
15000 * 100 * 4 octets / 1024 / 1024 5.72 MB

Il s'agit de la matrice d'entrée.
La sortie sera de 15000 lignes pour chacune des 15000 lignes. Comme dans tous les autres exemples, cela représente environ 1,7 Gg (si l'on double par 8 octets).

 
Forester #:

Il s'agit de la matrice d'entrée.
La sortie sera de 15000 traits pour chacune des 15000 lignes. Comme dans tous les autres exemples, environ 1,7 Gg chacun (si en double par 8 octets).

Je suis d'accord pour dire que ce n'est pas ainsi que les choses comptent.

 
fxsaber #:

Jusqu'à présent, je ne vois pas d'obstacle technique au calcul d'une matrice million par million sur une simple machine domestique. Mais la comparaison entre NumPy et MQL5 est très importante pour moi.

En êtes-vous sûr ?


Par exemple, une matrice d'entrée de 50 000 colonnes/100 lignes donnera une matrice de corrélation de 50 000 x 50 000 x 8 octets / (1024 x 1024 x 1024) = 18,63 Go.

 
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)));
}


Coïncidence totale des valeurs de calcul NumPy avec MQL5.

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

Il s'agit de la matrice d'entrée.
La sortie sera de 15000 traits pour chacune des 15000 lignes. Comme dans tous les autres exemples, environ 1,7 Gg chacun (si en double par 8 octets).

En général, hélas, python ne sait pas travailler avec des int - il les convertit en double apparemment.

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 #:

En général, hélas, python ne sait pas travailler avec int - il le convertit en double, apparemment.

Arrêtez de spammer. La corrélation dans les int ne compte pas.

 
Maxim Dmitrievsky #:

Arrêtez de spammer des conneries. La corrélation dans les ints ne compte pas.

Il n'est pas nécessaire d'ouvrir l'Amérique. Il n'est pas courant de compter, mais cela vaut la peine de réfléchir à la manière de le faire.

 
Aleksey Vyazmikin #:

L'Amérique n'a pas besoin d'être découverte. Il n'est pas courant de l'envisager, mais cela vaut la peine de réfléchir à la manière de le faire.

Dans un nouveau fil de discussion, pensez à quelque chose

 
Maxim Dmitrievsky #:

dans le nouveau fil de discussion, proposer

Quelle bande de gens - je vais perdre du temps pour lui et il est impoli.

C'est quoi ce bordel...

 
Aleksey Vyazmikin #:

L'Amérique n'a pas besoin d'être découverte. Il n'est pas courant de l'envisager, mais cela vaut la peine de réfléchir à la manière de le faire.

J'ai déjà décrit la façon de procéder : prendre les f-iys d'Alglib (il y a 8 pièces appelées à partir de PearsonCorrM) et changer les types de données. Même dans un uchar de 1 octet. Les ints de 4 octets n'apporteront pas beaucoup de gain.
Faites-le vous-même si vous en avez besoin.