我正在生成2个随机数的数组,范围从-3到3(这将提供我的x和y坐标)。但是,如果通过使用if循环,相应的x和y大于我的半径(即3),我想生成一组新的数字?在我的if循环之后我要放入什么来实现这个目标?
from physics import *
import random
N=3
x= zeros(N,float)
y= zeros(N,float)
for i in range (0, N):
x[i] = uniform(6)-3
y[i] = uniform(6)-3
if (x[n]*2+y[n]**2)**0.5 > 3:
由于
答案 0 :(得分:0)
您不能只创建一个新范围,然后重置索引吗?
from physics import *
import random
N=3
x= zeros(N,float)
y= zeros(N,float)
for i in range (0, N):
x[i] = uniform(6)-3
y[i] = uniform(6)-3
if (x[n]*2+y[n]**2)**0.5 <= 3:
x = random.sample(range(-3, 3), n)
y = random.sample(range(-3, 3), n)
i = 0
答案 1 :(得分:0)
大多数随机库模块提供了一个例程,用于在区间[0,1]内从均匀分布返回浮点数。从区间[a,b)的均匀分布中随机选择,其中b> a,您可以乘以b-a
,然后添加a
。
我不确定您在示例中导入哪些模块,因此我将使用标准随机模块以及numpy.random
来举例说明随机
import random
def rand_range(a, b):
return a + random.uniform() * (b - a)
x = [rand_range(-3, 3) for i in range(3)]
y = [rand_range(-3, 3) for i in range(3)]
<强> numpy.random 强>
Numpy允许人们对速度和清晰度进行矢量化操作。
import numpy as np
def rand_range(a, b, size):
return a + np.random.random(size) * (b - a)
x = rand_range(-3, 3, (3))
y = rand_range(-3, 3, (3))
或者,创建一个包含2行3个元素的2D数组,并使用解包
x, y = rand_range(-3, 3, (2, 3))
边界检查
为了确保生成的点符合3个单位x,y =(0,0)的标准,您可以执行以下操作:
x = []
y = []
for i in range(3):
xi, yi = 3, 3 #initally set candidates to fail check
while xi ** 2 + yi ** 2 > 9:
xi = rand_range(-3, 3)
yi = rand_range(-3, 3)
x.append(xi)
y.append(yi)
鉴于底层随机方法在区间[0,1]上返回一个值,这些数组应该都传递以下断言:
for xi, yi in zip(x,y):
assert xi**2 + yi**2 <= 9
答案 2 :(得分:0)
@mtadd
我正在回答我的问题,因为我找到了解决问题的方法。但是,我很好奇你解决它的方式是否比我的进程mtadd更有效。
在我的物理中,import是存储随机和numpy模块的地方,因此我的代码中没有使用它。
from physics import *
N=3 #Number of point charges
x= zeros(N,float) #grid
y= zeros(N,float)
i=0
for i in range (0, N): #Loop to ensure two values are <= 3
while i < N:
x[i] = uniform(6)-3
y[i] = uniform(6)-3
if x[i] ** 2 + y[i] ** 2 <= 9:
i+=1
else:
i=0
print x,y
感谢帮助人员