通过Python

时间:2016-08-15 11:41:10

标签: python numpy rotation 2d

我已编辑了我的问题。现在我不想在我的函数中使用循环。该功能用于定义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

4 个答案:

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