В Win-Vector есть очень мощный новый пакет от ученых гениальных данных (люди, которые делали vtreat
, seplyr
и replyr
), называемые cdata
. Он реализует принципы «скоординированных данных», описанные в в этом документе , а также в этом сообщении в блоге . Идея заключается в том, что независимо от того, как вы организуете свои данные, должно быть возможно идентифицировать отдельные точки данных с помощью системы «координат данных». Вот отрывок из недавнего сообщения в блоге от John Mount:
Вся система основана на двух примитивах или операторах cdata :: moveValuesToRowsD () и cdata :: moveValuesToColumnsD (). Эти операторы имеют сводную, разворотную, однострочную кодировку, транспонирование, перемещение нескольких строк и столбцов и многие другие преобразования как простые частные случаи.
Легко написать много разных операций в терминах примитивов cdata. Эти операторы могут работать как в памяти, так и в больших масштабах данных (с базами данных и Apache Spark, для больших данных используются варианты cdata :: moveValuesToRowsN () и cdata :: moveValuesToColumnsN ()). Трансформации управляются таблицей управления, которая сама является диаграммой (или изображением) преобразования.
blockquote>Сначала мы создадим контрольную таблицу (см. сообщение в блоге для получения подробной информации), а затем выполнить перемещение данных из строк в столбцы.
library(cdata) # first build the control table pivotControlTable <- buildPivotControlTableD(table = dat1, # reference to dataset columnToTakeKeysFrom = 'numbers', # this will become column headers columnToTakeValuesFrom = 'value', # this contains data sep="_") # optional for making column names # perform the move of data to columns dat_wide <- moveValuesToColumnsD(tallTable = dat1, # reference to dataset keyColumns = c('name'), # this(these) column(s) should stay untouched controlTable = pivotControlTable# control table above ) dat_wide #> name numbers_1 numbers_2 numbers_3 numbers_4 #> 1 firstName 0.3407997 -0.7033403 -0.3795377 -0.7460474 #> 2 secondName -0.8981073 -0.3347941 -0.5013782 -0.1745357
Взгляните на работу Джонатана Шевчука , особенно на его (вместе со своими коллегами) известные работы и реализации:
Существует также быстрая реализация несортированной точки облака, реализованные в Библиотеке Point Cloud (PCL). Проверьте их презентацию на Быстрая триангуляция неупорядоченных облаков точки .
Пуассоновский алгоритм Миши Каждан мог бы хорошо работать с вашими данными. Его страница программного обеспечения здесь . Обратите внимание, что существует также версия CGAL. Руководство здесь и готово к использованию демонстрации Windows здесь (если вы установили эти dlls ).
Обратите внимание, что триангуляции Delaunay могут не соответствовать вашему приложению, поскольку триангуляции Delaunay не подходят для истинных 3D-проблем (т. е. где точки хорошо распределены в R3).
Для создания поверхностей в R3 рассмотрите работу Hugues Hoppe и его работу по «восстановлению поверхности».
Реконструкция поверхности используется для нахождения сетчатой поверхности, соответствующей точечному облаку; однако этот метод дает высокие значения треугольников. Если это проблема, вы можете применить mesh метод сокращения, чтобы уменьшить количество полигонов, чтобы свести к минимуму ошибку. В качестве примера вы можете посмотреть методы декомпрессии OpenMesh.