我正在尝试使用 SciPy 的一维曲线 B 样条表示来平滑如下所示的散点图。有资料here .
我使用的代码是:
import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate
data = np.genfromtxt("spline_data.dat", delimiter = '\t')
x = 1000 / data[:, 0]
y = data[:, 1]
x_int = np.linspace(x[0], x[-1], 100)
tck = interpolate.splrep(x, y, k = 3, s = 1)
y_int = interpolate.splev(x_int, tck, der = 0)
fig = plt.figure(figsize = (5.15,5.15))
plt.subplot(111)
plt.plot(x, y, marker = 'o', linestyle='')
plt.plot(x_int, y_int, linestyle = '-', linewidth = 0.75, color='k')
plt.xlabel("X")
plt.ylabel("Y")
plt.show()
我尝试更改样条的顺序和平滑条件,但我没有得到平滑的图。
B 样条插值应该可以平滑数据,但有什么问题吗?有没有其他方法可以平滑此数据?
最佳答案
使用较大的平滑参数。例如,s=1000
:
tck = interpolate.splrep(x, y, k=3, s=1000)
这会产生:
关于python - 如何平滑Python中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30443883/