Python创建对象的速度非常慢



我正在尝试生成1000个class ROBOT 的机器人实例

class robot:
    def __init__(self):
        W, H = map.size # Getting dimensions of map or image
        valid_pixels = []
        for y in xrange(H):
            for x in xrange(W):
                if ( map.getpixel((x, y)) == 255 ):
                    valid_pixels.append((x, y))
        num_valid_pixels = len(valid_pixels)
        p                  = valid_pixels[ random.randrange(0, num_valid_pixels) ]
        self.x             = p[0] + random.random();
        self.y             = p[1] + random.random();
        self.orientation   = random.uniform(0, 2 * math.pi)
        self.forward_noise = 0.0
        self.turn_noise    = 0.0
        self.sense_noise   = 0.0
for i in xrange(1000):
        r = robot()

太慢了。这需要3-4分钟以上的时间。我正在Pydev中运行Enthought。可能的问题是什么?

但是当我运行不在任何类下的相同过程时。它非常快。

def initialize(map):
    n = 1000
    W, H = map.size # Getting dimensions of map or image
    valid_pixels = []
    for y in range(H):
        for x in range(W):
            if (map.getpixel((x, y)) == 255):
                valid_pixels.append((x, y))
    num_valid_pixels = len(valid_pixels)
    particles = []
    for i in range(n):
        p = valid_pixels[random.randrange(0, num_valid_pixels)]
        particles.append([p[0] + random.random(), p[1] + random.random(), random.uniform(0, 2 * math.pi)])
    return particles

您正在构建valid_pixels列表1000次。在其他开销中,这涉及1.6亿个map.getpixel调用,因此非常耗时。代码的第二个版本构造一次列表,并对每个随机像素选择重复使用它,这大约快1000倍。

最新更新