web-dev-qa-db-ja.com

Python Numpy-複素数-極から長方形への変換のための関数はありますか?

極座標形式の複素数、大きさ、角度(度)を実数部と虚数部の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)]
16
atomh33ls

思い通りのことを行う関数はありませんが、角度があり、最も難しい部分を実行します。したがって、たとえば、2つの関数を定義できます。

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

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

これらの関数は入力と出力にラジアンを使用しており、度数の場合、両方の関数でラジアンへの変換を行う必要があります。

Numpy reference には、複素数の処理に関するセクションがあり、ここにあなたが探している関数がリストされます(したがって、そこにないので、それらは中にはないと思いますnumpy)。

12
tom10

以前の回答に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スタイルバージョンを返します。

4
dyqik

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)]
1
atomh33ls
import numpy as np
import cmath.rect

nprect = np.vectorize(rect)

c = nprect(a,b*np.pi/180)
0
Kees

tom10の答えはうまくいきます...オイラーの公式を次のように拡張することもできます:

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