Python SciPy cKDTree/query\u ball\u树内存问题

Python SciPy cKDTree/query\u ball\u树内存问题,python,memory,scipy,kdtree,Python,Memory,Scipy,Kdtree,我正在处理两个大型数据集(三维点的坐标)。第一个数据集大约有一百万个点(数据1),而第二个数据集有五千万个点(数据2)。我需要通过比较这两个数据集来进行配对计数和范围查询。目前,我正在使用scipy cKDTree(我读过它很快) 当我为测试用例(小尺寸的Data1和Data2)运行这个脚本时,它运行得很好,但当我为实际用例运行它时(数据1约1 mil,数据2约50 mil),我得到以下输出(和错误消息) 我怀疑查询球树需要比我的计算机更多的内存。我现在使用的是一款具有16GB(1867MHz

我正在处理两个大型数据集(三维点的坐标)。第一个数据集大约有一百万个点(数据1),而第二个数据集有五千万个点(数据2)。我需要通过比较这两个数据集来进行配对计数和范围查询。目前,我正在使用scipy cKDTree(我读过它很快)

当我为测试用例(小尺寸的Data1和Data2)运行这个脚本时,它运行得很好,但当我为实际用例运行它时(数据1约1 mil,数据2约50 mil),我得到以下输出(和错误消息)

我怀疑查询球树需要比我的计算机更多的内存。我现在使用的是一款具有16GB(1867MHz DDR3)内存和3.1GHz(Intel Core i7)处理器的Mac电脑


有人能推荐一种需要更少内存的cKDTree(或query\u ball\u tree)替代方案吗?如果能得到任何有帮助的回复,我将不胜感激。

您好。你把这个整理好了吗?我也面临同样的问题。@ds\u用户:是的,我找到了问题的原因。“查询球树”的输出是一个“对列表”。在我指定的问题的上下文中,对的列表对于标准计算机的内存来说太大了。在我正在开发的系统中,一个带有单个数字的python列表将占用80字节的内存。查询球树的输出包含数千万个数字,这需要很大的内存。我正在使用的那台计算机有16GB的内存。query_ball_tree的输出肯定需要大于16GB的内存。@ds_user:排序的一种方法是将输入数据数组分成较小的块,并将它们与较小块的数据进行比较。然后,可以组合较小块比较的输出。这种方法对我来说完美无瑕。你把这个整理好了吗?我也面临同样的问题。@ds\u用户:是的,我找到了问题的原因。“查询球树”的输出是一个“对列表”。在我指定的问题的上下文中,对的列表对于标准计算机的内存来说太大了。在我正在开发的系统中,一个带有单个数字的python列表将占用80字节的内存。查询球树的输出包含数千万个数字,这需要很大的内存。我正在使用的那台计算机有16GB的内存。query_ball_tree的输出肯定需要大于16GB的内存。@ds_user:排序的一种方法是将输入数据数组分成较小的块,并将它们与较小块的数据进行比较。然后,可以组合较小块比较的输出。这种方法对我来说完美无瑕。
from scipy.spatial import cKDTree
KDTree_Data1 = cKDTree(Data1)
KDTree_Data2 = cKDTree(Data2)
print "KDTree created"
Data2_Indx = KDTree_Data1.query_ball_tree(KDTree_Data2, r=170, p=2.0, eps=0)                          
print "Something"
KDTree created
Killed: 9