Python通过扩展

2024-03-28 17:40:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我用Python做了一个动作。 此函数用于从给定范围创建具有坐标的网格。你知道吗

请输入: 信封(xMin, xMax, yMin, yMax)

xDist每个网格的X距离

每个网格的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

你有什么办法来减少时间计算和/或内存存储吗?你知道吗

非常感谢!你知道吗


Tags: 网格countenvelopex1x2y1y2makegrid