向量场展示了如果我们运用一个向量函数(如向量加法或乘法等),其中任意点(x,y)会有什么样的运动倾向。在空间中给定一点,向量场就是我们使用的向量运算在该点的方向和大小。 该向量场很有意思,因为根据不同的出发点,其都会有不同的方向。出现这种情况是因为在该向量场中,向量背后储存的项不是一个 5 或 2 那样的实数,它是 2x 或 x^2 那样的变量。对于图表中的每一个点,我们将坐标轴变换为 2x 或 x^2,然后将起始点画一个箭头到新的坐标点,直播,这样就制成了上图。向量场对机器学习算法(如梯度下降算法)的可视化十分重要。 矩阵 矩阵就是一个由数字或其它项组成的表格,只不过是该表格会有特定的加法、减法和乘法规则。 矩阵的阶 我们描述矩阵的维度由阶来表达:即行数×列数(如 3×2)阶矩阵。 a = np.array([ [1,2,3], [4,5,6] ]) a.shape == (2,3)b = np.array([ [1,2,3] ]) b.shape == (1,3) 矩阵的标量运算 矩阵的标量运算和向量的标量运算是一样的。可以简单地将标量和矩阵中的每一个元素做运算处理(如加、减、乘、除等)。 a = np.array( [[1,2], [3,4]]) a + 1 [[2,3], [4,5]] 矩阵间的运算 为了能进行加减运算,两个矩阵的阶必须相等。然后我们可以对两个矩阵相应的元素进行运算处理。如下图就是两阶方阵的加法。 a = np.array([ [1,2], [3,4] ]) b = np.array([ [1,2], [3,4] ])a + b [[2, 4], [6, 8]]a — b [[0, 0], [0, 0]] Numpy broadcasting 在 Numpy 中,矩阵之间运算所需要的阶相等可以通过一个称之为 broadcasting 的机制变得不那么严格。如果两个矩阵相应的阶(行数×列数)满足下面两个要求,那么它们就是可以进行运算的: 两个矩阵的阶相等 矩阵的阶有一个维度是 1 a = np.array([[1], [2] ]) b = np.array([ [3,4], [5,6] ]) c = np.array([ [1,2] ])# Same no. of rows # Different no. of columns # but ahas one column so this works a * b [[ 3, 4], [10, 12]]# Same no. of columns # Different no. of rows # but chas one row so this works b * c [[ 3, 8], [5, 12]]# Different no. of columns # Different no. of rows # but both aand cmeet the # size 1 requirement rule a + c [[2, 3], [3, 4]] 而在高维(三维或四维等)矩阵的情况下,矩阵间运算更有意思,不过在深度学习里并不常见。 矩阵 Hadamard 乘积 Hadamard 乘积同样是矩阵间的运算,即两个矩阵间相同位置的元素相互乘积。 a = np.array( [[2,3], [2,3]]) b = np.array( [[3,4], [5,6]])# Uses python's multiply operator a * b [[ 6, 12], [10, 18]] 在 numpy 中,矩阵和向量的 Hadamard 乘积只需要两个矩阵满足 broadcasting 机制的要求就行。 矩阵转置 (责任编辑:本港台直播) |