julia - Interpolations.jl throws "ERROR: InexactError()" for vector, not for point
julia - Interpolations.jl throws "ERROR: InexactError()" for vector, not for point
我正在对二维矩阵进行插值 J
:
J_itp = interpolate(J, (BSpline(Linear()), NoInterp()), OnGrid())
如您所见,我只是在第一维进行插值。第二维必须在网格上。我有一个要插入的点向量。
julia> Np_args[1,67:73]
1x7 Array{Float64,2}:
1.0 1.0 1.0 1.0 1.01394 1.03275 1.0517
我这样调用插值函数:
J_itp[ Np_args[1,67:73], 1]
并得到以下错误
ERROR: InexactError()
in trunc at /Applications/Julia- 0.4.3.app/Contents/Resources/julia/lib/julia/sys.dylib
[inlined code] from /Users/btengels/.julia/v0.4/Interpolations/src/b-splines/linear.jl:6
in getindex at /Users/btengels/.julia/v0.4/Interpolations/src/b-splines/indexing.jl:39
但是,我可以使用输入的下半部分等于 1 进行插值。所以这不可能是类型问题(据我所知)。
julia> J_itp[ Np_args[1,67:70], 1]
4-element Array{Float64,1}:
0.75366
0.75366
0.75366
0.75366
当我包含任何大于 1.0 的点时,事情会崩溃,如第一个示例中所示。但是,我可以自己在其中一个故障点进行插值。
julia> J_itp[ Np_args[1,71], 1]
0.753702904230203
但是如果在 J_itp[ Np_args[1,71]*ones(3,1), 1]
中的数组中,事情会像以前一样崩溃。
这是一个错误还是我做错了什么?最近安装了 Pkg.add("Interpolations")
、OSX - yosemite。 Julia 版本 0.4.3
有点难说,因为我不知道 J
有什么元素类型,因此没有足够的信息来重构你的问题。但是,我能够从
触发 InexactError
julia> J = rand(1:10, 100,100);
julia> J_itp = interpolate(J, (BSpline(Linear()), NoInterp()), OnGrid());
julia> J_itp[rand(5)+10, 1]
ERROR: InexactError()
in to_index at deprecated.jl:454
in _unsafe_getindex at multidimensional.jl:192
in getindex at abstractarray.jl:488
但这行得通:
Float64[J_itp[x, 1] for x in rand(5)+10]
(如果你在全局范围内 运行 this,你需要 Float64
;如果你把它放在一个函数中,你不应该需要它。)
至少在我测试的情况下,错误是由 julia 产生的,而不是插值;问题是 julia 支持向量索引,它希望您使用整数值索引。这可能会(也可能不会)在 julia-0.5 中改变。这通过使用理解绕过了向量索引。
我正在对二维矩阵进行插值 J
:
J_itp = interpolate(J, (BSpline(Linear()), NoInterp()), OnGrid())
如您所见,我只是在第一维进行插值。第二维必须在网格上。我有一个要插入的点向量。
julia> Np_args[1,67:73]
1x7 Array{Float64,2}:
1.0 1.0 1.0 1.0 1.01394 1.03275 1.0517
我这样调用插值函数:
J_itp[ Np_args[1,67:73], 1]
并得到以下错误
ERROR: InexactError()
in trunc at /Applications/Julia- 0.4.3.app/Contents/Resources/julia/lib/julia/sys.dylib
[inlined code] from /Users/btengels/.julia/v0.4/Interpolations/src/b-splines/linear.jl:6
in getindex at /Users/btengels/.julia/v0.4/Interpolations/src/b-splines/indexing.jl:39
但是,我可以使用输入的下半部分等于 1 进行插值。所以这不可能是类型问题(据我所知)。
julia> J_itp[ Np_args[1,67:70], 1]
4-element Array{Float64,1}:
0.75366
0.75366
0.75366
0.75366
当我包含任何大于 1.0 的点时,事情会崩溃,如第一个示例中所示。但是,我可以自己在其中一个故障点进行插值。
julia> J_itp[ Np_args[1,71], 1]
0.753702904230203
但是如果在 J_itp[ Np_args[1,71]*ones(3,1), 1]
中的数组中,事情会像以前一样崩溃。
这是一个错误还是我做错了什么?最近安装了 Pkg.add("Interpolations")
、OSX - yosemite。 Julia 版本 0.4.3
有点难说,因为我不知道 J
有什么元素类型,因此没有足够的信息来重构你的问题。但是,我能够从
InexactError
julia> J = rand(1:10, 100,100);
julia> J_itp = interpolate(J, (BSpline(Linear()), NoInterp()), OnGrid());
julia> J_itp[rand(5)+10, 1]
ERROR: InexactError()
in to_index at deprecated.jl:454
in _unsafe_getindex at multidimensional.jl:192
in getindex at abstractarray.jl:488
但这行得通:
Float64[J_itp[x, 1] for x in rand(5)+10]
(如果你在全局范围内 运行 this,你需要 Float64
;如果你把它放在一个函数中,你不应该需要它。)
至少在我测试的情况下,错误是由 julia 产生的,而不是插值;问题是 julia 支持向量索引,它希望您使用整数值索引。这可能会(也可能不会)在 julia-0.5 中改变。这通过使用理解绕过了向量索引。