@@ -111,19 +111,16 @@ def _radius_sp_kdtree(features, radius, metric, order):
111
111
def _radius_sp_ckdtree (features , radius , metric , order ):
112
112
p = order if metric == 'minkowski' else _metrics ['scipy-ckdtree' ][metric ]
113
113
n_vertices , _ = features .shape
114
- kdt = spatial .cKDTree (features )
115
- nn = kdt .query_ball_point (features , r = radius , p = p , n_jobs = - 1 )
116
- D = []
117
- NN = []
118
- for k in range (n_vertices ):
119
- x = np .tile (features [k , :], (len (nn [k ]), 1 ))
120
- d = np .linalg .norm (x - features [nn [k ], :],
121
- ord = _metrics ['scipy-ckdtree' ][metric ],
122
- axis = 1 )
123
- nidx = d .argsort ()
124
- NN .append (np .take (nn [k ], nidx ))
125
- D .append (np .sort (d ))
126
- return NN , D
114
+ tree = spatial .cKDTree (features )
115
+ D , NN = tree .query (features , k = n_vertices , distance_upper_bound = radius ,
116
+ p = p , n_jobs = - 1 )
117
+ distances = []
118
+ neighbors = []
119
+ for d , n in zip (D , NN ):
120
+ mask = (d != np .inf )
121
+ distances .append (d [mask ])
122
+ neighbors .append (n [mask ])
123
+ return neighbors , distances
127
124
128
125
129
126
def _knn_sp_pdist (features , num_neighbors , metric , order ):
0 commit comments