gpt4 book ai didi

julia - 有效地循环遍历 Julia 中的结构

转载 作者:行者123 更新时间:2023-12-03 16:19:46 25 4
gpt4 key购买 nike

我有一个简单的问题。我已经定义了一个结构,我需要启动很多(以百万计)它们并循环它们。
我一次启动一个并按如下方式进行循环:

using Distributions

mutable struct help_me{Z<:Bool}
can_you_help_me::Z
millions_of_thanks::Z
end

for i in 1:max_iter
tmp_help = help_me(rand(Bernoulli(0.5),1)[1],rand(Bernoulli(0.99),1)[1])
# many follow-up processes
end
内存分配在 中按比例增加max_iter .出于我的目的,我不需要保存每个结构。有没有办法“重用”结构使用的内存分配?

最佳答案

你的主要问题在这里:

rand(Bernoulli(0.5),1)[1], rand(Bernoulli(0.99),1)[1]
您正在创建一个长度为 1 的数组,然后从该数组中读取第一个元素。这会分配不必要的内存并花费时间。不要在此处创建数组。相反,写
rand(Bernoulli(0.5)), rand(Bernoulli(0.99))
这只会创建随机标量数,而不是数组。
在这里比较时间:
julia> using BenchmarkTools

julia> @btime rand(Bernoulli(0.5),1)[1]
36.290 ns (1 allocation: 96 bytes)
false

julia> @btime rand(Bernoulli(0.5))
6.708 ns (0 allocations: 0 bytes)
false
快 6 倍,且无需分配内存。
这似乎是一个普遍的问题。我经常看到有人在写 rand(1)[1] , 当他们应该只使用 rand() .
另外,请考虑您是否真的需要制作结构 mutable ,正如其他人所提到的。

关于julia - 有效地循环遍历 Julia 中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65403410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com