Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python插值sin函数的最近法_Python - Fatal编程技术网

Python插值sin函数的最近法

Python插值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') 但它不能正常工作问题是,绿线被绘制为所有点之间的

我写了简单的代码使用正弦函数插值,最近的方法。我的问题是这是代码,对吗?在我看来,函数应该由直线组成。曲线显示在生成的图形上

编辑:

我想推动自己的插值算法,我试着将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')

但它不能正常工作

问题是,绿线被绘制为所有点之间的连接图,而点太少。也许您误解了
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()