![机器学习数学基础](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=1739273364-r3ND2LEIKgZ0Wq8XGiMWmB8PTa0dMsRq-0-54fb9f7bc8a553316870af170a6b7ee6)
(1.4.2)
容易验证,这个内积的形式也符合内积的公理,所以就构成了一个内积空间。这个内积空间,也就是我们常说的欧几里得空间(简称欧氏空间,Euclidean Space)。
通常,也将(1.4.2)式的函数形式写成:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_483.jpg?sign=1739273364-g0NtuAbPulXtNcXAUVgMPfmHBCTQbx68-0-fb4414eb955a6b81453f91d6facd0bb3)
(1.4.3)
正如它的书写样式那样,人们给它取了另外一个名称:点积(Dot Product)。
这里特别提醒读者注意,有的资料把“点积”与“内积”混用,认为它们是一个对象的不同名称。经过以上阐述应该明确,点积是内积的一种具体形式,只不过根据这个定义,得到了最常见的内积空间——欧几里得空间。而我们所遇到的绝大多数问题,都是在欧几里得空间,这或许就是人们容易把两者混淆的原因吧。也是因为这个原因,在本书的后续内容中,如果不特别声明,都是在欧几里得空间。
为了深刻理解点积运算的含义,下面以我们最熟悉的平面空间中的两个向量为例,以
为基并创建直角坐标系,则向量中的
即为相应的坐标。按照点积的定义(1.4.3)式:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_487.jpg?sign=1739273364-qhQNXZU0v7G7hV3nqdC9w2KcFMJ7kegO-0-27dfbf82b724a4a5a7c172ac6eafbd96)
即为相应坐标积的和,这是代数形式的定义,此外,还有一种几何形式的定义:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_488.jpg?sign=1739273364-3T6K4CyynpvC4QPCsU4w76ydqMbKR2uz-0-29808f0e942096a18d4a3a8bd5c8b90a)
其中分别为两个向量的大小,
是两个向量的夹角。
其实,这两种定义是等效的。如图1-4-1所示,两个向量与轴夹角分别为
,且
。
因为,所以:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_495.jpg?sign=1739273364-1ZgEkbMP62VF6so64dN3LX4nlEkoZDAd-0-268971121caf76fe24b08406b0ec2072)
根据几何形式的定义,可以将两个向量的内积理解为一个向量的大小与另外一个向量
在
的方向上的投影
的乘积。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_500.jpg?sign=1739273364-Z8r0wkUIPvBGQhzElSVlpbnPMfimcB0M-0-64ac89fa22e71cdb126af3a7e9f8e30e)
图1-4-1
点积的一个典型应用就是计算力所做的功:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_501.jpg?sign=1739273364-3m5zWCGxgU13oy0EoRtkOXVRXPdsXP4d-0-4839aeef70a6c4c92d0d54d6168aa621)
在具体计算的过程中,按照上述代数形式或者几何形式均可。
由于定义了点积,从而构建了欧几里得空间,其中的点、线、面关系符合欧几里得几何的原理,因此我们所熟悉的距离、角度等概念都可以在此基础上有明确的定义了,这些内容在1.5节继续探讨。
很多关于向量运算的资料,在说明点积的同时,会提到另外一种名为叉积的向量运算,在1.2.1节已经介绍过叉积的概念。从本节的角度来看,叉积并不能定义内积空间,请读者不要将两者混淆。
手工计算向量的点积,可以依据(1.4.3)式完成,我们在这里不对此做重点介绍,因为这是诸多线性代数教材中都少不了的。下面要演示的是如何用程序实现点积计算。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_502.jpg?sign=1739273364-NJFtHsflgKXXifIvQPZgwHYBbiQ8YGam-0-d93c7eb09fccfe7d9b78ace0be2dc4a1)
此处用一维数组表示向量,函数np.dot()实现了点积运算。在NumPy中还有另外一个名为inner的函数,它并非专用于实现前述“内积”运算。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_503.jpg?sign=1739273364-13tMcVsMogkEltw726yIodgKNyDzxRTF-0-78bd2a15308ed72ce1b9230908214f5c)
对于一维数组而言,np.inner()和np.dot()的计算结果一样。但是,对于非一维数组,则有所不同。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_504.jpg?sign=1739273364-vtbdLVOWdBPGhmm9zWLH2wxR1qu1II6U-0-78751646481df2a53fc211a94bebcea0)
np.dot()计算点积的过程如下:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_505.jpg?sign=1739273364-f7IAJqPMCgePSk563zK9suCYXuehKSa9-0-7a5cd077e18d49098c759c4bcacd9468)
显然,np.dot()所进行的点积计算与矩阵乘法一致(参阅2.1.5节)。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_506.jpg?sign=1739273364-W9zPZhKPlqdvJvamMM5KDk5SjnMwNeu2-0-d6c0dd5217b259e075d1e37a302a08fe)
np.inner()的计算过程如下:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt001_507.jpg?sign=1739273364-BbAAwVMfKMb5iMlVMubzLmbywh5xMt5T-0-7353c017f8bdbfb726ad3be6b8156778)
请注意比较两个函数的差异。
此外,Pandas的Series对象和DataFrame对象也都有名为dot()的方法实现点积运算。