【问题标题】:Julia drawing from standard normal distributionJulia 从标准正态分布中绘图
【发布时间】:2020-01-20 23:21:25
【问题描述】:

我需要从标准正态分布中提取 53000000 个观察值。我当前的代码需要很长时间才能在 Julia 中运行(事实上,它已经运行了过去 20 分钟),我想知道是否有什么可以加快它的速度。这是我尝试过的:

using Distributions
d = Normal()
shock = rand(d, 1, 53000000)

当我在 REPL 中执行代码时(我在 Juno/Atom 中工作),代码会立即运行,但在我逐步使用调试器时会滞后(从标准法线绘制)。所以我认为调试器可能是这里真正的罪魁祸首。

【问题讨论】:

  • 它几乎可以立即运行,您可能需要提供更多信息(硬件、版本等)
  • 要提供该信息,请在 julia> 提示符处键入 versioninfo() 并将其复制到此处。
  • 或者(如果您的任务允许),您可以预先分配一个较小的块(例如,大小为 10000,或者理想情况下是一个完整的页面),并使用就地 randn! 重复对其进行重新采样.
  • 次要注意:rand(d, 1, N) 生成大小为 1xN 的矩阵。如果你打算生成一个向量,你可以写rand(d, N)。 (我之所以提到这一点,是因为我在来自 Matlab 的人中经常看到上述模式。)
  • 为什么你真的需要这么大的向量?您可以在需要以可重现的方式使用它们时凭空创建随机数。

标签: performance random julia normal-distribution juno-ide


【解决方案1】:

在加载调试器时,分配变量 shock 使用的 1/2 gig 内存有时会导致交换。

尝试在调试器中运行它来查看:

using Distributions, Base.Sys

println("Free memory is $(Int(Sys.free_memory()))")
d = Normal()
shock = rand(d, 1, 53000000)
println("shock uses $(sizeof(shock)) bytes.")
println("Free memory is $(Int(Sys.free_memory()))")

你在演出中快要内存不足了吗?

【讨论】:

  • 运行后我得到“可用内存为 1525129216”,而且“shock =”步骤一直没有挂起。也许我只是因为不相关的原因而内存不足。
猜你喜欢
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 2018-03-04
  • 2020-09-11
  • 1970-01-01
  • 2014-05-25
  • 2021-12-22
  • 1970-01-01
相关资源
最近更新 更多