python加快速度的模块_Python:使用多处理模块作为可能的解决方案来提高函数的速度...

我用Python2.7编写了一个函数(在64位窗口操作系统上),以计算参考多边形(Ref)和ESRI中的一个或多个分段多边形(Seg)的交集面积的平均值。代码相当慢,因为我有超过2000个参考多边形,并且对于每个参考多边形,函数每次都为所有Seg多边形(超过7000个)运行。对不起,这个函数只是个原型。在

我想知道multiprocessing是否可以帮助我提高循环的速度,还是有更多的性能解决方案。如果多处理是一个可能的解决方案,我想知道优化我下面函数的最佳方法import numpy as np

import ogr

import osr,gdal

from shapely.geometry import Polygon

from shapely.geometry import Point

import osgeo.gdal

import osgeo.gdal as gdal

def AreaInter(reference,segmented,outFile):

# open shapefile

ref = osgeo.ogr.Open(reference)

if ref is None:

raise SystemExit('Unable to open %s' % reference)

seg = osgeo.ogr.Open(segmented)

if seg is None:

raise SystemExit('Unable to open %s' % segmented)

ref_layer = ref.GetLayer()

seg_layer = seg.GetLayer()

# create outfile

if not os.path.split(outFile)[0]:

file_path, file_name_ext = os.path.split(os.path.abspath(reference))

outFile_filename = os.path.splitext(os.path.basename(outFile))[0]

file_out = open(os.path.abspath("{0}\\{1}.txt".format(file_path, outFile_filename)), "w")

else:

file_path_name, file_ext = os.path.splitext(outFile)

file_out = open(os.path.abspath("{0}.txt".format(file_path_name)), "w")

# For each reference objects-i

for index in xrange(ref_layer.GetFeatureCount()):

ref_feature = ref_layer.GetFeature(index)

# get FID (=Feature ID)

FID = str(ref_feature.GetFID())

ref_geometry = ref_feature.GetGeometryRef()

pts = ref_geometry.GetGeometryRef(0)

points = []

for p in xrange(pts.GetPointCount()):

points.append((pts.GetX(p), pts.GetY(p)))

# convert in a shapely polygon

ref_polygon = Polygon(points)

# get the area

ref_Area = ref_polygon.area

# create an empty list

Area_seg, Area_intersect = ([] for _ in range(2))

# For each segmented objects-j

for segment in xrange(seg_layer.GetFeatureCount()):

seg_feature = seg_layer.GetFeature(segment)

seg_geometry = seg_feature.GetGeometryRef()

pts = seg_geometry.GetGeometryRef(0)

points = []

for p in xrange(pts.GetPointCount()):

points.append((pts.GetX(p), pts.GetY(p)))

seg_polygon = Polygon(points)

seg_Area.append = seg_polygon.area

# intersection (overlap) of reference object with the segmented object

intersect_polygon = ref_polygon.intersection(seg_polygon)

# area of intersection (= 0, No intersection)

intersect_Area.append = intersect_polygon.area

# Avarage for all segmented objects (because 1 or more segmented polygons can intersect with reference polygon)

seg_Area_average = numpy.average(seg_Area)

intersect_Area_average = numpy.average(intersect_Area)

file_out.write(" ".join(["%s" %i for i in [FID, ref_Area,seg_Area_average,intersect_Area_average]])+ "\n")

file_out.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值