我知道numpy.interp和scipy.interpolate.interp1d,但我似乎无法弄清楚如何在基于某种[0, 1]
范围的两个列表之间进行非常简单的线性插值。例如,如果我有列表
x = [2., 3., 4.]
y = [3., 4., 8.5]
我想要一个接受0.5作为参数的函数并给我
[2.5, 3.5, 6.25]
或将接受0.1作为参数并给我5.25等。
[2.1, 3.1, 6.25]
为什么我要对此进行消隐?答案必须非常简单......
谢谢!
答案 0 :(得分:1)
这是一个单行:
In [10]: lin = lambda x, y, mult: map(lambda (a,b): a*(1-mult) + b*(mult), zip(x, y))
In [11]: lin(x, y, .1)
Out[11]: [2.1, 3.1, 4.45]
In [12]: lin(x, y, .5)
Out[12]: [2.5, 3.5, 6.25]
答案 1 :(得分:1)
您可以使用zip
同时迭代多个列表。
将其置于明确的for循环或列表理解中(或将其传递给map
,如another answer中所述)。我认为代码是不言自明的:
def with_explicit_loop(x_list, y_list, alpha=0.5):
z_list = []
for a, b in zip(x_list, y_list):
z_list.append(a * (1 - alpha) + b * alpha)
return z_list
def with_list_comprehension(x_list, y_list, alpha=0.5):
return [a * (1 - alpha) + b * alpha for a, b in zip(x_list, y_list)]
这两个函数都是等价的,但我认为第一个函数稍微容易阅读,第二个函数稍微快一些。