在Python中平滑数据

时间:2015-11-09 15:12:55

标签: python dataset smoothing moving-average

我有这些数据:

8.7530482   1.34E-01
8.7584016   2.68E-01
8.7637563   6.70E-01
8.769111    1.47E+00
8.7744644   2.15E+00
8.7798191   3.08E+00
...
11.5693578  6.36E+01
11.5747125  6.21E+01
11.5800659  6.17E+01
11.5854193  6.14E+01
11.590774   6.14E+01
11.5961287  6.15E+01
11.6014821  6.45E+01

问题是我需要数据域看起来像这样:

8.75
8.76
8.77
8.78
8.79
...
11.57
11.58
11.59
11.60
11.61

同时保持范围值与原始数据一致。因此,我需要智能地平均数据以获得常规间隔域。

我正在尝试使用python来执行此操作。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

听起来您想要线性插入数据。为此,请使用scipy的interp1d

这是一个演示:

import numpy as np
from scipy.interpolate import interp1d

data = """
11.5693578  6.36E+01
11.5747125  6.21E+01
11.5800659  6.17E+01
11.5854193  6.14E+01
11.590774   6.14E+01
11.5961287  6.15E+01
11.6014821  6.45E+01
"""
data = np.fromstring(data, sep=' ')
data = data.reshape((-1, 2))

x, y = data.T
f = interp1d(x, y)

现在我们可以使用f来获取常规域上的插值值:

regular_x = np.arange(11.57, np.max(x), .01)

plt.plot(x, y, marker='o')
plt.plot(regular_x, f(regular_x), marker='o')

plt.legend(['Original', 'Interpolated'], loc='best')
plt.ylim([61, 65])

enter image description here