Комбинируя некоторые другие решения здесь ...
Если вы укажете начало координат и / или точки как плавающие, вы можете использовать представление для них в качестве комплексных чисел, а затем просто вернуть угол по модулю 360 градусов:
points = points - origin
np.angle(points.view(np.complex), deg=True) % 360
>>> array([[189.92624551],
[188.53076561],
[187.12501635],
[185.71059314],
[184.28915333]])
Или, с операциями на месте, предполагая, что точки уже являются плавающей точкой:
np.subtract(points, origin, out=points)
v = points.view(np.complex)
np.arctan2(v.imag, v.real, out=v.real)
np.degrees(v.real, out=v.real)
np.mod(v.real, 360, out=v.real)
print(points[0]) # or print(v.real)
>>> array([[189.92624551],
[188.53076561],
[187.12501635],
[185.71059314],
[184.28915333]])
В этом случае мы не можем использовать angle
, потому что опция out
отсутствует, но мы можем вычислить arctan2 на месте в точках [0], с нашей точки зрения. При этом используется не больше памяти, чем в исходном (с плавающей запятой) массиве точек, и, хотя я не рассчитывал время, не нужно больше операций для вычисления.