2016-02-13 50 views
2

我插了一個二維矩陣J朱莉婭 - Interpolations.jl拋出「ERROR:InexactError()」爲載體,而不是點

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 

我可以,但是,插值使用我的輸入下半部哪裏等於一。所以它不可能是一個類型問題(據我所知)。

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 - 優勝美地。 Julia version 0.4.3

回答

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中支持向量索引,它希望你使用整數值索引。這可能(或可能不)在茱莉亞-0.5中改變。這通過使用理解繞過向量索引。

+0

Thanks @tholy,這很有幫助。但是現在我很想知道插值github頁面上的例子是如何工作的('fine = itp [linspace(1,10,1001),linspace(1,15,201)]')。有什麼原因可以在github示例中插入非整數向量,而不是在此處提供的示例中? – benten

+0

你可以在插值中打開一個問題嗎? – tholy

+1

對於任何未來的觀衆,問題在這裏:https://github.com/tlycken/Interpolations.jl/issues/106 – benten