Python Scipy.interpolate获取生成特定y值的x值2个数字列表

Python Scipy.interpolate获取生成特定y值的x值2个数字列表,python,scipy,interpolation,Python,Scipy,Interpolation,我有两个数据列表,一个是 x = [13.7,12.59,11.22,10.00,8.91,7.94,7.08,6.31,5.62,5.01,4.47,3.98,3.55,3.16,2.82,2.51,2.24,2.00, 1.78,1.59,1.41,1.26,1.12,1.00,0.89,0.79,0.71,0.63,0.56,0.50,0.40,0.32,0.25,0.20,0.16,0.13, 0.1,0.08,0.06,0.05,0.04,0.03,0.025,0.02,

我有两个数据列表,一个是

x = [13.7,12.59,11.22,10.00,8.91,7.94,7.08,6.31,5.62,5.01,4.47,3.98,3.55,3.16,2.82,2.51,2.24,2.00,
    1.78,1.59,1.41,1.26,1.12,1.00,0.89,0.79,0.71,0.63,0.56,0.50,0.40,0.32,0.25,0.20,0.16,0.13,
   0.1,0.08,0.06,0.05,0.04,0.03,0.025,0.02,0.016,0.013,0.01,0.008,0.006,0.005,0.004]
一是

y = [0.19 0.34 0.5 0.5 0.53 0.92 0.92 0.92 0.92 0.92 0.93 0.95 0.96 0.96 0.99 0.99 0.99 0.99 0.99 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0]
当y=0.5,y=0.6,y=0.7时,我需要得到x值

我有52对这种混乱的数据,我需要通过给定的y获得x值,但是
y=0.5
etc不在y列表中

我尝试为每对数据生成一些函数,然后尝试查找x值,但我不知道如何查找


您能帮助我吗?

interp1d函数是一种很好的方法,但您必须进行一些更改。假设我们有你文章中定义的x和y(注意,我在列表
y
中添加了逗号和值1.0,使它们的长度相同)

首先要注意的是,scipy.interpolate.interp1d中的第一个参数必须是单调递增的。这意味着你可以

from scipy.interpolate import interp1d
f = interp1d( y, x )

在第一种情况下

>>> f(0.5), f(0.6), f(0.7)
(array(11.22), array(8.735897435897437), array(8.487179487179487))
在我们得到的那一秒

>>> f(0.5), f(0.6), f(0.7)
(array(1.0), array(1.0), array(1.0))

我得到两个列表,并使用f=interpolate.interp1d(y,x)得到一个函数,但是现在我很难根据给定的x得到y。我试着得到y=f(给定的x),但那不起作用。你给出的列表长度不一样。用法是
interp1d(x,y)
,但我猜你对反函数感兴趣,在这种情况下,你是对的。因此,您的第二个语句应该是
get\ux=f(给定y)
。然而,正如@Gabriel所说,您的
x
数组还有一个附加值。它怎么不起作用?意外的回答?还是抛出异常?
>>> f(0.5), f(0.6), f(0.7)
(array(11.22), array(8.735897435897437), array(8.487179487179487))
>>> f(0.5), f(0.6), f(0.7)
(array(1.0), array(1.0), array(1.0))