LoginSignup
2
4

More than 3 years have passed since last update.

中心差分の効率良い書き方 in pandas/matlab/numpy

Last updated at Posted at 2019-10-06

pandas版

pandasには差分を出す関数diffが用意されているが,物理量の離散的な微分値を考えた場合これは全く推奨できない。

多少マシな中心差分はshiftをうまく使えば以下のようにスマートに書ける。

cdiff=(data.shift(-1)-data.shift(1))/2/dt

Sampling時間の考慮,NaNの処理も含めて関数化した結果が以下のようになる。

def centerdiff(data,dt=1):
    cdiff=(data.shift(-1)-data.shift(1))/2/dt
    return cdiff.fillna(method='ffill').fillna(method='bfill')

matlab版(numpyでも可)

この場合スライシングを使って計算するのが良いと思われる。

function cdiff = centerdiff(data,dt)
  cdiff_ = (data(3:end)-data(1:end-2)) /2/dt;
  cdiff = [cdiff_(1) ,cdiff_, cdiff_(end)];
end

より高次の処理にも応用可能なのでひとまず覚えておいて損はないはず。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4