Julia:在迭代过程中有固定值的方法吗?



我正在编写使用卡方拟合找到解决方案的代码。它包含很多参数和大量的方程,因此,时间成本很高。然而,有些方程和参数不需要在每次迭代时都计算(或读取)。在第一次迭代中只进行一次计算就足够了。为了减少时间成本,我想要固定值,而不是交换值。有什么方法或技巧可以达到这个目的吗?

我想你是在问如何通过缓冲已知结果来避免重新计算。这种技术被称为记忆。

这可以通过using Memoization:

实现
using Memoization
@memoize function myfunction(x)
sleep(0.5)
x .^ 2
end

让我们看看这是如何工作的:

julia> @time myfunction(1:3)
0.513210 seconds (6 allocations: 224 bytes)
3-element Vector{Int64}:
1
4
9
julia> @time myfunction(1:3)
0.000004 seconds
3-element Vector{Int64}:
1
4
9

可以看到对myfunction的后续调用使用了记忆缓冲区。

我认为除了两个循环之外没有其他方法。这可能很棘手,但您可以首先在主(第二)循环之外计算公式。然而,由于它只在第一次迭代,从技术上讲,你只有一个循环,因为只有一次迭代的循环基本上是无用的。然后,您可以在循环中使用它们。

#Calculate here
#loop here
...
...

最新更新