2013-05-08 54 views
10

Có chức năng Numpy tích hợp để chuyển đổi một số phức ở dạng cực, độ lớn và góc (độ) thành một trong các thành phần thực và tưởng tượng không?Python Numpy - Số phức - Có chức năng chuyển đổi Polar sang Rectangular không?

Rõ ràng tôi có thể viết của riêng mình nhưng có vẻ như loại điều mà trong đó có một phiên bản được tối ưu hóa được bao gồm trong một số mô-đun?

Cụ thể hơn, tôi có một loạt các độ lớn và một loạt các góc độ:

>>> a 
array([1, 1, 1, 1, 1]) 
>>> b 
array([120, 121, 120, 120, 121]) 

Và những gì tôi muốn là:

>>> c 
[(-0.5+0.8660254038j),(-0.515038074+0.8571673007j),(-0.5+0.8660254038j),(-0.5+0.8660254038j),(-0.515038074+0.8571673007j)] 
+1

Tôi nghi ngờ rằng có một hàm dựng sẵn, nhưng bạn có thể thực hiện một hàm nhận hai mảng và thực hiện chuyển đổi –

Trả lời

8

Không có một chức năng để thực hiện chính xác những gì bạn muốn, nhưng có angle, phần nào khó nhất. Vì vậy, ví dụ: người ta có thể xác định hai chức năng:

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

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

Các chức năng này sử dụng radian cho đầu vào và đầu ra và cho độ, cần phải thực hiện chuyển đổi sang radian ở cả hai chức năng.

Trong sốcó một phần xử lý các số phức và đây là nơi hàm bạn đang tìm kiếm sẽ được liệt kê (vì chúng không có ở đó, tôi không nghĩ chúng tồn tại trong vòng).

+1

'angle' và' absolute' đưa bạn từ hình chữ nhật sang cực, nhưng tôi không biết một cách để quay trở lại. – endolith

+1

@endolith: Tôi đã chỉnh sửa câu trả lời của mình để bao gồm các chức năng đi cả hai hướng. (Tôi không bao gồm những điều này trước đây bởi vì OP đã nói cụ thể là anh ấy đang tìm kiếm thứ gì đó được tích hợp sẵn.) – tom10

+0

Bạn có thể "lấy lại" từ cực sang hình chữ nhật với 'Amplitude * exp (1j * Angle_Radians) '- python sẽ in và lưu trữ vùng phức tạp hình chữ nhật này và bạn có thể sử dụng '() .real /(). imag'. – Demis

1

tôi đã sử dụng cmath với itertools:

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

Có lẽ bạn có thể giải thích những gì đang xảy ra trong mã của bạn, để giúp đỡ người khác. Tính năng này hoạt động chính xác như thế nào? –

3

Có một lỗi trong câu trả lời trước đó sử dụng numpy.vectorize - cmath.rect được không phải là một mô-đun có thể được nhập khẩu. Numpy cũng cung cấp chức năng deg2rad cung cấp một đoạn mã sạch hơn cho việc chuyển đổi góc. Một phiên bản của mã mà có thể là:

import numpy as np 
from cmath import rect 

nprect = np.vectorize(rect) 

c = nprect(a, np.deg2rad(b)) 

Mã này sử dụng chức năng vectorize NumPy để trả về một phiên bản phong cách NumPy chức năng cmath.rect thư viện chuẩn của có thể áp dụng yếu tố khôn ngoan trên mảng NumPy.

Các vấn đề liên quan