トレーディングにおける機械学習:理論、モデル、実践、アルゴトレーディング - ページ 3260

 
Aleksey Vyazmikin #:
15000 * 100 * 4 バイト / 1024 / 1024 5.72 MB

これが入力行列である。
出力は15000行ずつになる。他の例と同様、約1.7Ggとなる(8バイトで2倍した場合)。

 
Forester #:

これが入力マトリックスである。
出力は、15000行それぞれに15000ストロークとなる。他の例と同様、それぞれ約1.7Gg(Double by 8バイトの場合)。

これがカウント方法でないことは同意する。

 
fxsaber #:

今のところ、簡単な家庭用マシンで100万×100万の 行列を計算する技術的な障害は見当たらない。しかし、NumPyとMQL5の比較は私にとって非常に重要である。

本当ですか


例えば、50,000 列/100行の入力行列は、50,000 x 50, 000 x 8バイト / (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)));
}


MQL5とNumPyの計算値の完全一致。

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

これが入力マトリックスである。
出力は、15000行それぞれに15000ストロークとなる。他の例と同様、それぞれ約1.7Gg(Double by 8バイトの場合)。

一般的に、残念なことに、pythonはintを扱う方法を知りません - 明らかにdoubleに変換します。

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を扱う方法を知らない。

どうやらdoubleに変換するようだ。intでの相関はカウントされません。

 
Maxim Dmitrievsky #:

でたらめなスパムはやめろ。intsでの相関はカウントされない。

アメリカを開く必要はない。カウントするのは一般的ではないが、どうすればできるかを考える価値はある。

 
Aleksey Vyazmikin #:

アメリカは発見される必要はない。考えることは一般的ではないが、どうすればそれができるかを考える価値はある。

新しいスレッドで、何かを考える

 
Maxim Dmitrievsky #:

新しいスレッドで

なんて人たちなんだ。彼のために時間を無駄にしに行ったら、失礼なことを言われた。

何なんだ...

 
Aleksey Vyazmikin #:

America doesn't need to be discovered.考えることは一般的ではないが、どうすればそれができるかを考える価値はある。

私はすでにその方法を説明しました - Alglibのf-iys(PearsonCorrMから呼び出される8つの部分があります)を取り、データ型を変更します。Even in 1 byte uchar.4バイトのintsではあまり大きな効果は得られません。
必要であれば自分でやってみてください。
理由: