2013-05-08 2 views
10

क्या वास्तविक और काल्पनिक घटकों में ध्रुवीय रूप, एक परिमाण और कोण (डिग्री) में एक जटिल संख्या को बदलने के लिए एक अंतर्निहित नम्पी फ़ंक्शन है?पायथन नम्पी - कॉम्प्लेक्स नंबर - क्या आयकर आयताकार रूपांतरण के लिए कोई कार्य है?

स्पष्ट रूप से मैं अपना खुद का लिख ​​सकता हूं लेकिन ऐसा लगता है कि कुछ मॉड्यूल में एक अनुकूलित संस्करण शामिल है?

>>> 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)] 
+1

मुझे संदेह है कि इसमें एक निर्मित कार्य है, लेकिन आप एक ऐसा फ़ंक्शन बना सकते हैं जो दो सरणी लेता है और रूपांतरण –

उत्तर

8

वहाँ वास्तव में क्या करना कार्य नहीं है

अधिक विशेष रूप से, मैं परिमाण की एक सरणी और कोण की एक सरणी है आप चाहते हैं, लेकिन angle है, जो सबसे कठिन हिस्सा है। तो, उदाहरण के लिए, एक से दो कार्यों को परिभाषित कर सकते हैं:

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

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

इन कार्यों इनपुट और आउटपुट के लिए रेडियंस उपयोग कर रहे हैं, और डिग्री के लिए, एक दोनों कार्यों में रेडियंस में रूपांतरण करने के लिए की आवश्यकता होगी।

numpy reference में जटिल संख्याओं को संभालने पर एक अनुभाग है, और यह वह जगह है जहां आप जिस फ़ंक्शन को खोज रहे हैं उसे सूचीबद्ध किया जाएगा (इसलिए जब वे वहां नहीं हैं, तो मुझे नहीं लगता कि वे numpy के भीतर मौजूद हैं)।

+1

'कोण' और 'पूर्ण' आपको आयताकार से ध्रुवीय तक ले जाता है, लेकिन मुझे नहीं पता वापस जाने के लिए एक रास्ता। – endolith

+1

@endolith: मैंने दोनों दिशाओं को जाने के लिए कार्यों को शामिल करने के लिए अपना उत्तर संपादित किया। (मैंने पहले इन्हें शामिल नहीं किया क्योंकि ओपी विशेष रूप से कह रहा था कि वह कुछ अंतर्निहित चीज़ ढूंढ रहा था।) – tom10

+0

आप 'आयाम * एक्स (1j * कोण_राडियन)' के साथ ध्रुवीय से आयताकार से "वापस आएं" - पायथन प्रिंट करेंगे और इसे आयताकार परिसर के रूप में स्टोर करें, और आप '() .real /()। imag' का उपयोग कर सकते हैं। – Demis

1

मैं itertools साथ cmath प्रयोग किया है:

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

nprect = np.vectorize(rect) 

c = nprect(a,b*np.pi/180) 
+1

शायद आप दूसरों की मदद के लिए अपने कोड में क्या चल रहा है, यह समझा सकते हैं। यह वास्तव में कैसे काम करता है? –

3

वहाँ पिछले जवाब का उपयोग करता है 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 फ़ंक्शन का उपयोग करता मानक लाइब्रेरी की cmath.rect समारोह है कि NumPy सरणी भर में बुद्धिमान तत्व लागू किया जा सकता का एक numpy शैली संस्करण वापस जाने के लिए।

संबंधित मुद्दे