....
老师教的差不多全还回去了。
向量
向量点积
点积(Dot product)也叫标量积(Scalar product)。在Euclidean空间也称内积(Inner product)。对应元素相乘后相加,结果是一个标量,也就是一个数。
对于向量\vec {a} = (a_1, a_2), \vec {b} = (b_1,b_2)
在二维和三维空间,\vec {a} \cdot \vec {b}的几何意义是\vec {a} 在\vec {b}方向上的投影,即:
Python中可以使用np.dot(a,b)
实现两个向量点积的计算。
向量叉积
叉积(Cross product)又称矢量积(Vector product)或外积(Outer product),结果是一个向量。
对向量\vec {a} = (a_1, a_2,a_3), \vec {b} = (b_1,b_2,b_3) 两者叉积为\vec {a} 和 \vec {b}的法向量,也就是\vec {a} 和 \vec {b}构成的平面的法向量。
注意上面是行列式计算,\vec {i}, \vec {j}, \vec {k} 分别是X,Y,Z方向上的单位向量。
最终向量的模:
当向量\vec {a} 和 \vec {b}共起点时,模为两个向量构成平行四边形的面积。
Python中可以使用np.cross(a,b)
实现两个向量点积的计算。
矩阵
矩阵点乘
假设矩阵A为m \times n阶,矩阵B为n \times s阶,左矩阵的列数必须和右矩阵的行数相等。结果是一个m \times s的矩阵。记为A \cdot B。
两个矩阵的点乘结果,即两个矩阵相乘的结果。
Python提供了np.inner(A,B)
函数实现两个矩阵点乘的计算。
点积和点乘是两个不同的数学概念,点积用于两个向量间的计算,点乘是两个矩阵间的运算。
矩阵叉积
矩阵似乎并没有叉积这个概念,但是Python和Matlab中都有对矩阵叉积的函数:np.cross
和cross
。
对于两个矩阵A 和B的叉积运算,使用的是向量叉积的计算方法,返回的矩阵C的是A 和B的列之间的独立叉积。
比如C(:,1)等于 A(:,1) 与 B(:,1) 的叉积。
哈达玛积
哈达玛积(Hadamard product )也叫元素积(Element-wise product, Point-wise product)或逐项积,要求两个矩阵维度一致。对应元素逐项相乘,结果仍然是一个矩阵。记为A \circ B ,注意和上述矩阵乘法的\cdot运算符区分开。
对于两个矩阵A 和B:
哈达玛积计算为:
Python中使用np.multiply
或者*
运算符实现哈达玛积。
弗罗比尼乌斯内积
弗罗比尼乌斯内积(Frobenius Inner Product),也要求两个矩阵维度一致,结果是一个标量,可以看作是矩阵上的“点积”(相比向量的点积)。记为A : B 。弗罗比尼乌斯内积计算为:
克罗内克积
克罗内克积(Kronecker product)用于两个任意大小的矩阵,是一种将两个矩阵组合成一个新的更大矩阵的运算。记为A \otimes B。
对于两个矩阵A 和B,克罗内克积计算为:
若矩阵A 和B分别为:
则克罗内克积为:
Python中使用np.kron
实现。