我正在使用中的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)
)。这并不能缓解问题。在
错误发生在代码中的语句
row.remove(i)
。问题是你的随机数据集可能有重复的点,有时同一个点可以重复三次以上。当数据集很大时,这很可能发生。当这种情况发生时,一个点的三个最近的邻居可能不包括该点本身。这将导致row.remove(i)
中的错误。在相关问题 更多 >
编程相关推荐