线性插值主要用到的是numpy中的interp函数
interp(x, xp, fp, left=None, right=None, period=None)
其中x为要插值点的横坐标,xp为x的坐标值(必须是递增),fp为y的坐标值
left是可选择参数,如果x小于xp,则会默认返回xp[0]对应的fp值,right同理。
period可设定横坐标的周期,该选项打开时,则忽略left和right。
具体可见help(np.interp)
#help中一个例子
x = np.linspace(0, 2*np.pi, 10)
y = np.sin(x)
#插入点为xvals
xvals = np.linspace(0, 2*np.pi, 50)
yinterp = np.interp(xvals, x, y)
plt.plot(x, y, 'o')
plt.plot(xvals, yinterp, '-x')
plt.show()
3、扩展
一)已知y坐标,求x点
将interp(x, xp, fp, left=None, right=None, period=None)
中的x改成y,xp与fp互换即可
y = np.array([0, 38.39, 71.41, 99.66, 123.67, 143.88, 160.61, 174.03, 184.16, 190.8, 193.52])
x = np.array([0, 0.37, 0.74, 1.11, 1.48, 1.85, 2.22, 2.59, 2.96, 3.33, 3.7])
plt.plot(x, y, '-')
y_val = 30
root = np.interp(y_val,y,x)
plt.plot(root,y_val, marker="o")
plt.plot([root,root,0],[0,y_val,y_val], "--")
plt.xlim(0,None)
plt.ylim(0,None)
plt.show()
二)x坐标是递减
interp(x, xp, fp, left=None, right=None, period=None)
xp的规定必须是递增数列,若数据中xp正好是递减,可以通过切片将xp倒序过来,即采用xp[::-1]
参考:python已知y求x
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)