Différence entre scipy.spatial.KDTree et scipy.spatial.cKDTree

Quelle est la différence entre ces deux algorithmes?

26
demandé sur Benjamin 2011-08-03 22:16:28

2 réponses

cKDTree est un sous-ensemble de KDTree, implémenté en C++ enveloppé dans Cython, donc plus rapide.

Chacun d'eux est

un tri binaire, dont chacun des noeuds représente un hyperrectangle aligné sur l'axe. Chaque nœud spécifie un axe et partage l'ensemble des points selon que leurs coordonner le long de cet axe est supérieure ou inférieure à une valeur particulière.

mais KDTree

aussi prend en charge les requêtes de tous les voisins, à la fois avec des tableaux de points et avec d'autres arbres de kd. Ceux-ci utilisent un algorithme raisonnablement efficace, mais l'arbre kd n'est pas nécessairement la meilleure structure de données pour ce genre de calcul.

29
répondu agf 2018-08-29 05:22:51

dans un cas d'Utilisation (recherche 5D du voisin le plus proche dans un KDTree avec environ 100K points) cKDTree est environ 12x plus rapide que KDTree.

9
répondu Newmu 2013-03-13 00:30:04