我正在尝试生成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倍。