我正在编写一个函数来随机选择字典中存储的元素:
import random
from liblas import file as lasfile
from collections import defaultdict
def point_random_selection(list,k):
try:
sample_point = random.sample(list,k)
except ValueError:
sample_point = list
return(sample_point)
def world2Pixel_Id(x,y,X_Min,Y_Max,xDist,yDist):
col = int((x - X_Min)/xDist)
row = int((Y_Max - y)/yDist)
return("{0}_{1}".format(col,row))
def point_GridGroups(inFile,X_Min,Y_Max,xDist,yDist):
Groups = defaultdict(list)
for p in lasfile.File(inFile,None,'r'):
id = world2Pixel_Id(p.x,p.y,X_Min,Y_Max,xDist,yDist)
Groups[id].append(p)
return(Groups)
其中k是要选择的元素数。团体就是字典
^{pr2}$我的问题是这种方法非常慢(对于大约4天~800MB的文件)
您可以尝试在读取坐标时更新样本。这至少可以避免在运行示例之前将所有内容存储在内存中。这并不能保证让事情变得更快。在
下面的代码基于BlkKnght's excellent answer从文件输入生成一个随机样本,而不保留所有行。这只是扩展了它以保留多个样本。在
上面的函数接受
inFile
和边界坐标,以及样本大小n
,并返回统一拾取的每个组中最多有n
项的分组样本。在因为您所使用的
id
是作为一个组键,所以我将其简化为只计算col, row
元组,因此不需要将其设为字符串。在您可以使用以下内容将这些内容写入文件:
^{pr2}$相关问题 更多 >
编程相关推荐