赞
踩
一维数据的差分公式:
一阶差分:
二阶差分:
对一阶前向差分的输出再做一阶前向差分,如:
梯度:
一维数据的梯度就是前后两点的变化率,即一阶中心差分。
环境: notebook + numpy 1.20.2
import numpy as np
f=np.array([0,2,3,6,2,-1])
d1=np.diff(f)
d2=np.diff(f,2)
print('初始数据:',f)
print('一阶差分:',d1)
print('二阶差分:',d2)
初始数据: [ 0 2 3 6 2 -1]
一阶差分: [ 2 1 3 -4 -3]
二阶差分: [-1 2 -7 1]
其中:
可以看出:
如要使输出的数据长度与原数据一致,可在最前面增加一个数:
np.diff(f, prepend=-1)
array([ 1, 2, 1, 3, -4, -3])
在原数据前增加一个数(-1)后,输出结果比不加的多了一个元素(最前面的1,它等于原数据的第一个元素0减增加的元素-1)
可在最后面增加一个数:
np.diff(f, append=-1)
array([ 2, 1, 3, -4, -3, 2])
import numpy as np
f=np.array([[-1,2,3,6],[2,4,6,8],[9,2,7,4]])
d1=np.diff(f) # 缺省axis, 按最后一个维度差分,对二维数据来说就是按第二个维度差分
d2=np.diff(f,axis=0) # 按第一个维度差分
print('初始数据:\n',f)
print('横向差分:\n',d1)
print('纵向差分:\n',d2)
初始数据:
[[-1 2 3 6]
[ 2 4 6 8]
[ 9 2 7 4]]
横向差分:
[[ 3 1 3]
[ 2 2 2]
[-7 5 -3]]
纵向差分:
[[ 3 2 3 2]
[ 7 -2 1 -4]]
可以看出,横向差分少一列、纵向差分少一行。
import numpy as np
f=np.array([0,2,4,6,4,2,-4.])
g1=np.gradient(f)
g2=np.gradient(f,2) # 缩小比例
print('数据:',f)
print('梯度:',g1)
print('缩小:',g2)
数据: [ 0. 2. 4. 6. 4. 2. -4.]
梯度: [ 2. 2. 2. 0. -2. -4. -6.]
缩小: [ 1. 1. 1. 0. -1. -2. -3.]
其中,输出的第二行,梯度:
输出的第三行,缩小:
当计算时使用第2个参数,表示缩小尺度,取2表示缩小一半,取0.5表示放大一倍,取-1表示符号取反。
import numpy as np
f=np.array([[0,-2,2,4],[1,3,7,5],[4,2,8,6.]])
d=np.gradient(f)
print('计算数据:\n',f)
print('纵向梯度:\n',d[0])
print('横向梯度:\n',d[1])
计算数据:
[[ 0. -2. 2. 4.]
[ 1. 3. 7. 5.]
[ 4. 2. 8. 6.]]
纵向梯度:
[[ 1. 5. 5. 1.]
[ 2. 2. 3. 1.]
[ 3. -1. 1. 1.]]
横向梯度:
[[-2. 1. 3. 2.]
[ 2. 3. 1. -2.]
[-2. 2. 2. -2.]]
计算时没指定维度,两个维度的都计算(分纵向和横向);
可用 axis=n 来指定维度:
d=np.gradient(f, axis=1)
print('横向梯度:\n',d)
横向梯度:
[[-2. 1. 3. 2.]
[ 2. 3. 1. -2.]
[-2. 2. 2. -2.]]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。