梯度代表数据的变化程度,在数学领域一般通过求导或者求偏导得到,但在数值领域一般通过差分来近似梯度。
常用的差分为一阶差分和二阶差分,一阶差分代表相邻2个数据之间的关系,而二阶差分代表相邻3个数据之间的关系。
y(i) = x(i+1) - i(i)
y(i+1) = x(i+2) - x(i+1)
y(i)和y(i+1)分别是x(i)和x(i+1)为一阶差分。
z(i) = y(i+1)-y(i) = x(i+2)-2*x(i+1) + x(i)
z(i)为x(i)的二阶差分,即一阶差分再求一阶差分。
在numpy中,gradient()提供数组的梯度计算功能,计算时从外轴到里轴,沿着各个轴分别计算各个轴的梯度,每个轴单独返回一个梯度数组。
gradient的构造函数如下:
numpy.gradient(f, *varargs, **kwargs)
对于数组的内部元素,使用二阶差分来近似梯度,对于数组的边缘元素,使用一阶差分来近似梯度。比如:对于a,b,c三个元素,a的梯度=b-a,b的梯度=(c-a)/2,c的梯度=c-b。(函数实际使用的二阶差分不是上面标准形式的二阶差分,而是二阶中心差分)
输入:一个N维数组
输出:输入数组有几个维度