트레이딩의 머신러닝: 이론, 모델, 실전 및 알고리즘 트레이딩 - 페이지 3260

 
Aleksey Vyazmikin #:
15000 * 100 * 4 바이트 / 1024 / 1024 5.72 MB

이것이 입력 행렬입니다.
출력은 15000행 각각에 대해 15000행이 됩니다. 다른 모든 예제에서와 마찬가지로 약 1.7Gg입니다(8바이트로 두 배인 경우).

 
Forester #:

이것이 입력 행렬입니다.
출력은 15000개의 행 각각에 대한 15000개의 스트로크가 됩니다. 다른 모든 예제에서와 마찬가지로 각각 약 1.7Gg(더블 8바이트인 경우)

나는 이것이 계산 방식이 아니라는 데 동의합니다.

 
fxsaber #:

지금까지는 간단한 가정용 컴퓨터에서 백만 단위 행렬을 계산하는 데 기술적 장애물은 보이지 않습니다. 하지만 NumPy와 MQL5의 비교는 저에게 매우 중요합니다.

확실하신가요 ?


예를 들어 50,000개의 열/100개의 행이 있는 입력 행렬은 50 ,000 x 50 ,000 x 8바이트/(1024 x 1024 x 1024) = 18.63GB의 상관 행렬을 제공합니다.

 
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 계산 값과 MQL5가 완전히 일치합니다.

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

이것이 입력 행렬입니다.
출력은 15000개의 행에 대해 15000개의 스트로크가 됩니다. 다른 모든 예제에서와 마찬가지로 각각 약 1.7Gg(더블 8바이트인 경우)

일반적으로 아쉽게도 파이썬은 int로 작업하는 방법을 모릅니다. 분명히 두 배로 변환합니다.

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

일반적으로 아쉽게도 파이썬은 int로 작업하는 방법을 모르기 때문에 이를 두 배로 변환합니다.

스팸성 쓰레기는 그만 보내세요. 정수의 상관관계는 중요하지 않습니다.

 
Maxim Dmitrievsky #:

헛소리는 그만하세요. 인트 단위의 상관관계는 중요하지 않습니다.

미국을 열 필요는 없습니다. 계산하는 것이 일반적이지는 않지만 어떻게 할 수 있는지 생각해 볼 가치가 있습니다.

 
Aleksey Vyazmikin #:

미국은 발견할 필요가 없습니다. 고려하는 것이 일반적이지는 않지만 어떻게 할 수 있는지 생각해 볼 가치가 있습니다.

새 스레드에서 다음 사항을 생각해 보세요.

 
Maxim Dmitrievsky #:

새 스레드에서

정말 많은 사람들 - 나는 그를 위해 시간을 낭비하러 갔고 그는 무례합니다.

도대체 뭐야...

 
Aleksey Vyazmikin #:

미국은 발견할 필요가 없습니다. 고려하는 것이 일반적이지는 않지만 어떻게 할 수 있는지 생각해 볼 가치가 있습니다.

나는 이미 방법을 설명했습니다 - Alglib f-iys (PearsonCorrM에서 호출 된 8 개가 있음)를 가져 와서 데이터 유형을 변경하십시오. 1 바이트 uchar에서도. 4바이트 정수로도 큰 이득은 없습니다.
필요한 경우 직접 해보세요.
사유: