通过np.diff()
可以实现对np.array求差分。以一阶差分为例,直接调用np.diff()得到的结果是后一个值减去前一个值,并没有考虑第一位的值,差分后的维度会比原数据少1,如下所示:
import numpy as np
import random
df = np.random.randint(20, size=(5,4))
df
Out:
array([[ 7, 8, 17, 14],
[14, 17, 18, 17],
[ 9, 1, 11, 17],
[17, 17, 16, 19],
[18, 12, 6, 14]])
# 对每行差分 -- 下减上
df_row_diff = np.diff(df,axis=0)
df_row_diff
Out:
array([[ 7, 9, 1, 3],
[ -5, -16, -7, 0],
[ 8, 16, 5, 2],
[ 1, -5, -10, -5]])
# 对每列差分 -- 右减左
df_col_diff = np.diff(df,axis=1)
df_col_diff
Out:
array([[ 1, 9, -3],
[ 3, 1, -1],
[-8, 10, 6],
[ 0, -1, 3],
[-6, -6, 8]])
从以上算例可以看出,对行求差分时,df_row_diff比df少一行,对列求差分时,df_col_diff比df少一列。如果想要差分后的数据维度和原矩阵一样,即第一行(列)也减去一组什么数,可以通过prepend参数
实现如下。
# Case 1
df_row_diff = np.diff(df,axis = 0,prepend=df[-1:,:])
df_row_diff
Out:
array([[-11, -4, 11, 0],
[ 7, 9, 1, 3],
[ -5, -16, -7, 0],
[ 8, 16, 5, 2],
[ 1, -5, -10, -5]])
# Case 2
df_col_diff = np.diff(df,axis = 1,prepend=df[:,0:1])
df_col_diff
Out:
array([[ 0, 1, 9, -3],
[ 0, 3, 1, -1],
[ 0, -8, 10, 6],
[ 0, 0, -1, 3],
[ 0, -6, -6, 8]])
其中Case 1是对行求差分,df_row_diff的第一行为df的第一行减去最后一行;Case 2是对列求差分,df_col_diff的第一列为df的第一列减去它本身。
可以看出,当我想要在求差分时让第一行(列)也减去某组值时,可以将该值赋给prepend参数。