Python为大型数组优化最近邻居

时间:2014-09-16 18:04:35

标签: python arrays kdtree

我在4D空间中有一个点数组(我的数组大约是1,000,000长)。 对于我的数组中的每个值,我需要找到kth(其中k = 81)最近邻居

然后我根据它做了一些进一步的代码..

[简而言之,我正在尝试扩展SSIM算法但是对于坐在4D中的图片 - 我有一个len(my_values)= 1,000,000 = len(my_coords)的值列表。 虽然作为一个额外的复杂因素,我的“图片”不是由简单网格中的点组成,而是更像是在4D空间中随机分布的1,000,000个'点星'的集合 - 对于'my_values'的差异集有差别亮度,但总是在同一个位置...... 可能不需要该上下文:)]。

我大概需要这样做:

from scipy.spatial import KDTree 
mytree = KDTree(my_coords)
for i in range(len(my_coords)):
    dist, locs = mytree.query(my_coords[i], k=k)
    ....
    result.append(some_function(dist,locs,my_values_pic1[locs],my_values_pic2[locs]))

我尝试使用完整的'my_coords'查询mytree,但这会导致内存问题。 - 显然,循环需要永远......所以需要进行优化。

我正在尝试改变我的循环,一次做大约300点的块,然后将结果拼凑在一起 - 我只是想知道我是否遗漏了一些明显可以使这更快的东西?

1 个答案:

答案 0 :(得分:0)

KNN仅适用于小型数据集。为了有效地处理较大的数据,您必须通过选择能够准确表示类的原型点来执行数据缩减。

Wikipedia has a good overview of the process

相关问题