【问题标题】:Finding Kneighbors in sklearn using KDtree with multiple target variables with multiple search criteria使用具有多个目标变量和多个搜索条件的 KDtree 在 sklearn 中查找 Kneighbors
【发布时间】:2019-01-25 04:50:42
【问题描述】:

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

有没有一种方法可以将这两者结合起来进行单树查询?

【问题讨论】:

    标签: python machine-learning scipy scikit-learn kdtree


    【解决方案1】:

    是的,有一种方法,只使用一个query_radius call,从文档中使用:

    r 可以是单个值,也可以是形状为 x.shape[:-1] 的值数组 如果每个点都需要不同的半径。

    所以你可以这样做:

    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分(较高的半径)。

    【讨论】:

      猜你喜欢
      • 2012-08-22
      • 2013-11-01
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多