Python Numpy - 复数 - 是否有Polar to Rectangular转换函数?

时间:2013-05-08 15:36:19

标签: python numpy complex-numbers

是否有内置的Numpy函数可以将极坐标形式的复数,幅度和角度(度)转换为实部和虚部中的一个?

显然我可以自己编写,但似乎某些模块中包含优化版本的东西类型?

更具体地说,我有一系列的数量和一系列角度:

>>> a
array([1, 1, 1, 1, 1])
>>> b
array([120, 121, 120, 120, 121])

我想要的是:

>>> c
[(-0.5+0.8660254038j),(-0.515038074+0.8571673007j),(-0.5+0.8660254038j),(-0.5+0.8660254038j),(-0.515038074+0.8571673007j)]

5 个答案:

答案 0 :(得分:12)

没有一种功能可以完全按照您的要求进行,但有 angle ,这是最难的部分。因此,例如,可以定义两个函数:

def P2R(radii, angles):
    return radii * exp(1j*angles)

def R2P(x):
    return abs(x), angle(x)

这些函数使用弧度进行输入和输出,对于度数,需要在两个函数中都将弧度转换为弧度。

在numpy reference中有一个关于处理复数的部分,这就是你要找的函数所在的位置(因为它们不在那里,我认为它们不存在于numpy的)。

答案 1 :(得分:3)

上一个使用numpy.vectorize的答案出错 - cmath.rect不是可以导入的模块。 Numpy还提供deg2rad函数,为角度转换提供更清晰的代码。该代码的另一个版本可能是:

import numpy as np
from cmath import rect

nprect = np.vectorize(rect)

c = nprect(a, np.deg2rad(b))

代码使用numpy的vectorize函数返回标准库的cmath.rect函数的numpy样式版本,该函数可以在numpy数组中以元素方式应用。

答案 2 :(得分:1)

我将cmath用于itertools

from cmath import rect,pi
from itertools import imap
b = b*pi/180                   # convert from deg to rad
c = [x for x in imap(rect,a,b)]

答案 3 :(得分:0)

import numpy as np
import cmath.rect

nprect = np.vectorize(rect)

c = nprect(a,b*np.pi/180)

答案 4 :(得分:0)

tom10答案很好用...您还可以将欧拉公式扩展为:

def P2R(A, phi):
    return A * ( np.cos(phi) + np.sin(phi)*1j )