python中求两个向量的夹角方式
作者:sugar椰子皮
这篇文章主要介绍了python中求两个向量的夹角方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
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的值再反过来计算,绝对长度乘以cos角度为矢量长度,初中知识。。 print(cos_angle) angle=np.arccos(cos_angle) angle2=angle*360/2/np.pi #变为角度 print(angle2) #x.dot(y) = y=∑(ai*bi)
矩阵相乘的算法
>> a=[1,2,3;4,5,6;7,8,9]; >> b=[6,6,6;6,6,6;6,6,6]; >> dot(a, ans = 72 90 108 1*6+4*6+7*6=72 #三个相加 #dot 是矩阵相乘 #print(np.dot(x,x)) #34 # a=np.linalg.norm(x-y) # print(a) costheta=x.dot(y)/(np.linalg.norm(x)*np.linalg.norm(y)) #范数 # #[-1 3] # a=np.square(x-y) # #[1,9] # print(np.sum(a)) # #10 # print(np.sqrt(10))
NumPy.array求点乘,向量长度,向量夹角的方法
求点乘方法有
- 1. np.sum(a*b)
- 2. (a*b).sum()
- 3. np.dot(a, b)
- 4. a.dot(b)
- 5. b.dot(a)
求向量长度方法有
- 1. np.sqrt((a*a).sum())
- 2. np.linalg.norm(a)
求两个向量夹角
根据点乘定义,cosangle = a.dot(b)/(np.linalg.norm(a) * np.linalg.norm(b))
In [25]: a = np.array([1,2]) In [26]: b = np.array([2, 1]) In [27]: dot = 0 In [28]: for e, f in zip(a, b): ...: dot += e*f ...: In [29]: dot Out[29]: 4 In [30]: a*b Out[30]: array([2, 2]) In [31]: np.sum(a*b) Out[31]: 4 In [32]: (a*b).sum() Out[32]: 4 In [33]: np.dot(a,b) Out[33]: 4 In [34]: a.dot(b) Out[34]: 4 In [35]: b.dot(a) Out[35]: 4 In [36]: amag = np.sqrt((a*a).sum()) In [37]: amag Out[37]: 2.23606797749979 In [38]: amag = np.linalg.norm(a) In [39]: amag Out[39]: 2.23606797749979 In [40]: cosangle = a.dot(b)/(np.linalg.norm(a) * np.linalg.norm(b)) In [41]: cosangle Out[41]: 0.7999999999999998 In [42]: angle = np.arccos(cosangle) In [43]: angle Out[43]: 0.6435011087932847
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。