求取 numpy 向量夾角可以使用 numpy.arctan2 函式;
從而避免了特殊值帶來的角度錯誤;
例項:
# 初始化向量
a = np.array([-
1.0,
1.0]
)b = np.array(
[0.0
,1.0])
# 單位化(可以不用這一步)
a /= norm(a)
b /= norm(b)
# 夾角cos值
cos_ = np.dot(a,b)
/(norm(a)
*norm(b)
)# 夾角sin值
sin_ = np.cross(a,b)
/(norm(a)
*norm(b)
)arctan2_ = np.arctan2(sin_, cos_)
print
("向量{}相對於向量{}的夾角是,即 pi"
.format
(a,b,arctan2_,arctan2_/np.pi)
)
舉例結果:
向量[1.
1.]相對於向量[0.
1.]的夾角是0.785,即0.250 pi
向量[1.0
.]相對於向量[0.
1.]的夾角是1.571,即0.500 pi
向量[-1.
1.]相對於向量[0.
1.]的夾角是-
0.785,即-
0.250 pi
成功將向量的夾角轉為 [-pi, +pi] 這個區間
原始碼:
a = np.array([-
1.0,
1.0]
)a /= norm(a)
b = np.array(
[0.0
,1.0])
b /= norm(b)
cos_ = np.dot(a,b)
/(norm(a)
*norm(b)
)sin_ = np.cross(a,b)
/(norm(a)
*norm(b)
)arctan2_ = np.arctan2(sin_, cos_)
print
("向量{}相對於向量{}的夾角是,即 pi"
.format
(a,b,arctan2_,arctan2_/np.pi)
)
python求兩個向量的夾角
import numpy as np x np.array 3,5 y np.array 4,2 兩個向量 lx np.sqrt x.dot x ly np.sqrt y.dot y 相當於勾股定理,求得斜線的長度 cos angle x.dot y lx ly 求得cos sita的值再反過來計算...
python 求兩個向量的順時針夾角
以上述舉例,要求 ob vec ob相對 oa vec oa的順時針夾角。注意 這裡使用影象座標系 1 定義求順時針角度的函式 import numpy as np defclockwise angle v1,v2 x1,y1 v1 x2,y2 v2 dot x1 x2 y1 y2 det x1 y...
洛谷P4137 求區間mex
n個數 給m個詢問 每個詢問問這個區間的自然數mex 很久以前做得 有些忘了 首先我們要離散化 mex只可能是 0 a i a i 1 我們把這些值離散化 然後用主席樹維護每種值出現的最晚位置 取min 詢問就是 在r的這顆樹上面 出現最晚位置小於l的最小值 直接在主席樹上二分即可 includeu...