Øyv*_*rud 6 performance r julia
我试图通过将 R 函数移植到 Julia 来加速它,但令我惊讶的是 Julia 速度较慢。该函数按顺序更新向量列表(Julia 中的数组数组)。事先要更新的列表元素的索引是未知的,新向量的长度是未知的。我编写了一个测试函数来演示该行为。
朱莉娅
function MyTest(n)
a = [[0.0] for i in 1:n]
for i in 1:n
a[i] = cumsum(ones(i))
end
a
end
Run Code Online (Sandbox Code Playgroud)
电阻
MyTest <- function(n){
a <- as.list(rep(0, n))
for (i in 1:n)
a[[i]] <- cumsum(rep(1, i))
a
}
Run Code Online (Sandbox Code Playgroud)
通过将 n 设置为 5000、10000 和 20000,典型的计算时间为(21 次测试的中位数):
我使用了带有 64 位 Julia-1.3.1 和 64 位 R-3.6.1 的 Windows 笔记本电脑。
这两个函数都使用 64 位浮点类型。我真正的问题涉及整数,然后 R 更有利。但是整数比较是不公平的,因为 R 使用 32 位整数和 Julia 64 位。在这种情况下,我可以做些什么来加快 Julia 的速度,还是真的 Julia 比 R 慢得多?
也许 R 正在为这样简单的函数做某种类型的缓冲?
\n\n这是带缓冲的 Julia 版本:
\n\nusing Memoize\n@memoize function cumsum_ones(i)\n cumsum(ones(i))\nend\nfunction MyTest2(n)\n a = Vector{Vector{Float64}}(undef, n)\n for i in 1:n\n a[i] = cumsum_ones(i)\n end\n a\nend\nRun Code Online (Sandbox Code Playgroud)\n\n在热身函数中,计时如下:
\n\njulia> @btime MyTest2(5000);\n 442.500 \xce\xbcs (10002 allocations: 195.39 KiB)\n\njulia> @btime MyTest2(10000);\n 939.499 \xce\xbcs (20002 allocations: 390.70 KiB)\n\njulia> @btime MyTest2(20000);\n 3.554 ms (40002 allocations: 781.33 KiB)\nRun Code Online (Sandbox Code Playgroud)\n