使用'如果'再次运行循环?

时间:2014-04-21 23:49:02

标签: python arrays loops if-statement random

我正在生成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:

由于

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

感谢帮助人员