python - 使用具有多个搜索条件的多个目标变量的 KDtree 在 sklearn 中查找邻居

标签 python machine-learning scipy scikit-learn kdtree

假设这是我正在实现的简单 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 i

tree = 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 can be a single value, or an array of values of shape x.shape[:-1] if different radii are desired for each point.

所以你可以这样做:

import numpy as np
from sklearn.neighbors import KDTree

np.random.seed(42)
features = np.random.random((10, 2))

X = np.array(features[0:2])
tree = KDTree(features, leaf_size=40)
indices = tree.query_radius(X, r=np.array([0.1, 0.5]))

for cursor, ix in enumerate(indices):
    np.savetxt('file{}.txt'.format(cursor), features[ix], fmt='%s')

输出为 file0.txt 和 file1.txt,file0.txt 有 1 个点(较小的半径),file1.txt 有 5 个点(较高的半径)。

关于python - 使用具有多个搜索条件的多个目标变量的 KDtree 在 sklearn 中查找邻居,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51907340/

相关文章:

python - 将 python 列表作为参数传递给 rpy2 中的 R 函数

python - 使用 Python 正则表达式捕获占有者和前缀

machine-learning - Erlang 中的感知器在训练后不学习

python - Numpy lomax 均值函数返回 "inf"而不是值

python - XGBoost 和稀疏矩阵

image-processing - scipy中的高斯滤波器

python - 在 python 列表中使用 startswith() 函数

python - 如何有效地将 tsv 文件中的数组列读取到每个列的单个 npz 文件中?

machine-learning - K 倍验证与随机采样 k 次

machine-learning - 使用 keras 的 RNN 编码器解码器