我正在尝试在 python 中模拟带有边界的二维随机游走(粒子/对象将无法跨越边界并且必须返回)。然而我的版本没有矢量化并且非常慢。如何在不使用(或最小化)循环的情况下实现它。
这是我的方法
def bound_walk():
Origin = [0, 0] #Starting Point
#All Possible directiom
directions = ((-1, 1), (0, 1), (1, 1),
(-1, 0) , (1, 0),
(-1, -1), (0, -1), (1, -1))
#Directions allowed when x-coordinate reaches boundary
refelectionsx = ((-1, 1), (0, 1),
(-1, 0),(-1, -1), (0, -1))
#Directions allowed when y-coordinate reaches boundary
refelectionsy = ((-1, 0) , (1, 0),
(-1, -1), (0, -1), (1, -1))
points = [(0, 0)]
for i in range(20000):
direction = choice(directions)
reflection1 = choice(refelectionsx)
reflection2 = choice(refelectionsy)
if Origin[0]>50: #Boundary==50
Origin[0] += reflection1[0]
elif Origin[0]<-50:
Origin[0] -= reflection1[0]
else:
Origin[0] += direction[0]
if Origin[1]>50:
Origin[1] += reflection2[1]
elif Origin[1] < -50:
Origin[1] -= reflection2[1]
else:
Origin[1] += direction[1]
points.append(Origin[:])
return points