極座標形式の複素数、大きさ、角度(度)を実数部と虚数部の1つに変換する組み込みの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)]
思い通りのことを行う関数はありませんが、角度があり、最も難しい部分を実行します。したがって、たとえば、2つの関数を定義できます。
def P2R(radii, angles):
return radii * exp(1j*angles)
def R2P(x):
return abs(x), angle(x)
これらの関数は入力と出力にラジアンを使用しており、度数の場合、両方の関数でラジアンへの変換を行う必要があります。
Numpy reference には、複素数の処理に関するセクションがあり、ここにあなたが探している関数がリストされます(したがって、そこにないので、それらは中にはないと思いますnumpy)。
以前の回答に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関数を使用して、numpy配列全体に要素ごとに適用できる標準ライブラリのcmath.rect
関数のnumpyスタイルバージョンを返します。
import numpy as np
import cmath.rect
nprect = np.vectorize(rect)
c = nprect(a,b*np.pi/180)
tom10の答えはうまくいきます...オイラーの公式を次のように拡張することもできます:
def P2R(A, phi):
return A * ( np.cos(phi) + np.sin(phi)*1j )