交易中的机器学习:理论、模型、实践和算法交易 - 页 3258 1...325132523253325432553256325732583259326032613262326332643265...3399 新评论 Forester 2023.09.25 20:46 #32571 fxsaber #: 由于这条线路,消耗量几乎翻了一番。 这只是从CMatrixDouble 到matrix<double> 的过渡。 由于内存原因,我甚至不得不进行矩阵比较。 而这次转换的时间增加了 40%。注释 // Res = MatrixOut.ToMatrix(); matrix<double> Matrix1 = CorrMatrix(Matrix) - 10482307 mcs, 0 MB matrix<double> Matrix2 = Matrix.CorrCoef(false) - 28882536 mcs, 1717 MB 也就是说,如果只使用 Alglibov fnctional(不将其矩阵转换为终端矩阵),速度会更快。 Maxim Dmitrievsky 2023.09.26 01:04 #32572 fxsaber #:Python 计算与上例相同大小的原始矩阵需要多长时间? import numpy as np import time def calc_corr_matrix(): arr = np.random.rand(15000, 100).astype(np.float32) corr_matrix = np.corrcoef(arr) size_in_mb = corr_matrix.nbytes / 1024**2 print("Array size:", size_in_mb, "MB") return corr_matrix 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: 2.08686900138855 seconds 考虑创建矩阵的时间测量 Maxim Dmitrievsky 2023.09.26 01:32 #32573 扔掉你的石头 ) Aleksey Vyazmikin 2023.09.26 05:19 #32574 Maxim Dmitrievsky #:考虑到矩阵创建的时间测量 Array size: 1716.61376953125 MB Time taken: 4.784467697143555 seconds 这是在一台老式 FX-8350 上进行的。 Aleksey Vyazmikin 2023.09.26 05:37 #32575 fxsaber #:在此基础上,我计算了相关矩阵。测量了性能。 统计结果如下 2023.09.26 06:28:23.304 Test_Corr (USDJPY,H1) EX5: 3981 AVX Release. 2023.09.26 06:28:23.304 Test_Corr (USDJPY,H1) TerminalInfoString(TERMINAL_CPU_NAME) = AMD FX-8350 Eight-Core 2023.09.26 06:28:23.304 Test_Corr (USDJPY,H1) TerminalInfoInteger(TERMINAL_CPU_CORES) = 8 2023.09.26 06:28:23.304 Test_Corr (USDJPY,H1) TerminalInfoString(TERMINAL_CPU_ARCHITECTURE) = AVX 2023.09.26 06:28:23.332 Test_Corr (USDJPY,H1) inRows = 100 inCols = 15000 2023.09.26 06:28:45.032 Test_Corr (USDJPY,H1) matrix<double> Matrix1 = CorrMatrix(Matrix) - 21700095 mcs, 1717 MB 2023.09.26 06:29:48.495 Test_Corr (USDJPY,H1) matrix<double> Matrix2 = Matrix.CorrCoef(false) - 63460976 mcs, 1717 MB 2023.09.26 06:29:50.225 Test_Corr (USDJPY,H1) IsEqual(Matrix1, Matrix2) = true 2023.09.26 06:34:21.572 Test_Corr (USDJPY,H1) EX5: 3981 X64 Regular Release. 2023.09.26 06:34:21.572 Test_Corr (USDJPY,H1) TerminalInfoString(TERMINAL_CPU_NAME) = AMD FX-8350 Eight-Core 2023.09.26 06:34:21.572 Test_Corr (USDJPY,H1) TerminalInfoInteger(TERMINAL_CPU_CORES) = 8 2023.09.26 06:34:21.572 Test_Corr (USDJPY,H1) TerminalInfoString(TERMINAL_CPU_ARCHITECTURE) = AVX 2023.09.26 06:34:21.600 Test_Corr (USDJPY,H1) inRows = 100 inCols = 15000 2023.09.26 06:34:42.908 Test_Corr (USDJPY,H1) matrix<double> Matrix1 = CorrMatrix(Matrix) - 21308403 mcs, 1717 MB 2023.09.26 06:35:46.736 Test_Corr (USDJPY,H1) matrix<double> Matrix2 = Matrix.CorrCoef(false) - 63826475 mcs, 1717 MB 2023.09.26 06:35:48.481 Test_Corr (USDJPY,H1) IsEqual(Matrix1, Matrix2) = true 显然Python 要快得多 。这意味着 C 语言也会更快,所以事实证明 MQ 并没有告诉我们什么,它承诺的性能相当....。 我应该注意的是,Python 在运行代码时有一个小的并行化过程--大约两个核心运行半秒,其余的都在一个核心上运行。 Maxim Dmitrievsky 2023.09.26 06:41 #32576 NumPy 库用 C 语言编写 Aleksey Vyazmikin 2023.09.26 06:43 #32577 Maxim Dmitrievsky #: NumPy 库是用 C 语言编写的。 嗯,是的,有道理。这就是为什么我提到 Python 封装器比 MQL5 这样的 C 编译器更快的原因。 Aleksey Vyazmikin 2023.09.26 06:45 #32578 这里的 R ChatGPT 提供 set.seed(123) # Задаем зерно для воспроизводимости результатов calc_corr_matrix <- function() { #arr <- matrix(runif(15000 * 100), nrow = 15000, ncol = 100) arr <- matrix(runif(100 * 15000), nrow = 100, ncol = 15000) corr_matrix <- cor(arr) size_in_mb <- object.size(corr_matrix) / 1024^2 cat("Array size:", size_in_mb, "MB\n") return(corr_matrix) } start_time <- Sys.time() corr_matrix <- calc_corr_matrix() end_time <- Sys.time() cat("Time taken:", as.numeric(end_time - start_time), "seconds\n") 比赛结果 > set.seed(123) # Задаем зерно для воспроизводимости результатов > calc_corr_matrix <- function() { + #arr <- matrix(runif(15000 * 100), nrow = 15000, ncol = 100) + arr <- matrix(runif(100 * 15000), nrow = 100, .... [TRUNCATED] > start_time <- Sys.time() > corr_matrix <- calc_corr_matrix() Array size: 1716.614 MB > end_time <- Sys.time() > cat("Time taken:", as.numeric(end_time - start_time), "seconds\n") Time taken: 27.92359 seconds > Aleksey Vyazmikin 2023.09.26 07:11 #32579 据我所知,python 可以处理整数矩阵,而这里的速度与这里的顺序不同 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, rowvar=False) 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: 0.0762939453125 MB Time taken: 0.5172276496887207 seconds 应检查计算结果本身的准确性/可比性问题。 fxsaber 2023.09.26 07:23 #32580 fxsaber #:这只是从CMatrixDouble 到matrix<double> 的过渡。 两种格式的转换需要多花费 20% 的执行时间。但它仍然比 NumPy 慢得多(> 3 倍)。 1...325132523253325432553256325732583259326032613262326332643265...3399 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
由于这条线路,消耗量几乎翻了一番。
这只是从CMatrixDouble 到matrix<double> 的过渡。 由于内存原因,我甚至不得不进行矩阵比较。
而这次转换的时间增加了 40%。注释 // Res = MatrixOut.ToMatrix();
也就是说,如果只使用 Alglibov fnctional(不将其矩阵转换为终端矩阵),速度会更快。
Python 计算与上例相同大小的原始矩阵需要多长时间?
考虑创建矩阵的时间测量
扔掉你的石头 )
考虑到矩阵创建的时间测量
这是在一台老式 FX-8350 上进行的。
在此基础上,我计算了相关矩阵。
测量了性能。
统计结果如下
我应该注意的是,Python 在运行代码时有一个小的并行化过程--大约两个核心运行半秒,其余的都在一个核心上运行。
NumPy 库是用 C 语言编写的。
嗯,是的,有道理。这就是为什么我提到 Python 封装器比 MQL5 这样的 C 编译器更快的原因。
这里的 R ChatGPT 提供
比赛结果
据我所知,python 可以处理整数矩阵,而这里的速度与这里的顺序不同
如果代码正确,结果如下
应检查计算结果本身的准确性/可比性问题。
这只是从CMatrixDouble 到matrix<double> 的过渡。
两种格式的转换需要多花费 20% 的执行时间。但它仍然比 NumPy 慢得多(> 3 倍)。