Python 2.7 numpy.interpd-仅返回插值后的最后一个值

Python 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

我有一组压力(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.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')