我正在尝试生成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分钟以上。我在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
答案 0 :(得分:1)
您正在构建valid_pixels
列表1000次。在其他开销中,涉及1.6亿map.getpixel
次呼叫,因此非常耗时。代码的第二个版本构造列表一次,并为每个随机像素选择重用它,大约快1000倍。