Python Numpy - Nombres Complexes - Est-il une fonction pour Polaires à Rectangulaires de conversion?

Existe-t-il une fonction Numpy intégrée pour convertir un nombre complexe sous forme polaire, une magnitude et un angle (degrés) en un nombre réel et imaginaire?

<!-Il est clair que je pourrais écrire le mien mais il semble que le type de chose pour laquelle il y a une version optimisée inclus dans un module?

Plus précisément, j'ai un tableau de grandeurs et d'une gamme d'angles:

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

Et ce que je voudrais, c'est:

>>> c
[(-0.5+0.8660254038j),(-0.515038074+0.8571673007j),(-0.5+0.8660254038j),(-0.5+0.8660254038j),(-0.515038074+0.8571673007j)]
12
demandé sur atomh33ls 2013-05-08 19:36:19

5 réponses

Il n'y a pas une fonction pour faire exactement ce que vous voulez, mais il y a angle, ce qui fait la partie la plus difficile. Ainsi, par exemple, on pourrait définir deux fonctions:

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

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

ces fonctions utilisent des radians pour l'entrée et la sortie, et pour les degrés, il faudrait faire la conversion en radians dans les deux fonctions.

Dans le numpy référence il y a une section sur la manipulation des nombres complexes, et c'est là que la fonction vous cherchez serait inscrit (donc comme ils ne sont pas là, Je ne pense pas qu'ils existent dans numpy).

8
répondu tom10 2014-04-18 20:36:38

Il y a une erreur dans la réponse précédente qui utilise numpy.vectorize - cmath.rect n'est pas un module qui peut être importé. Numpy fournit également la fonction degr2rad qui fournit un morceau de code plus propre pour la conversion d'angle. Une autre version de ce code pourrait être:

import numpy as np
from cmath import rect

nprect = np.vectorize(rect)

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

le code utilise la fonction vectorize de numpy pour retourner une version de style numpy de la bibliothèque standard cmath.rect fonction qui peut être appliquée element wise à travers les tableaux numpy.

3
répondu dyqik 2015-01-05 21:34:49

j'ai utilisé 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)]
1
répondu atomh33ls 2014-03-28 11:08:19
import numpy as np
import cmath.rect

nprect = np.vectorize(rect)

c = nprect(a,b*np.pi/180)
0
répondu Kees 2015-01-01 15:57:37

tom10 réponse fonctionne très bien... vous pouvez également étendre la formule D'Euler à:

def P2R(A, phi):
    return A * ( np.cos(phi) + np.sin(phi)*1j )
0
répondu Thomio 2018-06-27 02:27:21