Tengo un conjunto de datos que se ejecuta en millones de puntos de datos en 3D. Para el cálculo que estoy haciendo, necesito calcular el vecino (búsqueda de rango) para cada punto de datos en un radio, intentar ajustar una función, calcular el error para el ajuste, repetir esto para el siguiente punto de datos y así sucesivamente. Mi código funciona correctamente, pero está tardando mucho en ejecutarse, ¡alrededor de 1 segundo por punto de datos! Probablemente se deba a que para cada punto, debe buscar en todo el conjunto de datos. ¿Hay alguna manera de hacer que el proceso sea rápido? Tengo la idea de que si de alguna manera puedo establecer alguna relación de adyacencia entre los primeros vecinos, entonces esto puede ser menos lento. Si ayuda, estoy tratando de encontrar el ancho óptimo de la ventana Parzen en 3D.
fuente
Definitivamente, debe verificar los árboles y octrees KD que son los métodos de elección para los conjuntos de puntos (mientras que los BSP son para objetos generales y las cuadrículas para densidades más o menos uniformes). Pueden ser muy compactos y rápidos, minimizando la sobrecarga en memoria y computación, y son fáciles de implementar.
Cuando sus puntos estén distribuidos de manera más o menos uniforme (incluso con áreas vacías, pero no debe haber singularidad de densidad u otra alta concentración), verifique los empaques de esferas si desea probar una subdivisión de espacio no jerárquico en forma de cuadrícula.
fuente
Probablemente debería considerar construir la triangulación de Delaunay (bueno, su análogo 3D). En 2D, es una triangulación especial de los puntos de datos que siempre contiene el vecino más cercano. Lo mismo ocurre en 3D, pero con tetraedros.
Puede construir de una vez por todas la triangulación, y luego buscar el vecino más cercano directamente en la triangulación. Creo que hay algunos buenos algoritmos para construir la triangulación: en 2D, la construcción de la triangulación está enn log( n ) y la búsqueda posterior del vecino más cercano es lineal en el número de puntos de datos.
¡Espero eso ayude!
fuente