numpy.gradient(f, *varargs, **kwargs)
(1)f:类数组,可以是ndarray,也可是列表、元组...
(2)varargs:默认值为1。如果是单个数,则让所有axis上的间距除以这个数;如果是连续几个数,数量和axis的数量相同,则各个axis上的间距和这连续几个数分别对应。
(3)edge_order :只能是1或2。这个参数用来指定边界元素的差分间距,如果为默认值1,就除以1;如果为默认值2,就除以2。
(4)axis:这个参数很好理解,numpy模块的很多函数都有这个参数。
# 0、生成数据
import numpy as np
arr = np.random.randint(0,10,[2,3])
print(arr)
# [[0 8 2]
# [1 7 3]]
# 1、只有f,没有其他参数
print(np.gradient(arr))
# [array([[ 1., -1., 1.],
# [ 1., -1., 1.]]),
# array([[ 8., 1., -6.],
# [ 6., 1., -4.]])]
# 2、varargs分别是单个数、多个数
print(np.gradient(arr,2))
# [array([[ 0.5, -0.5, 0.5],
# [ 0.5, -0.5, 0.5]]),
# array([[ 4. , 0.5, -3. ],
# [ 3. , 0.5, -2. ]])]
print(np.gradient(arr,2,2))
# [array([[ 0.5, -0.5, 0.5],
# [ 0.5, -0.5, 0.5]]),
# array([[ 4. , 0.5, -3. ],
# [ 3. , 0.5, -2. ]])]
# 官网上有一个用法,我实在看不懂这是啥意思,见以下代码
>>> f = np.array([1, 2, 4, 7, 11, 16], dtype=float)
>>> np.gradient(f)
array([1. , 1.5, 2.5, 3.5, 4.5, 5. ])
>>> np.gradient(f, 2)
array([0.5 , 0.75, 1.25, 1.75, 2.25, 2.5 ])
>>> x = np.arange(f.size)
>>> np.gradient(f, x)
array([1. , 1.5, 2.5, 3.5, 4.5, 5. ])
>>> x = np.array([0., 1., 1.5, 3.5, 4., 6.], dtype=float)
>>> np.gradient(f, x)
array([1. , 3. , 3.5, 6.7, 6.9, 2.5])
# 3、当edge_order为2时,边界元素的差分间距为2
arr1 = np.arange(16).reshape(4,4)
print(np.gradient(arr, edge_order=2))
# ValueError: Shape of array too small to calculate a numerical gradient, at least (edge_order + 1) elements are required.
# 这个错误我实在不知道为啥,有识之士帮帮忙!!!
print(np.gradient(np.array([1,4,3,4,8]), edge_order=2))
# [5. 1. 0. 2.5 5.5]
print(np.gradient(np.array([1,4,3,4,8]), edge_order=1))
# [3. 1. 0. 2.5 4. ]
# 总的来说,这个参数我看不懂....
# 4、当axis不为None时,就只针对特定axis方向求梯度
print(np.gradient(arr, axis=0))
# [[ 1. -1. 1.]
# [ 1. -1. 1.]]