gpt4 book ai didi

python - 从列表中选择一个函数并应用它来生成一个数组

转载 作者:行者123 更新时间:2023-11-30 22:48:28 24 4
gpt4 key购买 nike

好吧,我不知道如何在标题中解释它,但这就是我想要做的(Python):

我有一个初始化函数列表,例如[foo, bar],对于每个输入,我都有一个要使用的函数的关联索引。现在给定输入数组 X、索引数组 I,假设满足上述条件,我需要生成输出数组 y

我的解决方案:

## These are just example methods, in reality there are complex functions
def foo(x):
return x
def bar(x):
return x - 1

f = [foo, bar]
X = [1, 2, 3, 1, 2, 5, 3, 6, 8, 2, 1, 4, 5, 7, 8, 1]
I = [0, 1, 0, 1, 1, 1, 1, 0, 0, 1 ,0, 0, 0, 0, 0, 1]

solution_functions = numpy.take(f, I)
solution_result = [solution_functions[idx](X[idx]) for idx in I]

我的问题是有一种更有效的方法来做到这一点 - 问题是如果 X 有数千个元素,并且 f 中的函数非常复杂,我将创建太多对象

最佳答案

您当然可以通过更改为以下内容来简化逻辑:

>>> [f[i](x) for x, i in zip(X, I)]
[1, 1, 3, 0, 1, 4, 2, 6, 8, 1, 1, 4, 5, 7, 8, 0]

请注意,如果XI的长度不同,则会截断为最短长度。

zip 函数返回一个迭代器,这可能会提高内存效率。如果您希望对相同的值多次运行相同的昂贵函数,您还可以实现缓存,例如用 functools.lru_cache 修饰函数。 .

如果您计划循环遍历这些值并且不需要同时需要它们,则可以通过将其放在圆括号而不是方括号中来使其成为生成器表达式:这只会计算您需要的每个值。

关于python - 从列表中选择一个函数并应用它来生成一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40154017/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com