Python中非常简单的列表插值

时间:2016-02-23 07:03:57

标签: python numpy

我知道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]

为什么我要对此进行消隐?答案必须非常简单......

谢谢!

2 个答案:

答案 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)]

这两个函数都是等价的,但我认为第一个函数稍微容易阅读,第二个函数稍微快一些。