Jim*_*616 5 python interpolation numpy list scipy
如果我有一些我不知道的功能的测量数据(假设它不重要或计算上很难),例如
x2 = [0, 1, 10, 25, 30]
y2 = [5, 12, 50, 73, 23]
Run Code Online (Sandbox Code Playgroud)
我用它numpy.interp来找到中间值,它给出了点之间的线性插值,我得到了一条直线:
xinterp = np.arange(31)
yinterp1 = np.interp(xinterp, x2, y2)
plt.scatter(xinterp, yinterp1)
plt.plot(x2, y2, color = 'red', marker = '.')
Run Code Online (Sandbox Code Playgroud)
scipy.interpolate文档中的示例给出了
x = np.linspace(0, 10, num=11, endpoint=True)
y = np.cos(-x**2/9.0)
f = interp1d(x, y)
f2 = interp1d(x, y, kind='cubic')
xnew = np.linspace(0, 10, num=41, endpoint=True)
plt.plot(x, y, 'o', xnew, f(xnew), '-', xnew, f2(xnew), '--')
plt.legend(['data', 'linear', 'cubic'], loc='best')
plt.show()
Run Code Online (Sandbox Code Playgroud)
使用不同kind的插值s来获得更平滑的曲线.但是如果我想要平滑曲线中的点而不仅仅是曲线呢?NumPy或SciPy中是否有一个函数可以给出平滑曲线上的离散点?
您可以生成功能点并将它们重新分配给变量,类似于生成它们并绘制它们时:
y_lin = f(xnew)
y_cub = f2(xnew)
Run Code Online (Sandbox Code Playgroud)
interp1d返回一个函数,然后您可以使用该函数生成数据,然后可以将数据重新分配给其他变量并以您想要的任何方式使用.两个输出汇总在一起:
plt.plot(x, y, 'o', xnew, f(xnew), xnew, y_lin, '-', xnew, f2(xnew), xnew, y_cub, '--')
plt.legend(['data', 'linear' ,'reassigned linear', 'cubic', 'reassigned cubic'], loc='best')
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6109 次 |
| 最近记录: |