Интерполировать поверхность и найти высоту над поверхностью - PullRequest
0 голосов
/ 08 октября 2018

У меня есть простой массив координат XYZ.Все, кроме одного, представляют уровень земли.Я хочу интерполировать уровень земли до поверхности и найти высоту над поверхностью одной точки:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

arr = np.array([[0,0,0,2,2,4,5,5,2],
        [0,3,5,0,5,2,0,5,2],
        [80,70,50,90,40,75,60,46,220]])

x,y,z = arr
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, zdir='z', c= 'red')
plt.show()

enter image description here

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

Решение:

#Rebuild arr without the point which is to be measured:
arr = np.array([[0,0,0,2,2,4,5,5],
        [0,3,5,0,5,2,0,5],
        [80,70,50,90,40,75,60,46]])
x,y,z = arr
groundlvl = scipy.interpolate.LinearNDInterpolator(list(zip(x,y)),z)
groundlvl(2,2)
#Outputs
array(76.)

1 Ответ

0 голосов
/ 08 октября 2018

Так как ваши данные уровня земли, кажется, не находятся на сетке, вы можете использовать LinearNDInterpolator .Он использует триангуляцию Делоне и достаточно надежен.

Другой алгоритм, который я могу порекомендовать, это Rbf (радиальная базисная функция) .

Оба доступны в scipy и работают с n-мерными данными.

Используйте одно из этих двух значений для интерполяции уровня земли, а затем рассчитайте разницу до единственного значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...