Как создать трехмерную поверхность по заданным координатам с помощью python? - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть некоторые дискретные координаты с их высотой, и мне нужно создать гладкую поверхность, которую я буду продолжать использовать.Мне нужно иметь высоту для всех координат на этой поверхности.Я подумывал об использовании трехмерного сплайна, но у меня возникли проблемы с применением методов, предложенных в сопоставимых вопросах.Я не опытный программист, поэтому я, вероятно, нахожу любые предложения полезными.Пожалуйста, прости меня, если я могу спросить что-то очень похожее на то, что уже обсуждалось ранее.Я использую Python 3.6.

EDIT

Я сделал крошечный список (аналогично тому, что у меня есть).

Z=[]
Z.append([20.2, 20.1, 35])
Z.append([20.1, 24.5, 36])
Z.append([21.0, 23.2, 33])
Z.append([22.3, 20.0, 34])
Z.append([22.3, 19.5, 28])
Z.append([20.1, 19.5, 27])
Z.append([20.1, 24.6, 31])
Z.append([22.3, 24.6, 32])

Первое число здесь представляет долготу, второе- широта и третье - высота.Мне нужно создать «поверхность» (необязательно отображать ее), которая будет содержать информацию обо всех координатах между этим прямоугольником.

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

1 Ответ

0 голосов
/ 24 сентября 2018

Можно использовать метод griddata от scipy.

Вот небольшой пример использования метода интерполяции ближайших соседей с вашими данными:

import numpy as np
from scipy.interpolate import griddata
# --------------------
Z=[]
Z.append([20.2, 20.1, 35])
Z.append([20.1, 24.5, 36])
Z.append([21.0, 23.2, 33])
Z.append([22.3, 20.0, 34])
Z.append([22.3, 19.5, 28])
Z.append([20.1, 19.5, 27])
Z.append([20.1, 24.6, 31])
Z.append([22.3, 24.6, 32])
# ---------------------------
xin=np.array(Z)[:,0];
yin=np.array(Z)[:,1];
zin=np.array(Z)[:,2];
# ----------------------------
xout=np.linspace(20.,23.,10);
yout=np.linspace(19.,25.,10);
xout,yout = np.meshgrid(xout,yout);
# ----------------------------
zout=griddata((xin,yin),zin,(xout,yout),'nearest');
# -----------------------------
from pylab import pcolormesh,show
pcolormesh(xout,yout,zout);show();
...