将python列表转换为函数

时间:2014-11-27 21:25:59

标签: python function piecewise

我正在进行一些数值分析,我有一系列形式为

的python列表
listn = [1, 3.1, 4.2]

我想将这些转换为映射到x_0和x_1之间的域的函数,因此我可以将函数对象传递给我用来分析数据的更高阶函数。 (在指定域之外,函数选择为零)。为了我的目的,所产生的函数需要是连续的,而目前我只返回一个明智的线性函数。

我已经提出了下面的复杂解决方案,但必须有一个更好的方法在几行中做到这一点?

def to_function(array_like, x_0=0, x_1=1):
    assert x_1 > x_0, "X_0 > X_1"
    def g(s, a=array_like, lower=x_0, upper=x_1):

        if lower < s <= upper:
            scaled = (1.0*(s-lower) / (upper - lower)) * (len(a) - 1)
            dec, whole = math.modf(scaled)
            return (1.0 - dec) * a[int(whole)] + dec * a[int(whole + 1)]
        else:
            return 0

    return g

 b = to_function([0, 1, 2, 3, 4, 5], x_0=0, x_1=5)
 print b(1)
 print b(2)
 print b(3)
 print b(3.4)

1 个答案:

答案 0 :(得分:1)

scipy's 1d interpolation功能会起作用吗?

import numpy as np
from scipy.interpolate import interp1d

x = y = np.arange(5)
f = interp1d(x,y, kind="linear", fill_value=0., bounds_error=False)

print f(0)
print f(2)
print f(3)
print f(3.4)

给出了:

1.0
2.0
3.0
3.4