26

是否有内置的 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)]
4

5 回答 5

28

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

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

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

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

在 numpy参考中有一个关于处理复数的部分,这是列出您要查找的函数的地方(因此,由于它们不存在,我认为它们不存在于 numpy 中)。

于 2013-05-08T15:51:16.510 回答
5

上一个使用的答案有错误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 数组中逐元素应用。

于 2015-01-05T21:34:49.947 回答
1

I used cmath with 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)]
于 2013-05-08T16:11:04.870 回答
0
import numpy as np
import cmath.rect

nprect = np.vectorize(rect)

c = nprect(a,b*np.pi/180)
于 2015-01-01T15:57:37.947 回答
0

tom10 答案工作正常...您还可以将欧拉公式扩展为:

def P2R(A, phi):
    return A * ( np.cos(phi) + np.sin(phi)*1j )
于 2018-06-27T02:27:21.873 回答