我在Python中创造了一个功能。 此函数使用坐标从给定范围创建网格。
在输入中你给:
信封(xMin, xMax, yMin, yMax)
每个网格的xDist距离
y每个网格的距离
退出时,提供2个列表
xResutl是每个网格的X坐标
yResult是每个网格的Y坐标
我的代码是:
from math import *
def distanceEuclidean(x1, y1, x2, y2):
return sqrt( (x2 - x1)**2 + (y2 - y1)**2 )
def makeGrid(envelope, distX, distY):
nbMeshX = int(ceil(distanceEuclidean(envelope[0], 0, envelope[1], 0)/distX))
nbMeshY = int(ceil(distanceEuclidean(envelope[2], 0, envelope[3], 0)/distY))
nbMesh = nbMeshX*nbMeshY
xResult, yResult = range(nbMesh), range(nbMesh)
count = 0
for x in xrange(nbMeshX):
for y in xrange(nbMeshY):
x1 = envelope[0]+x*distX
x2 = envelope[0]+(x+1)*distX
y1 = envelope[2]+y*distY
y2 = envelope[2]+(y+1)*distY
xResult[count], yResult[count] =[x1,x2,x2,x1,x1], [y1, y1, y2, y2, y1]
count += 1
return xResult, yResult
当我使用一个小信封时,它确实可以!但是当我使用一个非常大的信封时,功能非常慢,结果的列表非常大,非常慢并且占用大量内存。
例如:
带一个小信封:
输入:
envelope = [-10, 10, -15, 25]
print makeGrid(envelope, 20, 15)
输出:
>>> ([[-10, 10, 10, -10, -10], [-10, 10, 10, -10, -10], [-10, 10, 10, -10, -10]], [[-15, -15, 0, 0, -15], [0, 0, 15, 15, 0], [15, 15, 30, 30, 15]])
有一个非常大的信封:
输入:
envelope = [47300, 1198000, 1617200, 2677500]
print makeGrid(envelope, 100, 100)
输出:
>>> MemoryError
您是否有任何减少时间计算和/或内存存储的解决方案?
非常感谢!