julia - Interpolations.jl为向量抛出“ERROR:InexactError()”,而不是为了点

时间:2016-02-13 18:24:34

标签: interpolation julia bspline

我正在插入2d矩阵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 - 优胜美地。朱莉娅版本0.4.3

1 个答案:

答案 0 :(得分:1)

说起来有点难,因为我不知道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]

(如果你在全球范围内运行它,你需要Float64;如果你把它放在一个函数中,你就不应该需要它。)

至少在我测试的情况下,错误是由julia产生的,而不是插值;问题是在julia中支持向量索引,并且它希望您使用整数值索引。这可能(或可能不)在julia-0.5中发生变化。这通过使用理解来绕过矢量索引。