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

ato*_*3ls 16 python numpy complex-numbers

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

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

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

>>> a
array([1, 1, 1, 1, 1])
>>> b
array([120, 121, 120, 120, 121])
Run Code Online (Sandbox Code Playgroud)

我想要的是:

>>> c
[(-0.5+0.8660254038j),(-0.515038074+0.8571673007j),(-0.5+0.8660254038j),(-0.5+0.8660254038j),(-0.515038074+0.8571673007j)]
Run Code Online (Sandbox Code Playgroud)

tom*_*m10 13

没有一个功能可以完全按照你想要的那样做,但是有角度,这是最难的部分.因此,例如,可以定义两个函数:

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

def R2P(x):
    return abs(x), angle(x)
Run Code Online (Sandbox Code Playgroud)

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

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

  • @endolith:我编辑了我的答案以包含双向的功能。(我之前没有包括这些,因为 OP 特意说他正在寻找内置的东西。) (2认同)
  • 为了避免混淆,我将更改答案以使用 numpy 中的显式函数,例如 `np.absolute` 而不是 `abs`,因为后者也是一个内置函数。 (2认同)

小智 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))
Run Code Online (Sandbox Code Playgroud)

该代码使用 numpy 的向量化函数返回标准库函数的 numpy 样式版本,cmath.rect该函数可以跨 numpy 数组按元素应用。