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模块的很多函数都有这个参数。
二、示例代码 2.0 输入随机数据# 0、生成数据 import numpy as np arr = np.random.randint(0,10,[2,3]) print(arr) # [[0 8 2] # [1 7 3]]2.1 只有f,没有其他参数
# 1、只有f,没有其他参数 print(np.gradient(arr)) # [array([[ 1., -1., 1.], # [ 1., -1., 1.]]), # array([[ 8., 1., -6.], # [ 6., 1., -4.]])]2.2 varargs分别是单个数、多个数
# 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])2.3 当edge_order为2时,变更边界元素差分方式
# 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. ] # 总的来说,这个参数我看不懂....2.4 当axis不为None时,就只针对特定axis方向求梯度
# 4、当axis不为None时,就只针对特定axis方向求梯度 print(np.gradient(arr, axis=0)) # [[ 1. -1. 1.] # [ 1. -1. 1.]]



