gpt4 book ai didi

python - scipy - 在二维中捕获分子的晶格结构

转载 作者:太空宇宙 更新时间:2023-11-04 01:37:53 25 4
gpt4 key购买 nike

这是之前 stackoverflow 问题的延续 here

我想在二维中进行。我尝试了以下方法:

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]])

但也没有成功。我迷路了!

----------------错误信息----------------------------

如果运行它给我的程序:

'具有多个元素的数组的真值不明确。在“if (in_pos + step) > sc.size(grid) - 1:”行中使用 a.any() 或 a.all()'

如果我使用 if sc.any(in_pos + step) > sc.size(grid) - 1:if sc.any(grid[in_pos]) == 0: 它运行但我使用了 print(grid[in_pos]) 并且我认为它根本不会改变值!它没有获得值“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

size 返回数组中元素的总数。您需要检查数组的各个长度(在 xy 方向)。在这里,shape 是你的 friend 。并且您需要更正超出限制的索引,而不是全部。 mod 运算符 % 可以使用。所以上面的代码可以简单的重写为:

# Move by step
in_pos += step
# Correct according to periodic boundaries
in_pos = in_pos % grid.shape # or simply in_pos %= grid.shape

第二个问题是grid的索引。可以这么说,你做的方式不是你想要的(check the docs for details)。对于您的简单案例,它可以重写为:

if grid[in_pos[0], in_pos[1]] == 0:
initial_trap = True

关于python - scipy - 在二维中捕获分子的晶格结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8067800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com