gpt4 book ai didi

templates - "Templated" Julia 的功能

转载 作者:行者123 更新时间:2023-12-01 12:18:56 29 4
gpt4 key购买 nike

我有一个本质上充当查找表的函数:

function lookup(a::Int64, x::Float64, y::Float64)

if a == 1
z = 2*x + y
else if a == 2
z = 5*x - 2*y
else if a == 3
...
end

return z

end

变量a 本质上决定了z 的关系。

然而,这个函数需要一段时间来编译,而且在运行时也不是最有效的。

你能为 a 的一个实例(比如 a=1)编译函数 lookup 吗?此函数不太可能调用 a 的所有可能函数。

我相信这样的功能类似于 C++ 中的模板化函数。

最佳答案

Julia 的编译器只能根据参数的类型进行分派(dispatch),而不能分派(dispatch)它们的值,因为该值仅在运行时已知。您可以通过创建一个“值类型”来作弊,其中变量的不同值充当不同的类型:

lookup(::Type{Val{1}}, x, y) = 2x+y
lookup(::Type{Val{2}}, x, y) = 5x-2y
a = 2
lookup(Val{a}, 2, 3)
# 4

如果你想使用这种方法,你应该阅读 https://docs.julialang.org/en/stable/manual/performance-tips/#Types-with-values-as-parameters-1首先,确保它不会造成类型稳定性问题。

关于templates - "Templated" Julia 的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45972534/

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