Python使用一个范围创建一个高效的Grid

时间:2015-04-21 16:30:56

标签: python memory grid storage

我在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

您是否有任何减少时间计算和/或内存存储的解决方案?

非常感谢!

0 个答案:

没有答案