内积
最“著名”的向量运算可能就是计算内积(标量积、点乘)了。两个向量的内积记为
内积等于两个n元向量按元素相乘后求和的结果。
向量内积的分计算代码如下:
>>> b = np.array([5,6,7,8])
>>> a = np.array([1,2,3,4])
>>> def inner(a,b):
... s = 0.0
... for i in range(len(a)):
... s += a[i]*b[i]
... return s
...
>>> inner(a,b)
np.float64(70.0)
在上述代码中,a和b是NumPy数组,因此我们有如下更高效的方案:
>>> (a*b).sum()
np.int64(70)
还有更高效的方式是让NumPy为我们做一切,如下所示:
>>> np.dot(a,b)
np.int64(70)
在深度学习领域的代码频繁看到np.dot函数,很快你就会明白,np.dot函数实现的不仅仅是内积。
可以计算两个夹角的夹角公式
实现代码如下:
>>> A = np.sqrt(np.dot(a,a))
>>> B = np.sqrt(np.dot(b,b))
>>> t = np.arccos(np.dot(a,b)/(A*B))
>>> t*(180/np.pi)
np.float64(14.335170291600924)
计算出a和b的夹角约为14度(这里将弧度转换成了角度)。
考虑三维空间中的向量,垂直的点乘结果为0,这意味着它们的夹角为90度:
>>> a = np.array([1,0,0])
>>> b = np.array([0,1,0])
>>> np.dot(a,b)
np.int64(0)
>>> t = np.arccos(0)
>>> t*(180/np.pi)
np.float64(90.0)
>>>
上面输出结果是正确的,因为a是沿X轴的单位向量,b是沿y轴的单位向量,它们之间的夹角为直角。
|