Python创建对象的速度非常慢

时间:2014-09-19 02:44:17

标签: python class for-loop

我正在尝试生成class ROBOT

的1000个机器人实例
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分钟以上。我在Enthought中正在运行Pydev。可能是什么问题?

但是当我运行不属于任何课程的相同程序时。它非常快。

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

1 个答案:

答案 0 :(得分:1)

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