Existe-t-il une fonction Numpy intégrée permettant de convertir un nombre complexe sous forme polaire, une magnitude et un angle (degrés) en un nombre en composants réels et imaginaires?
Clairement, je pourrais écrire le mien, mais il semble que ce soit le type de chose pour lequel une version optimisée est incluse dans certains modules.
Plus précisément, j'ai un tableau de grandeurs et un tableau d'angles:
>>> a
array([1, 1, 1, 1, 1])
>>> b
array([120, 121, 120, 120, 121])
Et ce que j'aimerais, c'est:
>>> c
[(-0.5+0.8660254038j),(-0.515038074+0.8571673007j),(-0.5+0.8660254038j),(-0.5+0.8660254038j),(-0.515038074+0.8571673007j)]
Il n'y a pas de fonction pour faire exactement ce que vous voulez, mais il y aangle, 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 effectuer la conversion en radians dans les deux fonctions.
Dans numpy référence , il y a une section sur la gestion des nombres complexes, et c’est là que la fonction que vous recherchez serait répertoriée (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 pouvant être importé. Numpy fournit également la fonction deg2rad 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 renvoyer une version de style numpy de la fonction cmath.rect
de la bibliothèque standard qui peut être appliquée élément par élément dans des tableaux numpy.
import numpy as np
import cmath.rect
nprect = np.vectorize(rect)
c = nprect(a,b*np.pi/180)
tom10 answer fonctionne bien ... vous pouvez également développer la formule d'Euler pour:
def P2R(A, phi):
return A * ( np.cos(phi) + np.sin(phi)*1j )