我已编辑了我的问题。现在我不想在我的函数中使用循环。该功能用于定义2-D中旋转物体的初始位置。我想得到这样的输出格式:
theta1 theta2 theta3
phi1 phi2 phi3
eta1 eta2 eta3
函数内部e的定义必须是别的(我的意见)。任何人都可以帮助我获得所需的输出吗?
def randposi(N=500):
theta = 2*pi* rand()-pi
phi = arccos(1-2* rand())
eta = 2*pi*rand()-pi
r = random.rand(N)
e = 3*r*array()
return e
答案 0 :(得分:0)
因此,如果我们让你的函数返回一个元组:
def randpos():
theta = 2*pi* rand()-pi
if rand() < 12:
if phi < pi:
phi += pi
else:
phi -= pi
eta = 2*pi*rand()-pi
return (theta, phi, eta)
然后调用它500次并将结果放在元组列表中。
starting_pos = []
for x in xrange(500):
starting_pos.append(randpos)
你有解决方案。
答案 1 :(得分:0)
对于您的情况,您可以使用列表理解:
def randpos(N=500):
# your function code here
...
desired = 500
init_positions = [randpos() for i in range(desired)]
答案 2 :(得分:0)
所以,你已经定义了你的函数f(x),称为randpos,似乎这个函数不接受任何输入。 N是你用来迭代这个函数的变量,你在这里有几个选项:
您可以将值存储在某个列表中,如下所示:
N = 10
random_positions = [randpos() for i in range(N)]
print random_positions
如果你不需要存储值,你只需循环遍历它们:
for i in range(N):
print randpos()
如果您愿意,只需按照以下方式生成您的值:
def my_iterator(N=500):
for i in range(N):
yield randpos()
for rand_pos in my_iterator(N):
print rand_pos
答案 3 :(得分:0)
使用随机numpy数组怎么样?
类似的东西:
import numpy as np
N=500
#we create a random array 3xN
r = np.random.rand(3,N)
#tetha is row 0, phi row 1, eta row 2
#we apply the same treatment that is in the question to get the right range
#also note that np.pi is just a predefined float
r[0]=2*np.pi*r[0] -np.pi
r[1]=np.arccos(1-2*r[1])
r[2]=2*np.pi*r[2] -np.pi
print(r[0],r[1],r[2])