![机器学习数学基础](https://wfqqreader-1252317822.image.myqcloud.com/cover/482/43738482/b_43738482.jpg)
1.4.2 点积和欧几里得空间
设有内积空间中的两个向量,将它们的内积定义为:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_482.jpg?sign=1739496465-aPWVsMHonDfG7l8VduFqfUkfeAKUq6UG-0-7c0d746db175718a8576b3f97db24ddf)
(1.4.2)
容易验证,这个内积的形式也符合内积的公理,所以就构成了一个内积空间。这个内积空间,也就是我们常说的欧几里得空间(简称欧氏空间,Euclidean Space)。
通常,也将(1.4.2)式的函数形式写成:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_483.jpg?sign=1739496465-64SCjX82O9OZeWFDNez3zZsy5wdcVy4m-0-f7409c67b539c568eae09ce73640897b)
(1.4.3)
正如它的书写样式那样,人们给它取了另外一个名称:点积(Dot Product)。
这里特别提醒读者注意,有的资料把“点积”与“内积”混用,认为它们是一个对象的不同名称。经过以上阐述应该明确,点积是内积的一种具体形式,只不过根据这个定义,得到了最常见的内积空间——欧几里得空间。而我们所遇到的绝大多数问题,都是在欧几里得空间,这或许就是人们容易把两者混淆的原因吧。也是因为这个原因,在本书的后续内容中,如果不特别声明,都是在欧几里得空间。
为了深刻理解点积运算的含义,下面以我们最熟悉的平面空间中的两个向量为例,以
为基并创建直角坐标系,则向量中的
即为相应的坐标。按照点积的定义(1.4.3)式:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_487.jpg?sign=1739496465-qTpaEqAOJj5wP6bbBYEM83gaSUE4CXEK-0-6b37d7b86c8dec3b1af801782f6702e0)
即为相应坐标积的和,这是代数形式的定义,此外,还有一种几何形式的定义:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_488.jpg?sign=1739496465-uLOqfxfVtyl18i6xkLItgRlUy2jP09DK-0-e4a400e7fefa4e02778f54770ec6db79)
其中分别为两个向量的大小,
是两个向量的夹角。
其实,这两种定义是等效的。如图1-4-1所示,两个向量与轴夹角分别为
,且
。
因为,所以:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_495.jpg?sign=1739496465-pDQMST9kzpukLX1kmnZfb9iDZxlYN5NO-0-38e392d480e54aadb206eecdadd00cad)
根据几何形式的定义,可以将两个向量的内积理解为一个向量的大小与另外一个向量
在
的方向上的投影
的乘积。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_500.jpg?sign=1739496465-JK2Js3wP6pzdLaVFwimD0MQT2GvDvRZD-0-35ed5db8467ac99b537e4d54b5c703ac)
图1-4-1
点积的一个典型应用就是计算力所做的功:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_501.jpg?sign=1739496465-2EUm3hPEJVqezma3T1YTVK3ziIicOrPl-0-6a177b3fad86b5cef0353f6de9e56256)
在具体计算的过程中,按照上述代数形式或者几何形式均可。
由于定义了点积,从而构建了欧几里得空间,其中的点、线、面关系符合欧几里得几何的原理,因此我们所熟悉的距离、角度等概念都可以在此基础上有明确的定义了,这些内容在1.5节继续探讨。
很多关于向量运算的资料,在说明点积的同时,会提到另外一种名为叉积的向量运算,在1.2.1节已经介绍过叉积的概念。从本节的角度来看,叉积并不能定义内积空间,请读者不要将两者混淆。
手工计算向量的点积,可以依据(1.4.3)式完成,我们在这里不对此做重点介绍,因为这是诸多线性代数教材中都少不了的。下面要演示的是如何用程序实现点积计算。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_502.jpg?sign=1739496465-CwBTtOsQ0t75NKPTECZJzSerI8L8lZJ1-0-3555002913db989f8ffc8ab772abb055)
此处用一维数组表示向量,函数np.dot()实现了点积运算。在NumPy中还有另外一个名为inner的函数,它并非专用于实现前述“内积”运算。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_503.jpg?sign=1739496465-jMeb34ixyU8pMmxRGrEvMeokk068A3Gd-0-2f55149926934d25bc6c3fe0ff01e783)
对于一维数组而言,np.inner()和np.dot()的计算结果一样。但是,对于非一维数组,则有所不同。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_504.jpg?sign=1739496465-l9qPQ5BVeoroZ5aJ3vUiXZW1QjjzR4E6-0-e4ee8cdc1bb8d7f13016928617832c79)
np.dot()计算点积的过程如下:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_505.jpg?sign=1739496465-Yfev8kkztnSd3eEaoi3xx0mifjr3rTSm-0-fa74e4f3863f169bc03b72bc7aa860bd)
显然,np.dot()所进行的点积计算与矩阵乘法一致(参阅2.1.5节)。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_506.jpg?sign=1739496465-MiyUtCZxKXJfwdFxIf9j29vKLdrr9ESF-0-2d8a66444c781179ff17e3d476c0d268)
np.inner()的计算过程如下:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_507.jpg?sign=1739496465-yjTIvHu0ZmOXJTDgb726tACmOlzHOdot-0-7d6a0428fb4c1289e60052c02459c88f)
请注意比较两个函数的差异。
此外,Pandas的Series对象和DataFrame对象也都有名为dot()的方法实现点积运算。