Трехмерная интерполяция в python
Октябрь 12th, 2011 by kolya | Filed under Программирование.Понадобилась библиотечка для трехмерной интерполяции. Конкретно имелась следующая задача: изначально имеется набор точек в трехмерном пространстве, с некоторыми значениями, нам необходимо восстановить значения в некотором другом наборе точек. В идеале хотелось для языка python, но не принципиально.
Конкретного ничего найти не удалось, однако вспомнил, что давно натыкался на библиотеку, реализующую интерполяцию методом естественных соседей (natural neighbour interpolation), придуманную неким Робином Сибсоном.
Сама либа называется interpolate3d и была написана для какого-то пакета для моделирования пучков нейтронов.
Библиотечка написана на C.
Для переноса ее на python на помощь пришла чудесная штука под названием ctypes. Много о ней слышал хорошего, но использовать до селе не приходилось. Все что сделал – собрал динамическую библиотеку из всех сишников и написал небольшой враппер на python используя ctypes.
Работает все следующим образом: на вход принимается известный набор точек, затем строится сетка и на выходе мы можем получить значение в произвольной точке.
Пример кода как оно работает:
from natural import Mesh
m = Mesh(
x = [0, 1, 2],
y = [3, 4, 5],
z = [6, 7, 8],
v = [0, 1, 3]
)
print m.interpolate(1, 2, 3)
Сама библиотечка тут: natural.py.
Для сборки библиотечки libnatural.so можно использовать Makefile.
Исходники качаем с сайта автора: interpolate3d.
Tags: natural neughbor, python