Python griddata meshgrid

1

в 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-. Кто-нибудь подскажет мне, как решить проблему?

Теги:
scipy
interpolation
mesh

2 ответа

2

Правильная последовательность вызовов в вашем случае

print scipy.interpolate.griddata((X.ravel(),Y.ravel()), (X**2+Y**2).ravel(), (XI, YI))

I.e., вам нужно указать точки входных данных на 1- d. (Это может быть исправлено для работы без .ravel() в следующей версии Scipy.)

  • 0
    @pv: спасибо, это работает! Почему вы объединяете матрицы X, Y и XI, YI в новый массив через (X, Y) и (XI, YI) соответственно? Потому что griddata ожидает пять переменных. Но при этом остаются только три переменные ?!
  • 0
    Нет, griddata не ожидает пять переменных, только три: docs.scipy.org/doc/scipy/reference/generated/…
0

Я думаю, вам нужно изменить ваши сетки, 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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню