Python插值sin函数的最近法
我写了简单的代码使用正弦函数插值,最近的方法。我的问题是这是代码,对吗?在我看来,函数应该由直线组成。曲线显示在生成的图形上 编辑: 我想推动自己的插值算法,我试着将2个值的和除以2Python插值sin函数的最近法,python,Python,我写了简单的代码使用正弦函数插值,最近的方法。我的问题是这是代码,对吗?在我看来,函数应该由直线组成。曲线显示在生成的图形上 编辑: 我想推动自己的插值算法,我试着将2个值的和除以2 lst = list(x0) for i, val in enumerate(lst): lst[i] = lst[i] + lst[i+1] / 2 x0 = tuple(lst) plt.plot(x0, y0, label='nearest') 但它不能正常工作问题是,绿线被绘制为所有点之间的
lst = list(x0)
for i, val in enumerate(lst):
lst[i] = lst[i] + lst[i+1] / 2
x0 = tuple(lst)
plt.plot(x0, y0, label='nearest')
但它不能正常工作问题是,绿线被绘制为所有点之间的连接图,而点太少。也许您误解了
np.linspace
的工作原理。如果增加点的数量(并更改为仅将点绘制为连接线),您将得到一个看起来更像您可能期望的结果:
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d
import math
# Original "data set" --- 21 random numbers between 0 and 1.
x0 = np.arange(9)
y0 = [math.sin(i) for i in x0]
plt.plot(x0, y0, 'o', label='Data')
plt.grid(linestyle="-", color=(0.7, 0.8, 1.0))
x = np.linspace(0, 8, 1000)
# Available options for interp1d
options = ('linear', 'nearest')
f = interp1d(x0, y0, kind='nearest') # interpolation function
plt.plot(x, f(x), '.', label='nearest') # plot of interpolated data
plt.legend()
plt.show()
s/x=np.linspace(0,8,len(x0)*2)/x=np.linspace(0,8,)len(x0)*2-1)/
您的意思是希望蓝色点通过直线连接吗?这里有两个插值。使用interp1d
插值一次,然后使用另一种插值方法再次插值plt.plot
以生成该折线图。此处没有曲线。直线图在你给它的点之间建立了直线连接,这些点不是由蓝点绘制的点。好的,谢谢,这不起作用。如何在没有interp1d的情况下进行插值?为什么要这样做?我怀疑用其他方法在性能或可读性方面都会有很大的提高。我只想试试。我尝试划分两个元素,但在枚举(lst)中I,val的lst=list(x0)不正确lst=list(x0):lst[I]=lst[I]+lst[I]/2 x0=tuple(lst)plt.plt(x0,y0,label='nearest')
要进行“最近”插值还是“线性”插值?在“最近”中,不应计算值之间的平均值。您应该将每个x
四舍五入到最接近的x0
,然后使用该x0
的对应y0
。我需要最接近的插值
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d
import math
# Original "data set" --- 21 random numbers between 0 and 1.
x0 = np.arange(9)
y0 = [math.sin(i) for i in x0]
plt.plot(x0, y0, 'o', label='Data')
plt.grid(linestyle="-", color=(0.7, 0.8, 1.0))
x = np.linspace(0, 8, 1000)
# Available options for interp1d
options = ('linear', 'nearest')
f = interp1d(x0, y0, kind='nearest') # interpolation function
plt.plot(x, f(x), '.', label='nearest') # plot of interpolated data
plt.legend()
plt.show()