в Python Я хочу интерполировать некоторые данные, используя scipy.interpolate.griddata(x, y, z, xi, yi).
Поскольку я хочу, чтобы мои неравномерные исходные данные на карте сетки X- Y на сетке YI с равным интервалом XI-, я должен использовать meshgrid как:
X, Y = numpy.meshgrid([1,2,3], [2,5,6,8])
XI,YI = numpy.meshgrid([1,2,3],[4,5,6,7])
print scipy.interpolate.griddata(X,Y,X**2+Y**2,XI,YI)
К сожалению, похоже, что griddata от scipys не принимает матрицы как входные данные для x, y, z в отличие от функции matlab griddata-. Кто-нибудь подскажет мне, как решить проблему?
Правильная последовательность вызовов в вашем случае
print scipy.interpolate.griddata((X.ravel(),Y.ravel()), (X**2+Y**2).ravel(), (XI, YI))
I.e., вам нужно указать точки входных данных на 1- d. (Это может быть исправлено для работы без .ravel()
в следующей версии Scipy.)
Я думаю, вам нужно изменить ваши сетки, griddata ожидает список точек с координатами в форме столбца:
points = transpose(reshape((X,Y), (2,12)))
pointsI = transpose(reshape((XI,YI), (2,12)))
Z = reshape(X**2+Y**2, 12)
print scipy.interpolate.griddata(points, Z, pointsI)