本文的主要内容是基于中国大学mooc(慕课)中的“Python数据分析与可视化”课程进行整理和总结。
np.gradient(f):用于计算数组f中元素的梯度,当f为多维时,返回每个维度的梯度。
a = np.random.randint(0,20,(5,))
a
array([10, 0, 7, 0, 19])
np.gradient(a)
array([-10. , -1.5, 0. , 6. , 19. ])
由梯度计算公式得到梯度计算结果-1.5=(7-10)/2,-10=(0-10)/1。
二维数组的梯度计算:
c = np.random.randint(0,50,(3,5))
c
array([[25, 49, 14, 13, 20],
[43, 6, 13, 15, 24],
[ 9, 2, 7, 5, 36]])
np.gradient(c)
[array([[ 18. , -43. , -1. , 2. , 4. ],
[ -8. , -23.5, -3.5, -4. , 8. ],
[-34. , -4. , -6. , -10. , 12. ]]),
array([[ 24. , -5.5, -18. , 3. , 7. ],
[-37. , -15. , 4.5, 5.5, 9. ],
[ -7. , -1. , 1.5, 14.5, 31. ]])]
对于二维数组,任意一个元素的梯度存在两个方向,所以求得的梯度为两个数组对象,第一个数组表示最外层维度的梯度值,第二个数组表示第二层维度的梯度值。
对于n维数组,gradient函数会生成n个数组,每个数组代表元素在第n个维度的梯度变化值,梯度反应了元素的变化率,尤其是我们在进行图像,声音等数据处理,梯度有助于帮助我们发现图像和声音的边缘,在那些变化不是很平缓的地方,可以很容易的发现。