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()
直接使用它。