Как оценить локальную касательную плоскость для трехмерных точек?

Скажем, у меня есть набор очков,

R = [[x1, y1, z1],[x2, y2, z2],...,[xn, yn, zn]] 

Для каждой точки (p) в R я идентифицировал локальную окрестность с радиусом (r) и высотой (2r), используя scipy.cKDTree

 import numpy as np import scipy.spatial R = np.array(R) r = 1 # search radius xy = R[:,0:2] # make array of ONLY xy tree = scipy.spatial.cKDTree(xy) for p in range(len(R)): 2d_nbr_indices = tree.query_ball_point(xy[p], r) # indices w/in xy neighborhood 2d_nbr_array = R[2d_nbr_indices] # 3d array of 2d neighbors z = R[p][1] # get z value zMin = z - r zMax = z + r # Create boolean array to filter 3d array hgt_filter = np.any([2d_nbr_array[:, 2] >= zMin, 2d_nbr_array[:, 2] <= zMax], axis=0) 3d_nbr_array = 2d_nbr_array[hgt_filter] # points in xyz neighborhood 

Я хотел бы вычислить плоскость ортогональной регрессии для каждой окрестности, определить расстояние (ортогональное) от каждой точки до плоскости и вычислить нормальный вектор плоскости. Есть ли у кого-нибудь советы о том, как это сделать в python?

EDIT: Я нашел руководство пользователя odr . Кажется, он обрабатывает трехмерные точки. Любые рекомендации по его внедрению и использованию приветствуются. Я также нашел этот аналогичный вопрос .

EDIT: Я должен упомянуть, что данные могут содержать вертикальные или почти вертикальные поверхности, поэтому необходима неявная модель. Я нашел этот пример в scipy codebook , но только с данными xy.

One Solution collect form web for “Как оценить локальную касательную плоскость для трехмерных точек?”

Это общий пример того, как установить трехмерную поверхность двух облаков точек с помощью scipy.odr. Надеюсь, поможет.

 from scipy.odr import ODR, Model, Data import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D def func(beta,data): x,y = data a,b,c = beta return a*x+b*y+c N = 20 x = np.random.randn(N) y = np.random.randn(N) z = func([-3,-1,2],[x,y])+np.random.normal(size=N) data = Data([x,y],z) model = Model(func) odr = ODR(data, model, [0.0,0.0,0.0]) odr.set_job(fit_type = 0) res = odr.run() Y,X = np.mgrid[y.min():y.max():20j,x.min():x.max():20j] Z = func(res.beta, [X,Y]) f = plt.figure() pl = f.add_subplot(111,projection='3d') pl.scatter3D(x,y,z) pl.plot_surface(X,Y,Z,alpha=0.4) 
  • Обманывание numpy / python в представлении очень больших и очень маленьких чисел
  • scipy.interpolate.griddata: вырезать z-значение и получить область внутри
  • Эффективно создавать редкие сводные таблицы в пандах?
  • Собственные векторы Python: различия между numpy.linalg, scipy.linalg и scipy.sparse.linalg
  • Интерполируйте каждую строку в матрице значений x
  • Включить Python для использования всех ядер для установки моделей scikit-learn
  • Ошибка импорта: нет модуля с именем numpy
  • Поверхностная полиномиальная поверхность Python 3D, зависимая от заказа
  •  
    Interesting Posts for Van-Lav

    Добавление существующего листа excel с новым фреймворком данных с использованием python pandas

    Разработка графических интерфейсов в Python: Tkinter vs PyQt

    объединение файлов на основе координат столбца двух файлов в python

    CouchBase, смешанный с Memcached, потеря большинства философий и функциональности CouchDB?

    Почему pylint продолжает говорить, что мой класс R0923 – «интерфейс не реализован»

    Как переопределить сообщение об ошибке «уникальное» django для имени пользователя в пользовательском UserChangeForm

    Перевертывание битов в python

    Поиск элегантной итерации кубиков Python

    Программа командной строки Python: создание man-страницы из существующей документации и включение в дистрибутив

    Python unittest TestCase с наследованием

    Распаковка части файла .gz с использованием python

    Форматирование строк в Python: отображение цены без десятичных точек

    Могу ли я трюк numpy.histogram вести себя как numpy.bincount?

    Сохраняются хэш-объекты sha256?

    Вопросы виртуального виртуального питона

    Python - лучший язык программирования в мире.