Python 2.7 numpy.interpd-仅返回插值后的最后一个值
我有一组压力(p)和vmr的数据点。 我想找到另一个压力网格(pressure_grid)的vmr值。我使用了np.interpPython 2.7 numpy.interpd-仅返回插值后的最后一个值,python-2.7,numpy,linear-interpolation,Python 2.7,Numpy,Linear Interpolation,我有一组压力(p)和vmr的数据点。 我想找到另一个压力网格(pressure_grid)的vmr值。我使用了np.interp for lines in itertools.islice(input_file, i, l): lines=lines.split() p.append(float(lines[0])) vmr.append(float(lines[3])) x = np.array(p) y = np.array(vmr) yi=np.inter
for lines in itertools.islice(input_file, i, l):
lines=lines.split()
p.append(float(lines[0]))
vmr.append(float(lines[3]))
x = np.array(p)
y = np.array(vmr)
yi=np.interp(pressure_grid,x,y)
但当我试图打印“yi”时,它只打印与“pressure_grid”的最后一个值相对应的值(即vmr值)。对于所有迭代,它都打印相同的值
我试着打印p和vmr,在那之前一切似乎都很好。我不明白为什么会发生这种情况。。。
我不熟悉这个……请帮忙
这就是我的文件的样子,第一列是-p,第二列是vmr
这是我的压力网格
您的代码有两个问题。第一个
x
和y
对于for
循环的每次迭代都被覆盖,这意味着,x
和y
只包含一个用于插值的元素。要解决此问题,您可以在循环外定义x
和y
列表,并将其附加到循环中,或者更简单地说,只需使用numpy.loadtxt()
:
或者,您也可以对原始的未重叠数据使用scipy.interpolate
包。这还有一个额外的优点,即允许您推断输入域中未包含的数据:
from scipy import interpolate
interpolation = interpolate.interp1d(x,y,fill_value='extrapolate')
注意:您的输入文件似乎设置了多个
。为了使所有这些工作正常,我修剪了文件,使其只包含一个数据集。否则,即使在翻转之后,您的x输入数据也不会严格增加,您必须进行排序 你能提供你的代码吗?确保压力网格值包含在最小值和最大值x之间。否则,如果pressure_grid的值高于x的最大值,它将返回x的最大值的y值。对于延迟回复,pressure_grid的值高于x,是否有其他方法来外推这些值。我尝试使用scipy.interpolate,但它也不起作用。有人能建议其他方法来做到这一点吗。。。。。谢谢你能把示例输入文件发到文本中,这样我就可以使用它们了吗?我已经添加了onedrive链接…….谢谢谢谢你..非常感谢..scipy.interpolate工作了,我得到了想要的结果。
x = data[::-1,0]
y = data[::-1,1]
interpolation = np.interp(grid,x,y)
from scipy import interpolate
interpolation = interpolate.interp1d(x,y,fill_value='extrapolate')