假设这是我正在实现的一个简单的KD树算法
def Test(): features = np.random.random((10, 2)) X = np.array(features[0:2]) print(X) tree = KDTree(features, leaf_size=40) indic = tree.query_radius(X, r= 0.1) counter = 0 for i in indic: a = (features[i]) np.savetxt('file{}.txt'.format(counter), a, fmt='%s') counter += 1 yield itree = Test()[X for X in tree]
在这里,我为每个目标位置的每个邻居元素保存了一个文本文件,并且这个方法工作得很好。
有没有什么技巧可以让我为每个目标点使用不同的搜索标准,而不需要反复创建单独的树查询?
例如,假设我想使用一个变量 X = np.array(features[0]
并设置 r = 0.1
,而另一个变量 Y = np.array(features[1]
并设置 r = 0.5
。目前,我只能想到这样的方法
indic1 = tree.query_radius(X, r= 0.1)indic2 = tree.query_radius(Y, r= 0.5)
有没有办法可以将这两个查询合并成一个树查询?
回答:
是的,有一种方法可以做到这一点,只需使用一次 query_radius
调用,根据文档说明:
r 可以是一个单一的值,或者是一个形状为 x.shape[:-1] 的值数组,如果需要为每个点设置不同的半径。
所以你可以这样做:
输出结果是 file0.txt 和 file1.txt,file0.txt 包含1个点(较小的半径),file1.txt 包含5个点(较大的半径)。