我试图通过创建一个2D numpy数组来启动物理Monte Carlo模拟,该数组填充了N个1D元素,这些元素对应于每个粒子的x,y和z位置。但是,该数组必须没有任何两个粒子重叠。
我目前正在尝试创建一个列表,用3个随机的intiger填充它,然后检查列表是否在数组中;如果是,则返回创建随机数列表的点并重试。如果列表不存在于数组中,则将列表添加到数组中。
N = 10 #number of particles
L = 10 #length of box side
particle_positions = np.zeros([N,3], dtype=int)
i = 0
for particle in particle_positions:
z = True
while z == True:
r = [rnd.randint(0,L),rnd.randint(0,L),rnd.randint(0,L)]
if np.equal(particle_positions[:(i+1)],r).any() == True:
z = True
continue
else:
particle_positions[i] = r
z = False
i += 1
字符串
然而,无论我如何尝试,我都会遇到奇怪的复杂情况(也就是说,我做错了什么,我不知道是什么),因此代码跳过了唯一的元素,而没有将它们添加到数组中。
对于python和一般的编码来说,我是相当新的,所以我怀疑我可能犯了一些对你们这些老手来说很明显的错误--如果我确实没有使整个过程过于复杂的话。
非常感谢任何帮助。
2条答案
按热度按时间hc2pp10m1#
您可以使用
permutations
执行以下操作:字符串
mrzz3bfm2#
这似乎是在检查paricle是否已经存在于列表中。
字符串
你的检查似乎是为了看看是否有任何单一的值对齐。