Python 四叉树遍历的不同输出
在不同的环境(anaconda、python、2.7、3.5)中,一次又一次地运行同一个程序时,我有不同的输出 有人能解释一下四叉树中的遍历行为吗 我用过图书馆 看看代码和输出Python 四叉树遍历的不同输出,python,anaconda,quadtree,Python,Anaconda,Quadtree,在不同的环境(anaconda、python、2.7、3.5)中,一次又一次地运行同一个程序时,我有不同的输出 有人能解释一下四叉树中的遍历行为吗 我用过图书馆 看看代码和输出 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
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的文档字符串表示: 返回: -其边界框与输入框相交的插入项列表 但是它实际上是一个集合,而不是一个列表,被使用) 因此,随着Python版本的变化,顺序也会发生变化,这并不奇怪。
如果您想要一个恒定的顺序,您应该对匹配项进行排序。但是我使用pyqtree交集仅仅是为了以某种逻辑方式构建索引。如果我对它进行排序,那么它将基于id,这不是我想要的。我读到四叉树用于空间索引,不是这样做的吗?如果不是在id上,那么你必须在其他东西上对它们进行排序。因此,您应该定义“逻辑方式”对您意味着什么,并进行相应的排序,因为没有“自然”排序顺序。