2017-07-27 3 views
0

lassen Sie uns sagen, ich habe eine numpy Matrix A die Nx2 der Größe ist. Was ich tue, ist die Berechnung der 4-Quadranten-Arkustangens der ersten Säule und der zweiten Säule, wie so:Vectorized Beispiel der Math.atan2() Funktion in Python

import math 
for i in xrange(A.shape[0]): 
    phase[i] = math.atan2(A[i,0], A[i,1]) 

ich aber dies in einer vektorisierten Weise tun möchten. Wie kann ich das machen? Die Funktion math.atan2() scheint die Vektorisierung nicht zu unterstützen.

Danke!

Antwort

5

Es sieht für mich wie es nur sein sollte:

import numpy as np 
phase = np.arctan2(A[:, 0], A[:, 1]) 

Oder vielleicht (wenn phase eine andere Länge als A aus irgendeinem Grunde ist):

phase[:len(A)] = np.arctan2(A[:, 0], A[:, 1]) 

Mit anderen Worten, don ‚t verwenden math.atan2, verwenden numpy.arctan2 seit numpy Funktionen im allgemeinen Versionen ihrer math Pendants vektorisiert werden.

+0

weiß nicht, wie ich das verpasst. Vielen Dank! – TheGrapeBeyond

+0

Gibt es eine Möglichkeit für mich, es zu machen Ergebnisse geben, wo die Winkel von 0 bis 360 sind? – TheGrapeBeyond

+1

Check out [ 'np.rad2deg'] (https://docs.scipy.org/doc/numpy/reference/generated/numpy.rad2deg.html#numpy.rad2deg). Und vergiss nicht, die Antwort von @mgilson zu akzeptieren (klicke auf den Haken) –