2016-02-13 2 views
2

Я интерполирования над 2d матрица J:джулия - Interpolations.jl броски «ОШИБКА: 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 - yosemite. Julia версия 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, а не Interpolations; проблема в том, что индексация по векторам поддерживается в julia, и она хочет, чтобы вы использовали индексы с целочисленным значением. Это может (или не может) измениться в julia-0.5. Это обходит векторную индексацию, используя понимание.

+0

Спасибо @tholy, это полезно. Но теперь мне любопытно узнать, как работает пример на странице gitub Interpolations ('fine = itp [linspace (1,10,1001), linspace (1,15,201)] '). Есть ли причина, по которой я могу интерполировать нецелые векторы в примере github, а не в примере, который вы здесь указываете? – benten

+0

Можете ли вы открыть вопрос в Interpolations? – tholy

+1

Для будущих зрителей проблема здесь: https://github.com/tlycken/Interpolations.jl/issues/106 – benten

Смежные вопросы