Quadtree遍历上的不同输出



我一次又一次地运行同一程序,在不同的环境中(anaconda,python,2.7,3.5(

有人可以解释Quadtree中遍历的行为。

我使用了此库。

查看代码和输出。

from pyqtree import Index
class Dataset:
    def __init__(self,id,x,y):
        self.id = id
        self.bbox = (x,y,x,y)
spidex = Index(bbox=(0,0,80,80))
p = [[0]*4]*4
k = 0
i1 = i2 = 0
for i in range(10,81,20):
    for j in range(10,81,20):
        p[i1][i2] = Dataset(k,i,j)
        k += 1
        spidex.insert(p[i1][i2],(p[i1][i2]).bbox)
        i2 +=1
    i1+=1
    i2 = 0
o9 = (0,0,80,80)
matches = spidex.intersect(o9)
for i in matches:
    # print(str(i.id))
    print('p'+str(i.id)+' --> ('+str(i.bbox[0])+','+str(i.bbox[1])+')')

输出不同,我使用第一个注释语句和第二个评论语句。

不同的输出:

/usr/bin/python qt3.py
p6--> (30,50)
p10--> (50,50)
p3--> (10,70)
p11--> (50,70)
p14--> (70,50)
p7--> (30,70)
p0--> (10,10)
p13--> (70,30)
p4--> (30,10)
p8--> (50,10)
p1--> (10,30)
p5--> (30,30)
p12--> (70,10)
p15--> (70,70)
p9--> (50,30)
p2--> (10,50)
python2 qt3.py
p14 --> (70,50)
p6 --> (30,50)
p10 --> (50,50)
p3 --> (10,70)
p11 --> (50,70)
p7 --> (30,70)
p0 --> (10,10)
p13 --> (70,30)
p4 --> (30,10)
p15 --> (70,70)
p8 --> (50,10)
p1 --> (10,30)
p5 --> (30,30)
p12 --> (70,10)
p9 --> (50,30)
p2 --> (10,50)

有两个以上不同的输出。让我知道您是否具有确定性行为。请解释行为。

两个输出都相同:只有匹配显示的顺序不同。

这是由于pyqtree计算交集的方式:将结果放入一组,集合是无序的。

( intersect的docstring说:

返回: - 插入的项目的列表,其边界框与输入bbox相交。

但实际上是使用的集合,而不是列表(

所以,随着您的python版本而更改订单也就不足为奇了。
如果您想要恒定的订单,则应对匹配进行排序。

相关内容

  • 没有找到相关文章

最新更新