@@ -65,20 +65,43 @@ def _radius_sp_kdtree(X, epsilon, dist_type, order=0):
65
65
p = _dist_translation ['scipy-kdtree' ][dist_type ])
66
66
return NN , D
67
67
68
- def _knn_sp_pdist (X , num_neighbors , dist_type , _order ):
68
+ def _knn_sp_pdist (X , num_neighbors , dist_type , order ):
69
69
pd = spatial .distance .squareform (
70
70
spatial .distance .pdist (X ,
71
71
_dist_translation ['scipy-pdist' ][dist_type ],
72
- p = _order ))
72
+ p = order ))
73
73
pds = np .sort (pd )[:, 0 :num_neighbors + 1 ]
74
74
pdi = pd .argsort ()[:, 0 :num_neighbors + 1 ]
75
75
return pdi , pds
76
76
77
- def _radius_sp_pdist (_X , _epsilon , _dist_type , order = 0 ):
78
- raise NotImplementedError ()
77
+ def _radius_sp_pdist (X , epsilon , dist_type , order ):
78
+ N , dim = np .shape (X )
79
+ pd = spatial .distance .squareform (
80
+ spatial .distance .pdist (X ,
81
+ _dist_translation ['scipy-pdist' ][dist_type ],
82
+ p = order ))
83
+ pdf = pd < epsilon
84
+ D = []
85
+ NN = []
86
+ for k in range (N ):
87
+ v = pd [k , pdf [k , :]]
88
+ # use the same conventions as in scipy.distance.kdtree
89
+ NN .append (v .argsort ())
90
+ D .append (np .sort (v ))
91
+
92
+ return NN , D
79
93
80
- def _radius_flann (_X , _epsilon , _dist_type , order = 0 ):
81
- raise NotImplementedError ()
94
+ def _radius_flann (X , epsilon , dist_type , order = 0 ):
95
+ pfl = _import_pfl ()
96
+ # the combination FLANN + max_dist produces incorrect results
97
+ # do not allow it
98
+ if dist_type == 'max_dist' :
99
+ raise ValueError ('FLANN and max_dist is not supported' )
100
+ pfl .set_distance_type (dist_type , order = order )
101
+ flann = pfl .FLANN ()
102
+ flann .build_index (X )
103
+
104
+ flann .delete_index ()
82
105
83
106
class NNGraph (Graph ):
84
107
r"""Nearest-neighbor graph from given point cloud.
0 commit comments