askewchanさんの回答通りです。これは素晴らしいテクニックです。ただし、使用する必要がある場合は、numpy.convolve
この 1 つの小さな修正を提供したいと思います。代わりに:
#First derivatives:
cf = np.convolve(f, [1,-1]) / dx
....
#Second derivatives:
ccf = np.convolve(f, [1, -2, 1]) / dxdx
...
plt.plot(x, cf[:-1], 'r--', label='np.convolve, [1,-1]')
plt.plot(x, ccf[:-2], 'g--', label='np.convolve, [1,-2,1]')
...次のように'same'
オプションを使用しますnumpy.convolve
。
#First derivatives:
cf = np.convolve(f, [1,-1],'same') / dx
...
#Second derivatives:
ccf = np.convolve(f, [1, -2, 1],'same') / dxdx
...
plt.plot(x, cf, 'rx', label='np.convolve, [1,-1]')
plt.plot(x, ccf, 'gx', label='np.convolve, [1,-2,1]')
...1 つずれたインデックス エラーを回避するため。
また、プロットするときは x-index にも注意してください。とのポイントは同じnumy.diff
でnumpy.convolve
なければなりません。オフバイワンエラーを修正するには(私の'same'
コードを使用)、次を使用します。
plt.plot(x, f, 'k', lw=2, label='original')
plt.plot(x[1:], df, 'r.', label='np.diff, 1')
plt.plot(x, cf, 'rx', label='np.convolve, [1,-1]')
plt.plot(x, gf, 'r', label='gaussian, 1')
plt.plot(x[1:-1], ddf, 'g.', label='np.diff, 2')
plt.plot(x, ccf, 'gx', label='np.convolve, [1,-2,1]')
plt.plot(x, ggf, 'g', label='gaussian, 2')

s/bot/by/g で修正されたオートコンプリートを編集