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)]
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).
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.
import numpy as np
import cmath.rect
nprect = np.vectorize(rect)
c = nprect(a,b*np.pi/180)
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 )