1.4.2 点积和欧几里得空间
设有内积空间中的两个向量,将它们的内积定义为:
(1.4.2)
容易验证,这个内积的形式也符合内积的公理,所以就构成了一个内积空间。这个内积空间,也就是我们常说的欧几里得空间(简称欧氏空间,Euclidean Space)。
通常,也将(1.4.2)式的函数形式写成:
(1.4.3)
正如它的书写样式那样,人们给它取了另外一个名称:点积(Dot Product)。
这里特别提醒读者注意,有的资料把“点积”与“内积”混用,认为它们是一个对象的不同名称。经过以上阐述应该明确,点积是内积的一种具体形式,只不过根据这个定义,得到了最常见的内积空间——欧几里得空间。而我们所遇到的绝大多数问题,都是在欧几里得空间,这或许就是人们容易把两者混淆的原因吧。也是因为这个原因,在本书的后续内容中,如果不特别声明,都是在欧几里得空间。
为了深刻理解点积运算的含义,下面以我们最熟悉的平面空间中的两个向量为例,以为基并创建直角坐标系,则向量中的即为相应的坐标。按照点积的定义(1.4.3)式:
即为相应坐标积的和,这是代数形式的定义,此外,还有一种几何形式的定义:
其中分别为两个向量的大小,是两个向量的夹角。
其实,这两种定义是等效的。如图1-4-1所示,两个向量与轴夹角分别为,且。
因为,所以:
根据几何形式的定义,可以将两个向量的内积理解为一个向量的大小与另外一个向量在的方向上的投影的乘积。
图1-4-1
点积的一个典型应用就是计算力所做的功:
在具体计算的过程中,按照上述代数形式或者几何形式均可。
由于定义了点积,从而构建了欧几里得空间,其中的点、线、面关系符合欧几里得几何的原理,因此我们所熟悉的距离、角度等概念都可以在此基础上有明确的定义了,这些内容在1.5节继续探讨。
很多关于向量运算的资料,在说明点积的同时,会提到另外一种名为叉积的向量运算,在1.2.1节已经介绍过叉积的概念。从本节的角度来看,叉积并不能定义内积空间,请读者不要将两者混淆。
手工计算向量的点积,可以依据(1.4.3)式完成,我们在这里不对此做重点介绍,因为这是诸多线性代数教材中都少不了的。下面要演示的是如何用程序实现点积计算。
此处用一维数组表示向量,函数np.dot()实现了点积运算。在NumPy中还有另外一个名为inner的函数,它并非专用于实现前述“内积”运算。
对于一维数组而言,np.inner()和np.dot()的计算结果一样。但是,对于非一维数组,则有所不同。
np.dot()计算点积的过程如下:
显然,np.dot()所进行的点积计算与矩阵乘法一致(参阅2.1.5节)。
np.inner()的计算过程如下:
请注意比较两个函数的差异。
此外,Pandas的Series对象和DataFrame对象也都有名为dot()的方法实现点积运算。