Есть довольно простой алгоритм, известный, наверное, всем со школы.
http://ru.wikipedia.org/wiki/Полярные_координаты
def polar2cart(r,phi):
x = r*math.cos(phi)
y = r*math.sin(phi)
return x,y
В питоне, кстати, в модуле cmath есть даже функции rect/polar, которые в принципе делают тоже самое. Но они это делают для этого числа. А мне надо в numpy для двух одномерных векторов... и на выходе получить двумерный вектор (всех возможных вариантов, декартово произведение). Можно, конечно, сделать тупо циклом for или генератором списков.
rs = numpy.arange(0,100)
phis = numpy.arange(0,math.pi,math.pi/360)
xs = [r*math.cos(phi) for r in rs for phi in phis]
ys = [r*math.sin(phi) for r in rs for phi in phis]
Но это наверное неэффективно?.. Можно как-то тоже самое сделать векторными операциями numpy?
Пробовал
xs = rs*numpy.cos(phis)
ys = rs*numpy.sin(phis)
но ругается, что размерность неправильная... На выходе мне надо получить два двухмерных массива numpy... чтобы они были xs.shape == (rs.shape, phis.shape) (ну то есть для примера выше 100x360)
Вариант с генератором списков работает, но наверное он не Ъ, и это скажется, если я увеличу размер выборки. :)