Reputation: 956
I have two arrays of Float64: arr_x
and arr_y
. I have a 2D array arr_z
storing some function z(x,y) computed on the set of points (x,y) with x
in arr_x
, y
in arr_y
.
How can I do a 2D interpolation of arr_z
using arr_x
and arr_y
? That is, I would like a function itp_z(x,y)
which does the equivalent of linear interpolation but now in 2D on the array arr_z.
Upvotes: 5
Views: 4047
Reputation: 3015
Interpolations.jl should work for that:
using Interpolations, Plots
# Data
x = range(-2, 3, length=20)
y = range(3, 4, length=10)
z = @. cos(x) + sin(y')
# Interpolation object (caches coefficients and such)
itp = LinearInterpolation((x, y), z)
# Fine grid
x2 = range(extrema(x)..., length=300)
y2 = range(extrema(y)..., length=200)
# Interpolate
z2 = [itp(x,y) for y in y2, x in x2]
# Plot
p = heatmap(x2, y2, z2, clim=(-2,2), title="Interpolated heatmap")
scatter!(p, [x for _ in y for x in x], [y for y in y for _ in x], zcolor=z[:]; lab="original data", clim=(-2,2))
Upvotes: 4