Как интерполировать данные из неравномерно распределенного массива в Julia? - PullRequest
2 голосов
/ 30 января 2020

Как я могу построить интерполяцию неравномерно распределенных данных в Джулии, используя интерполяцию ближайшего соседа? Я посмотрел на документацию и набрал в REPL следующее:

using Interpolations
input = [1.0 60; 1.1 0; 2.0 60; 2.3 0; 4.0 430; 4.05 0]
itp   = interpolate(input[:,1], input[:,2], Gridded(Constant()))

Что мне показалось простым, но дает:

ОШИБКА: LoadError : MethodError: нет метода, соответствующего интерполяции (:: Array {Float64,1}, :: Array {Float64,1}, :: Gridded {Constant})

Нужно ли преобразовывать Array с Vector с? Если так, то как? Пожалуйста, скажите мне, что есть простое решение ...

1 Ответ

4 голосов
/ 30 января 2020

Когда вы находитесь в N -мерном пространстве, вы должны поместить координаты интерполяционных "узлов" в N -кортеже векторов. В 1-D это означает 1-кортеж типа (x,) вместо простого x:

julia> input = [1.0 60; 1.1 0; 2.0 60; 2.3 0; 4.0 430; 4.05 0]
6×2 Array{Float64,2}:
 1.0    60.0
 1.1     0.0
 2.0    60.0
 2.3     0.0
 4.0   430.0
 4.05    0.0

julia> x = input[:, 1];
julia> y = input[:, 2];
julia> itp = interpolate((x,), y, Gridded(Constant()))
6-element interpolate((::Array{Float64,1},), ::Array{Float64,1}, Gridded(Constant())) with element type Float64:
  60.0
   0.0
  60.0
   0.0
 430.0
   0.0

julia> itp(1.01)
60.0
...