Я думаю, что scipy.interpolate
может делать то же самое (или, по крайней мере, похоже), что и MATLAB Griddata .Приведенный ниже код использует радиальную базовую функцию для интерполяции.Я сделал только пример для вашего столбца 3 в качестве оси Z.
import numpy as np
from scipy import interpolate
import matplotlib.pyplot as plt
x = np.array([60] * 10 + [70] * 6)
y = np.array([0,5,10,15,20,25,30,35,40,50,0,5,10,15,20,25])
z = np.array([23.88, 19.508, 16.9, 15.4, 14.4, 13.66, 13.14, 12.69, 12.53, 12.33, 19.3, 16.06, 13.74, 12.33, 11.45, 10.77])
x_ticks = np.linspace(60, 70, 11)
y_ticks = np.linspace(0, 50, 51)
XI, YI = np.meshgrid(x_ticks, y_ticks)
rbf = interpolate.Rbf(x, y, z, epsilon=2)
ZI = rbf(XI, YI)
print(ZI[np.argwhere(y_ticks==12)[0][0], np.argwhere(x_ticks==65)[0][0]])
>>> 14.222288614849171
Имейте в виду, что результатом будет ZI[y,x]
, а не ZI[x,y]
.Также помните, что ваши тики должны содержать запрашиваемые вами значения x и y, в противном случае вы получите IndexError.
Возможно, вы сможете использовать это решение в зависимости от ваших потребностей.