python-numpy.gradient的用法,函数详解

谢俊力
2023-12-01

一、基本语法

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.]]
 类似资料: