对相应的元素应用不同的Python函数

2024-06-28 11:32:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否有一个内置的numpy(即,有效的)方法来将函数向量应用到值向量,这样每个函数都接受一个对应的值(几乎就像函数输入值的点积)。伪代码示例:

[func1, func2, func3, ..., funcn] x [val1, val2, val3, ..., valn] 
= [func1(val1), func2(val2), func3(val3), ..., funcn(valn)].

提前谢谢!你知道吗

编辑:

还有另一个问题与此类似,但此问题专门询问是否有比遍历列表更有效的方法,而另一个问题更关注代码本身的优雅性。你知道吗


Tags: 方法函数代码numpy示例向量内置val1
2条回答

你可以做:

results = map((lambda (f, v): f(v)), zip(functions, values))

但是压缩和映射不会比迭代两个列表的索引并将函数应用于值更快:

results = []
for i in range(len(functions)):
    results.append(functions[i](values[i]))

测试

zipmap.py公司

def add1(x):
  return x + 1

vs = range(100000)
fs = [add1] * 100000

results = map((lambda (f, v): f(v)), zip(fs, vs))

> time python zipmap.py
> 
> real    0m0.153s 
> user    0m0.127s     
> sys     0m0.023s

福禄普.py

def add1(x):
  return x + 1

vs = range(100000)
fs = [add1] * 100000

results = []
for i in range(len(fs)):
    results.append(fs[i](vs[i]))

> time python forloop.py
>
> real    0m0.155s
> user    0m0.073s
> sys     0m0.030s

老实说,我不知道for循环的速度有多快,python解释器可能会进行花哨的优化。你知道吗

您可以使用zip函数合并两个列表,然后将函数项调用为values项。你知道吗

zip([f1, f1], [v1, v2]) -> ((f1, v1), (f2, v2))

相关问题 更多 >