我有一个病历列表。我想在每个向量中获取角度。
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角)。 该怎么解决?
答案 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.arctan2
和np.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]