使用以前的所有结果应用n次函数

时间:2017-11-19 12:13:15

标签: python function numpy list-comprehension generator-expression

我想知道是否有一种pythonic方法可以多次应用函数,其中所有最后结果是使用列表推导或生成器表达式而不是像这样的for循环再次输入?< / p>

import numpy as np

def func(x, s):
    return (5+sum(x))**(-1.06)/s

y = np.array([])
for i in range(5):
    y = np.append(y, func(y[:i], s=i+1))

编辑:不幸的是,itertools.accumulate似乎只考虑最后一个,但不是最后的结果。还有什么想法?

1 个答案:

答案 0 :(得分:0)

看起来没有内置功能,但它很容易制作:

def pastmap(f, inputs):
    """
    :param f: A function of the form y[i] = f(y[:i], inputs[i])
    :param inputs: An iterable of inputs
    :return: A list of length: len(inputs)
    """
    results = []
    for x in inputs:
        new_result = f(results, x)
        results.append(new_result)
    return results


def func(x, s):
    return (5+sum(x))**(-1.06)/s


y = np.array(pastmap(func, range(1, 6)))

请注意,至少对于您的示例来说,执行此操作非常低效,因为您反复获取增长列表的总和,即O(N^2)(它会更好( O(N))保持运行金额并使用它)