四叉树遍历的不同输出
Different output on quadtree traversal
我在 运行 相同的程序上一次又一次地在不同的环境(anaconda、python、2.7、3.5)中有不同的输出
谁能解释四叉树中遍历的行为。
我用过this库。
看一下代码和输出。
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)
有两个以上的不同输出。如果您有确定性行为,请告诉我。否则请解释该行为。
两个输出相同:只有 order 显示的匹配不同。
这是由于 Pyqtree 计算交集的方式:它将结果放在 set 中,并且集是无序的。
(intersect
的文档字符串说:
Returns:
- A list of inserted items whose bounding boxes intersect with the input bbox.
但它实际上是一个集合,而不是一个列表,被使用)
因此,顺序随您的 Python 版本而变化也就不足为奇了。
如果你想要一个不变的顺序,你应该对你的比赛进行排序。
我在 运行 相同的程序上一次又一次地在不同的环境(anaconda、python、2.7、3.5)中有不同的输出
谁能解释四叉树中遍历的行为。
我用过this库。
看一下代码和输出。
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)
有两个以上的不同输出。如果您有确定性行为,请告诉我。否则请解释该行为。
两个输出相同:只有 order 显示的匹配不同。
这是由于 Pyqtree 计算交集的方式:它将结果放在 set 中,并且集是无序的。
(intersect
的文档字符串说:
Returns: - A list of inserted items whose bounding boxes intersect with the input bbox.
但它实际上是一个集合,而不是一个列表,被使用)
因此,顺序随您的 Python 版本而变化也就不足为奇了。
如果你想要一个不变的顺序,你应该对你的比赛进行排序。