調べてみてnumpyの関数で簡単に実現できることがわかったので、そのメモ。
import numpy as np
"""
1階差分
"""
x = np.array(range(10, 100)) # 適当なベクトル
x0 = x[0] # 初期値を保存
x_diff1 = np.diff(x)
"""
逆変換
"""
tmp = np.concatenate(([x0], x_diff1))
# または以下
# tmp = np.r_[x[0],x_diff1]
x_ = np.cumsum(tmp)
"""
チェック
"""
np.all(x == x_)
だいたいのことはnumpyの関数がなんとかしてくれますね。未だに馴染めないけど徐々に覚えていきたい。
雑記
この前処理も含めてstatsmodelsをsckit-learnのpipelineに流して綺麗に実装しようと思っているけど、微妙にインタフェースが合わないのが歯がゆい。
pipelineに乗せることで、ロジックの変更(パラメータ変更や実行順序の入れ替え、手法そのものの変更とか)に柔軟性が出ることを期待してるのですが、すんなりとは行かないものか。
楽なやり方があれば知りたい。。
参考