菜鸟笔记
提升您的技术认知

向量和矩阵的点乘和叉乘

向量

定义:向量是由N个实数组成的一行N列或N行一列的的数组。

  • 点乘:又叫做点积、内积、数量积、标量积,向量a[a1,a2,...,an]和向量b[b1,b2b...,bn]点乘的结果是一个标量,记作a.b

几何解释:a.b = |a| |b| ,故而点乘可以计算出两个向量的夹角,且向量垂直,点乘结果为零。

  • 叉乘:又叫向量积、外积、叉积,叉乘,向量a[x1,y1,z1]和向量b[x2,y2,z2]叉乘的运算结果是一个向量,并且两个向量的叉积与这两个向量组成的坐标平面垂直,记作axb

计算方式:利用行列式方式,设i[1,0,0],j[0,1,0],k[0,0,1],则如下图:

几何解释:axb =  |a| |b| ,故两个向量平行,则其叉乘等于零。

几何意义:叉积的长度|a×b|可以解释成这两个叉乘向量ab共起点时,所构成平行四边形的面积。

Numpy实现向量的点乘和叉乘

点乘需要用到numpy库的dot函数,得到一个标量。叉乘需要用到numpy库的cross函数。

In [1]: import numpu as np   
In [2]: a = np.array([1,2,3]) 
In [3]: b = np.array([2,2,3])   
In [4]: np.dot(a,b)  
Out[4]: 15
In [5]: np.cross(a,b)                                                                                                                                            
Out[5]: array([ 0,  3, -2])

矩阵直接使用*相乘的处理方式是向量对应位置相乘,维数不变,它与np.multiply函数效果一样,均是元素相乘。

In [6]: a*b               
Out[6]: array([2, 4, 9])
In [7]: np.multiply(a,b)                                                                
Out[7]: array([2, 4, 9])

矩阵

定义:是一个按照长方阵列排列的复数或实数集合。

  • 矩阵点乘:是矩阵各个对应元素相乘, 这个时候要求两个矩阵必须同样大小。
  • 矩阵叉乘:矩阵的乘法就是矩阵a的第m行乘以矩阵b的第n列,各个元素对应相乘然后求和作为第m行n列元素的值。

Numpy实现矩阵的点乘和叉乘

矩阵的点乘直接使用*号即可,也可以使用 numpy库的multiply函数,叉乘使用dot函数,这与向量相反

In [1]: a = np.array([[1,2],[3,4]])                 
In [2]: b = np.array([[5,6],[7,8]]) 
In [3]: a*b                                                                                
Out[3]: 
array([[ 5, 12],
       [21, 32]])
In [4]: np.dot(a,b)                                                
Out[4]: 
array([[19, 22],
       [43, 50]])
In [34]: np.multiply(a,b)                                                                                                                                         
Out[34]: 
array([[ 5, 12],
       [21, 32]])

总结Numpy库

numpy库的对象有数组和矩阵,两者看起来长得差不多,但在性质、运算上有很大不同。可通过array函数mat函数相互转化。

  • dot函数

对于秩为1的数组,执行对应位置相乘,然后再相加,等价于向量的点乘

对于秩不为1的二维数组,执行矩阵乘法运算,等价于矩阵的叉乘

  • multiply函数

数组和矩阵对应位置相乘,输出与相乘数组/矩阵的大小一致,效果上与运算符*对数组效果一样。

  • 运算符*号

对数组执行对应位置相乘,等价于multiply函数

对矩阵执行矩阵乘法运算,等价于dot函数