向量
定义:向量是由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|可以解释成这两个叉乘向量a,b共起点时,所构成平行四边形的面积。
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函数;