Хороший и простой способ интерполировать - использовать радиальные базисные функции. Он работает в 2-х и 3-х измерениях.
Если вы используете Python и устанавливаете несколько модулей, таких как numpy, scipy и matplotlib (или вместо Anaconda , он несет их все ), тогда реализация могла бы выглядеть так (корректность не проверена полностью).
import numpy as np
from scipy.interpolate import Rbf
import matplotlib
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import pandas as pd
import matplotlib.cm as cm
# data read from csv files
source = 'source.csv'
target = 'target.csv'
# create a pandas dataframe for each file
# pandas used here so that a huge dataset can be handled easily
df = pd.read_csv(source, names=['xs', 'ys', 'zs', 'ts'])
df1 = pd.read_csv(target, names=['xt', 'yt', 'zt'])
# convert the data to numbers
xs = df['xs'].values
ys = df['ys'].values
zs = df['zs'].values
ts = df['ts'].values
xt = df1['xt'].values
yt = df1['yt'].values
zt = df1['zt'].values
# create a radial basis function interpolant
# works in 2D and 3D
rbf = Rbf(xs, ys, zs, ts)
# evaluate the interpolated function at the new locations
T = rbf(xt, yt, zt)
# plot the result
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(111, projection='3d')
# plot the newly interpolated points (bigger dots)
ax.scatter(xt, yt, zt, c=T, cmap=cm.jet, vmin=1.3, vmax=2.4, s=300)
# plot the original data (smaller dots)
ax.scatter(xs, ys, zs, c=ts, cmap=cm.jet, vmin=1.3, vmax=2.4, s=100)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
введите описание изображения здесь