通过python获取矢量角度

时间:2018-07-16 09:12:00

标签: python performance numpy

我有一个病历列表。我想在每个向量中获取角度。

import numpy as np

v = np.array([[-3, 4],
              [-2, -5],
              [2, 6],
              [3, -10]])

inv = np.arctan(v[:, 1] / v[:, 0])
degree = np.degrees(inv)
print(degree)  # get [-53.13010235,  68.19859051,  71.56505118, -73.30075577]

# use arctan2
inv = np.arctan2(v[:, 1] / v[:, 0])
degree = np.degrees(inv)
print(degree)  # get [ 126.86989765, -111.80140949,   71.56505118,  -73.30075577]

但是我想得到[127,248,71,286](0〜360角)。 该怎么解决?

2 个答案:

答案 0 :(得分:2)

您可以使用模数来获取介于0-360之间的所有角度。

import numpy as np

v = [
    [-3, 4],
    [-2, -5],
    [2, 6],
    [3, -10],
]

v = np.array(v)
inv = np.degrees(np.arctan2(*v.T[::-1])) % 360.0
print(inv)

输出

[ 126.86989765  248.19859051   71.56505118  286.69924423]

答案 1 :(得分:1)

首先,您应该使用np.arctan2而不是np.arctan 因为前者负责选择正确的象限。
默认情况下,np.arctan2np.arctan返回值 在[-pi, pi]范围内,因此为了获得[0, 360]范围内的度数,您需要 可以使用degrees = np.mod(np.degrees(inv), 360)

import numpy as np

v = np.array([[-3, 4],
              [-2, -5],
              [2, 6],
              [3, -10]])

inv = np.arctan2(v[:, 1], v[:, 0])
degree = np.mod(np.degrees(inv), 360)
print(degree)  # get [-53.13010235,  68.19859051,  71.56505118, -73.30075577]