Eu tenho um conjunto de dados rodando em milhões de pontos de dados em 3D. Para o cálculo que estou fazendo, preciso calcular vizinho (pesquisa por faixa) para cada ponto de dados em um raio, tentar ajustar uma função, calcular o erro para o ajuste, repetir para o próximo ponto de dados e assim por diante. Meu código funciona corretamente, mas está demorando muito tempo para ser executado, cerca de 1 segundo por ponto de dados! Provavelmente porque, para cada ponto, ele deve procurar no conjunto de dados inteiro. Existe uma maneira de acelerar o processo. Eu tenho uma ideia de que, se eu puder estabelecer alguma relação de adjacência entre os primeiros vizinhos, isso poderá ser menos lento. Se ajudar, estou tentando encontrar a largura ideal da janela Parzen em 3D.
fonte
Você definitivamente deve verificar as árvores e os arredores de KD que são os métodos de escolha para os conjuntos de pontos (enquanto os BSPs são para objetos gerais e as grades para densidades mais ou menos uniformes). Eles podem ser muito compactos e rápidos, minimizando a sobrecarga na memória e na computação e são simples de implementar.
Quando seus pontos são distribuídos de maneira mais ou menos uniforme (mesmo com áreas vazias, mas não deve haver singularidade de densidade ou outra alta concentração), verifique os pacotes de esferas se quiser tentar uma subdivisão de espaço não hierárquico semelhante a uma grade.
fonte
Você provavelmente deve considerar a construção da triangulação de Delaunay (bem, seu análogo 3D). Em 2D, é uma triangulação especial dos pontos de dados que sempre contém o vizinho mais próximo. O mesmo acontece em 3D, mas com tetraedros.
Espero que ajude!
fonte