gpt4 book ai didi

function - Julia :如何最佳地声明包含插值的向量?

转载 作者:行者123 更新时间:2023-12-01 23:27:11 27 4
gpt4 key购买 nike

我是一名经济学专业的学生,​​正在慢慢从 MATLAB 转向 Julia。

目前,我的问题是我不知道如何声明(预分配)可以存储插值的向量。

具体来说,当我执行以下操作时:

function MyFunction(i)
# x, y vectors are some functions of 'i' defined here
f = LinearInterpolation(x,y,extrapolation_bc=Line())
return f
end

g = Vector{Function}(undef, N)

for i = 1:N
g[i] = MyFunction(i)
end

我得到:

ERROR: LoadError: MethodError: Cannot `convert` an object of type Interpolations.Extrapolation{Float64,1,Interpolations.GriddedInterpolation{Float64,1,Float64,Gridded{Linear},Tuple{Array{Float64,1}}},Gridded{Linear},Line{Nothing}} to an object of type Function

如果我声明 g=zeros(N) 而不是 g=Vector{Function}(undef, N),我会收到类似的错误消息(结束with with ...Float64 而不是 with ... Function).

相反,当我声明时:

g = Interpolations.Extrapolation{Float64,1,Interpolations.GriddedInterpolation{Float64,1,Float64,Gridded{Linear},Tuple{Array{Float64,1}}},Gridded{Linear},Line{Nothing}}(N)

我得到:

LoadError: MethodError: no method matching Interpolations.Extrapolation{Float64,1,Interpolations.GriddedInterpolation{Float64,1,Float64,Gridded{Linear},Tuple{Array{Float64,1}}},Gridded{Linear},Line{Nothing}}(::Int64) Closest candidates are: Interpolations.Extrapolation{Float64,1,Interpolations.GriddedInterpolation{Float64,1,Float64,Gridded{Linear},Tuple{Array{Float64,1}}},Gridded{Linear},Line{Nothing}}(::Any, !Matched::Any) where {T, N, ITPT, IT, ET}

当我根本不声明“g”时,我得到:

ERROR: LoadError: UndefVarError: g not defined

最后,当我声明:

g = Vector{Any}(undef, N)

代码有效,但我担心这可能会导致变量 g 发生某种类型更改,从而降低我对性能敏感的代码的速度。

在这种情况下,理想情况下,我应该如何声明 g

编辑:实际上,我的问题有点复杂,更像下面这样:

function MyFunction(i)
# x, y vectors are some functions of 'i' defined here
f = LinearInterpolation(x,y,extrapolation_bc=Line())
h = is a T-vector of some functions of x,y
A = is some matrix depending on x,y
return h, A, f
end

h = Matrix{Function}(undef, T, N)
A = zeros(T,I,N)
g = Vector{Any}(undef, N)

for i = 1:N
h[:,i], A[:,:,i], g[i] = MyFunction(i)
end

因此,当我使用理解或广播时(例如 h, A, g = [MyFunction(i) for i in 1:N]h, A, g = MyFunction .(1:N)),正如用户 Benoit 和 DNS 在下面建议的那样,我的函数的输出是 3 个元组 h、A、g,每个包含 {h[i]、A[i]、g[ i]} 对于 i=1,2,3。相反,如果我在 LHS 上只使用 1 个输出变量,即:MyOutput = [MyFunction(i) for i in 1:N]MyOutput[i] = MyFunction.(1: N),那么MyOutput就变成了一个有N个元组项的向量,每个元组由{h[i], A[i], g[i]} i=1,2组成, 3,...,N。我打赌有一种方法可以从 MyOutput 中的元组中提取这些元素并将它们填充到 h[:,i], A[:,:,i], g[i],但这似乎有点麻烦和缓慢。

最佳答案

你可以做

f = MyFunction(1)
g = Vector{typeof(f)}(undef, N)
g[1] = f

for i = 2:N
g[i] = MyFunction(i)
end

我认为 map 也应该找出类型:

map(MyFunction, 1:N)

关于function - Julia :如何最佳地声明包含插值的向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67045776/

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