我一次又一次地运行同一程序,在不同的环境中(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版本而更改订单也就不足为奇了。
如果您想要恒定的订单,则应对匹配进行排序。