Scipy.space.KDTree。查询大型数据集问题

2024-09-29 17:44:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用中的KDQuery函数凌乱的。空间的. 一旦我的数据量变得非常大,我就会遇到问题。我意识到算法的设计不一定对大数据集有效,但从源代码来看,大小只会增加处理时间,而不会影响输出。在

下面是一个代码片段:

sizes = [ 10**i for i in range(5,6) ] #10^5 for this test
data = np.random.random_integers(0,100,(sizes[-1],2))
for size in sizes:
    kd = ps.common.KDTree(data)
    nnq = kd.query(data,k=2+1, p=2)
    info = nnq[1] #This is the indices of the neighbors
    neighbors = {}
    idset = np.arange(len(info)) #Indices of the input point
    for i, row in enumerate(info):
        row = row.tolist()
        row.remove(i)
        neighbors[idset[i]] = list(row)

当我不在列表中时,返回一个值错误(ValueError列表.删除(x) :x不在列表中)。对于小于10^5的数据大小,此代码按预期工作。在

出现错误的一个潜在原因是递归限制正在达到。为了探索这个问题,我将递归深度设置为1000000(sys.setrecursionlimit(1000000))。这并不能缓解问题。在


Tags: the数据代码ininfo列表fordata
1条回答
网友
1楼 · 发布于 2024-09-29 17:44:47

错误发生在代码中的语句row.remove(i)。问题是你的随机数据集可能有重复的点,有时同一个点可以重复三次以上。当数据集很大时,这很可能发生。当这种情况发生时,一个点的三个最近的邻居可能不包括该点本身。这将导致row.remove(i)中的错误。在

相关问题 更多 >

    热门问题