pykdtree

raw JSON →
1.4.3 verified Mon Apr 27 auth: no python

A fast kd-tree implementation in Cython with OpenMP-enabled parallel queries. Current version 1.4.3, supports Python >=3.9 and NumPy >=1.25. Release cadence is irregular, with several maintenance releases addressing bugs and build compatibility.

pip install pykdtree
error ModuleNotFoundError: No module named 'pykdtree.kdtree'
cause Import path changed; users try from pykdtree import KDTree.
fix
Use: from pykdtree.kdtree import KDTree
error pykdtree.kdtree.KDTree not returning correct results for large arrays
cause Integer overflow in tree indexing before version 1.4.0.
fix
Upgrade to pykdtree >= 1.4.0.
error Segmentation fault (core dumped) when querying empty array
cause Bug in versions < 1.3.13 when input data has zero rows.
fix
Upgrade to pykdtree >= 1.3.13.
gotcha Input data must be a 2D NumPy array with dtype float64 or float32. If using float32, queries disable OpenMP parallelization.
fix Ensure data is np.float64 or np.float32, and for large data prefer float64 to benefit from OpenMP.
breaking Version 1.4.0 changed internal integer sizes to handle large arrays. Trees built with older versions cannot be pickled and loaded in 1.4.0+.
fix Rebuild trees after upgrading pykdtree.
deprecated Importing KDTree directly from pykdtree (e.g., from pykdtree import KDTree) is no longer supported as of 1.4.0.
fix Use from pykdtree.kdtree import KDTree instead.
pip install pykdtree --no-binary pykdtree

Create a KDTree from 100 random 3D points and query nearest 4 neighbors for 5 new points.

import numpy as np
from pykdtree.kdtree import KDTree
data = np.random.randn(100, 3)
tree = KDTree(data)
query = np.random.randn(5, 3)
dists, idx = tree.query(query, k=4)
print(dists, idx)