Использование Python с набором нерегулярных точек X, Y, Z для создания регулярной сетки, где каждый пиксель является минимальным значением точки


У меня есть набор нерегулярных точек со значениями X, Y и Z. Я хочу создать регулярную квадратную сетку (для экспорта в формате TIFF или ASCII) с разрешением 0,5 x 0,5 и расширением, равным boundery box моего набора данных [X_Min,Y_Min],[X_Max,Y_Min],[X_Max,Y_Max],[X_Min,Y_Max],[X_Min,Y_Min]

Значение каждого пикселя, в котором присутствуют точки, должно быть наименьшим значением точек в пикселе.

Извините, если я не могу опубликовать какой-либо код Python.

Заранее спасибо за всю помощь, предложения и ссылку, где решить эту проблему Задача

1 2

1 ответ:

Я предполагаю, что ваши точки доступны в массиве, подобном этому:

points = [(x1,y1,z1), (x2,y2,z2), ...]  

Чтобы извлечь значения x и y, вы можете использовать трюк zip:

points_zipped = zip(*points)  
xvals = points_zipped[0]  
yvals = points_zipped[1]  

Получение ограничивающего прямоугольника тогда просто:

xmin, ymin = min(xvals), min(yvals)
xmax, ymax = max(xvals), max(yvals)

Для получения минимальных баллов я не смог придумать ничего более вдохновляющего, чем использование defaultdicts из модуля collections:

from collections import defaultdict
minpoints = defaultdict(lambda: defaultdict(lambda : 0.))  # 0. or another suitable min value  
for p in points:  
    minpoints[p[0]][p[1]] = min(p[2], minpoints[p[0]][p[1]])  

Оттуда вы можете использовать интерполяцию scipy. Существует специальный рецепт для 2d-интерполяции неравномерно расположенных данные: http://www.scipy.org/Cookbook/Matplotlib/Gridding_irregularly_spaced_data