私はいくつかの数値解析を行っています。これにより、一連の 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)