我想编写一个接受两个列表的函数,一个x值和一个y(x)值,并在给定x值时返回相应的y(x)值。我还想使用线性插值来找到列表中数字之间的x值的y(x)。 例如
f = function([3, 4, 6], [0, 1, 2])
print f(3)
应该返回0.0
到目前为止,我还没有完整的代码,但我正在尝试使用
interp1d(numpy.array(xs), numpy.array(ys), 'linear')
用于插值
for i in range(len(xs)):
return ys[i]
这是列表中的值,但我真的不知道怎么把它放在一起
答案 0 :(得分:0)
您可以zip
列表并转换为字典,然后将字典传递给lambda
:
>>> f=lambda x: dict(zip([3, 4, 6], [0, 1, 2]))[x]
>>> f(3)
0
>>> f(4)
1
但由于上述解决方案可能会引发KeyError
,您可以使用以下工厂函数:
>>> def liner(l1,l2):
... d=dict(zip(l1,l2))
... def li(x):
... try :
... return d[x]
... except KeyError:
... print 'please enter a valid number'
... return li
...
>>> f=liner([3, 4, 6], [0, 1, 2])
>>> f(9)
please enter a valid number
>>> f(3)
0
>>> f(6)
2