【问题标题】:Python Numpy - Complex Numbers - Is there a function for Polar to Rectangular conversion?Python Numpy - 复数 - 是否有将极坐标转换为矩形的功能?
【发布时间】:2013-05-08 15:36:19
【问题描述】:

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

【问题讨论】:

  • 我怀疑是否有内置的 numpy 函数,但您可以创建一个函数来获取两个数组并进行转换

标签: python numpy complex-numbers


【解决方案1】:

没有一个功能可以完全满足您的需求,但有 angle,它完成了最困难的部分。因此,例如,可以定义两个函数:

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

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

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

在 numpy reference 中有一个关于处理复数的部分,这就是您要查找的函数的列出位置(因此,由于它们不存在,我认为它们不存在于 numpy 中) .

【讨论】:

  • angleabsolute 让您从矩形到极地,但我不知道如何返回。
  • @endolith:我编辑了我的答案以包含双向功能。 (我之前没有包括这些,因为 OP 明确表示他正在寻找内置的东西。)
  • 您可以使用 Amplitude*exp(1j*Angle_Radians) 从极坐标“返回”到矩形 - python 会将其打印并存储为矩形复形,您可以使用 ().real/().imag
  • 为避免混淆,我会更改答案以使用 numpy 中的显式函数,例如np.absolute 而不是 abs,因为后者也是一个内置函数。
  • @BasSwinckels:这肯定是运算符重载的确切原因,也是 numpy 使用__abs__ 方法的原因。
【解决方案2】:

上一个使用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 数组中逐元素应用。

【讨论】:

    【解决方案3】:

    我将cmathitertools 一起使用:

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

    【讨论】:

      【解决方案4】:
      import numpy as np
      import cmath.rect
      
      nprect = np.vectorize(rect)
      
      c = nprect(a,b*np.pi/180)
      

      【讨论】:

      • 也许您可以解释一下您的代码中发生了什么,以帮助其他人。这究竟是如何工作的?
      【解决方案5】:

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

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

      【讨论】:

        猜你喜欢
        • 2021-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多