gpt4 book ai didi

Python:如何提高脚本的性能以获得一组点的边界框

转载 作者:太空宇宙 更新时间:2023-11-03 13:03:12 25 4
gpt4 key购买 nike

我有一组点(x 和 y),我想知道 X 和 Y(边界框)的最大值和最小值。我对这些行进行了编码,其中我使用列表理解读取了所有点,然后在 X 和 Y 上使用了最大值和最小值。最后我删除了这些点。

这个解决方案不是内存效率,因为我需要读取所有点

points = [(p.x,p.y) for p in lasfile.File(inFile,None,'r')] # read in list comprehension
X_Max = max(zip(*points)[0])
X_Min = min(zip(*points)[0])
Y_Max = max(zip(*points)[1])
Y_Min = min(zip(*points)[1])
del points

我正在询问避免此步骤的建议(将所有点存储在内存中)。提前致谢詹尼

最佳答案

X_Max = float('-inf')
X_Min = float('+inf')
Y_Max = float('-inf')
Y_Min = float('+inf')

for p in lasfile.File(inFile,None,'r'):
X_Max = max(X_Max, p.x)
X_Min = min(X_Min, p.x)
Y_Max = max(Y_Max, p.y)
Y_Min = min(Y_Min, p.y)

这样一来,您只需在文件上循环一次,并避免一次在内存中有多个点。

EDIT File() 提供了一个迭代器,它一次只从文件中读取一行并将其提供给循环变量 p,在需要时。

在您的问题中,您在初始分数分配周围使用了方括号。这是一个列表理解,顾名思义,它创建了一个列表——所以从那一点开始所有的点都保存在内存中。如果你像这样使用括号:

points = ((p.x,p.y) for p in lasfile.File(inFile,None,'r'))

X_Max = float('-inf')
X_Min = float('+inf')
Y_Max = float('-inf')
Y_Min = float('+inf')

for p in points:
X_Max = max(X_Max, p.x)
X_Min = min(X_Min, p.x)
Y_Max = max(Y_Max, p.y)
Y_Min = min(Y_Min, p.y)

...那么 Python 不会创建一个列表,而是一个生成器/迭代器 - 它将一次返回一个点,直到文件耗尽。这将避免所有点同时在内存中 - 但只能迭代一次。

不过为了简单起见,我放弃了创建一个额外的迭代器,转而直接使用 lasfile.File() 迭代器。

关于Python:如何提高脚本的性能以获得一组点的边界框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12953125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com