Предположим, у меня есть ссылка на 2D-массив numpy:

import numpy as np
v = np.array([1, 2])

Я хочу рассматривать его как вектор на 2D-плоскости с осями OX и OY. Мне любопытно, есть ли встроенный или довольно элегантный способ вычисления угла между вектором и осью OX? Угол должен быть от -PI до PI.

Я знаю, я мог вычислить с помощью numpy.arctan следующим образом:

def calc_phi(v):
    if v[0] > 0:
        return np.arctan(v[1] / v[0])
    else:
        if v[1] > 0:
            if v[0] < 0:
                return np.pi + np.arctan(v[1] / v[0])
            else:
                return np.pi
        elif v[1] < 0:
            if v[0] < 0:
                return -np.pi + np.arctan(v[1] / v[0])
            else:
                return -np.pi
        else:
            return 0.0

Но это не кажется изящным, потому что я должен отдельно рассматривать случаи x = 0 и x <0. Так что я думаю, что numpy, вероятно, имеет специальную функцию для его вычисления.

3
Fomalhaut 26 Ноя 2017 в 18:39

1 ответ

Лучший ответ