這是上一個計算器問題hereSciPy的 - 格子的結構,它捕獲分子在2D層面
我想這樣做,在2個維度的延續。 我試過如下:
for i in range(pos):
steps=0 #the steps that the particle does until it falls in a trap
in_pos = sc.random.randint(0, len(grid), 2)
initial_trap=False
while initial_trap==False:
#the step of the particle can be one of this
step=sc.array(random.choice([[0, 1], [1, 0], [0, -1], [-1, 0]]))
# Check position for edges and fix if required
if in_pos + step > sc.size(grid) - 1:
in_pos = 0
elif in_pos + step < 0:
in_pos = sc.size(grid) - 1
else:
in_pos += step
# Check if it's a trap in order to stop the loop
if grid[in_pos] == 0:
initial_trap = True
# If it isn't a trap, continue
steps+=1
steps_count.append(steps)
return steps_count
我也試過:
in_pos_x =int(sc.random.randint(0, len(grid), 1)) #initial position of particle in x axis
in_pos_y =int(sc.random.randint(0, len(grid), 1)) #initial position of particle in y axis
if in_pos_x + step > len(grid)- 1 and in_pos_y + step > len(grid)-1:
in_pos_x = 0
in_pos_y = 0
elif in_pos_x + step < 0 and in_pos_y + step < 0:
in_pos_x = len(grid)- 1
in_pos_y = len(grid)- 1
else: in_pos_x += step
in_pos_y += step
if grid[in_pos_x][in_pos_y] == 0:
initial_trap = True
而在去年,我試着用列表,而不是陣列工作。
in_pos = (scipy.random.randint(0,len(grid),2)).tolist()
step=random.choice([[0, 1], [1, 0], [0, -1], [-1, 0]])
但是沒有成功。 我迷失在這裏!
---------------錯誤消息-----------------------------
如果運行它,它給了我:
「超過一個元素的數組的真值是不明確的。使用a.any()或a.all()」在該行 「如果(in_pos +工序)> sc.size(網格) - 1:」
如果我使用if sc.any(in_pos + step) > sc.size(grid) - 1:
或它運行if sc.any(grid[in_pos]) == 0:
但我使用的print(grid[in_pos])
,我發現它根本不會改變數值!它沒有得到值'0',所以循環永遠不會結束。
如果你告訴*什麼*不工作會更好。 – Avaris
'step = sc.array(random.choice([[0,1],[1,0],[0,-1],[-1,0]])''' – George
'仍然會做得更好。 「不工作」=?拋出異常?在這種情況下,分享這個例外。不按照你的意圖做?在這種情況下,分享它的作用和目標。 – Avaris