Ticarette makine öğrenimi: teori, pratik, ticaret ve daha fazlası - sayfa 3260

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

Bu girdi matrisidir.
Çıktı 15000 satırın her biri için 15000 satır olacaktır. Diğer tüm örneklerde olduğu gibi yaklaşık 1,7 Gg'dir (8 bayt ile ikiye katlanırsa).

 
Forester #:

Bu giriş matrisidir.
Çıktı, 15000 satırın her biri için 15000 vuruş olacaktır. Diğer tüm örneklerde olduğu gibi her biri yaklaşık 1,7 Gg (eğer 8 bayta çift ise)

Bu şekilde sayılmayacağına katılıyorum.

 
fxsaber #:

Şimdiye kadar, basit bir ev makinesinde milyona milyon matris hesaplamak için herhangi bir teknik engel görmüyorum. Ancak NumPy ile MQL5 karşılaştırması benim için çok önemli.

Emin misin?


Örneğin, 50.000 sütun/100 satır içeren bir giriş matrisi 50. 000 x 50 .000 x 8 bayt / (1024 x 1024 x 1024) = 18,63 GB'lık bir korelasyon matrisi verecektir.

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


NumPy hesaplama değerlerinin MQL5 ile tam çakışması.

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

Bu giriş matrisidir.
Çıktı, 15000 satırın her biri için 15000 vuruş olacaktır. Diğer tüm örneklerde olduğu gibi her biri yaklaşık 1,7 Gg (eğer 8 bayta çift ise)

Genel olarak, ne yazık ki, python int ile nasıl çalışacağını bilmez - görünüşe göre onu double'a dönüştürür.

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

Genel olarak, ne yazık ki, python int ile nasıl çalışacağını bilmiyor - görünüşe göre onu double'a dönüştürüyor.

Saçma sapan spam yapmayı bırakın. İnt cinsinden korelasyon sayılmaz.

 
Maxim Dmitrievsky #:

Saçmalamayı bırak. İnt cinsinden korelasyon sayılmaz.

Amerika'yı açmanıza gerek yok. Saymak yaygın değil ama nasıl yapılabileceğini düşünmeye değer.

 
Aleksey Vyazmikin #:

Amerika'nın keşfedilmesine gerek yok. Bunu düşünmek pek yaygın değil ama nasıl yapılabileceğini düşünmeye değer.

Yeni bir başlıkta, bir şeyler düşünün

 
Maxim Dmitrievsky #:

yeni bir başlıkta

Ne biçim insanlar. Onun için zaman harcamaya gidiyorum ve o kaba davranıyor.

Bu da ne böyle?

 
Aleksey Vyazmikin #:

Amerika'nın keşfedilmesine gerek yok. Bunu düşünmek pek yaygın değil ama nasıl yapılabileceğini düşünmeye değer.

Yolu zaten tarif etmiştim - Alglib f-iys'i alın (PearsonCorrM'den çağrılan 8 parça var) ve veri türlerini değiştirin. 1 byte uchar'da bile. 4 baytlık ints çok fazla kazanç sağlamayacaktır.
Gerekirse kendiniz yapın.