我有一條由 1200 個值組成的曲線,我只想計算它的導數,所以我使用 numpy 梯度函式。
這是我正在使用的代碼:
data = np.genfromtxt('test_data.csv', delimiter=',')
support = np.array(np.arange(1200))
plt.plot(support, data)
plt.show()
plt.plot(support, np.gradient(data, support))
plt.show()
這是曲線圖:

這是梯度圖:

為什么梯度曲線開始處有正值?我的曲線在 [0; 600],為什么會有這么多噪音?
如果您想查看它,我會將資料放在 CSV 中:

您的資料是嘈雜的,并且嘈雜函式的梯度總是顯得更加嘈雜。
您可以應用簡單的移動平均線來平滑資料:
w = 25
smooth = np.convolve(data, np.ones(w), 'valid') / w
smooth_support = support[w//2:-w//2 1]
plt.plot(smooth_support, smooth)
plt.show()
plt.plot(smooth_support, np.gradient(smooth, smooth_support))
plt.show()

當然,np.ones()您可以使用scipy.signal中的更好方法,而不是使用平面卷積核(如 ) 。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/475081.html
