交易中的机器学习:理论、模型、实践和算法交易 - 页 3260

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

这是输入矩阵。
输出将是 15000 行,每行 15000 行。与所有其他示例一样,大约为 1.7 Gg(如果按 8 字节加倍)。

 
Forester #:

这是输入矩阵。
输出将是 15000 行中每行的 15000 笔。与所有其他示例一样,每行约 1.7 千兆字节(如果是 8 字节的双倍)。

我同意不是这样计算的。

 
fxsaber #:

到目前为止,我还没有发现在一台简单的家用机上计算百万乘百万 矩阵有任何技术障碍。但 NumPy 与 MQL5 的比较对我来说非常重要。

你确定吗?


例如,一个50,000 列/100 行的输入矩阵将产生一个 50,000x 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)));
}


NumPy 计算值与 MQL5 完全一致。

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

这是输入矩阵。
输出将是 15000 行中每行的 15000 笔。与所有其他示例一样,每行约 1.7 千兆字节(如果是 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 #:

一般来说,python 不知道如何处理 int,它显然会将其转换为 double。

别再垃圾邮件了。ints 中的相关性不算数。

 
Maxim Dmitrievsky #:

别再胡说八道了。ints 中的相关性不算数。

你不需要打开美国。虽然算数不常见,但怎么算还是值得思考的。

 
Aleksey Vyazmikin #:

美国不需要被发现。这种想法并不常见,但值得思考如何才能做到。

在新的主题中,想一想

 
Maxim Dmitrievsky #:

在新的主题中,提出

真是一群人--我去为他浪费时间,他却很粗鲁。

搞什么鬼...

 
Aleksey Vyazmikin #:

美国不需要被发现。这种想法并不常见,但值得思考如何才能做到。

我已经介绍过一种方法--使用 Alglib f-iys(有 8 件从 PearsonCorrM 调用)并改变数据类型。即使是 1 字节的 uchar。4 字节的 ints 也不会带来多少好处。
如果需要的话,自己动手做吧。
原因: