我正在使用 SciPy.Spatial 中的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)
当 i 不在列表中时,这将返回一个值错误(ValueError list.remove(x): x not in list)。对于小于 10^5 的数据大小,此代码按预期工作。
错误的一个潜在原因是已达到递归限制。为了探索这一点,我将递归深度设置为 1,000,000 ( sys.setrecursionlimit(1000000)
)。这并不能缓解问题。