Я борюсь с интерполяцией между двумя сетками и не смог найти подходящего решения для моей проблемы.
У меня есть 2 разных 2D сетки, из которых точки узлов определяются их координатами X и Y. Сама сетка не является прямоугольной, но образует более или менее параллелограмм (поэтому координата X для (i, j) не совпадает с (i, j + 1), а координата Y для (i, j) равна отличается от координаты Y (i + 1, j).
Обе сетки имеют форму 37 * 5 и почти полностью перекрывают друг друга.
Для первой сетки у меня есть для каждой точки координата X, координата Y и значение давления. Теперь я хотел бы интерполировать это распределение давления первой сетки на второй сетке (из которых также известны X и Y для каждой точки.
Я пробовал разные методы интерполяции, но мой конечный результат никогда не был правильным из-за нерегулярного распределения точек сетки.
Функции как interp2d или griddata требуют в качестве входных данных массива 1D, но если я сделаю это, интерполированное решение будет неправильным (даже если я снова интерполирую значения давления из исходной сетки на исходную сетку, новые значения давления находятся в милях от исходные значения.
Для 1D-интерполяции на разных нерегулярных сетках я использую:
def interpolate(X, Y, xNew):
if xNew<X[0]:
print 'Interp Warning :', xNew,'is under the interval [',X[0],',',X[-1],']'
yNew = Y[0]
elif xNew>X[-1]:
print 'Interp Warning :', xNew,'is above the interval [',X[0],',',X[-1],']'
yNew = Y[-1]
elif xNew == X[-1] : yNew = Y[-1]
else:
ind = numpy.argmax(numpy.bitwise_and(X[:-1]<=xNew,X[1:]>xNew))
yNew = Y[ind] + ((xNew-X[ind])/(X[ind+1]-X[ind]))*(Y[ind+1]-Y[ind])
return yNew
но для 2D я думал, что griddata будет проще в использовании. У кого-нибудь есть опыт интерполяции, где мой вход представляет собой двумерный массив для сетки и данных?