如何按元素有效地评估整个 Python 函数列表?

假设我有一个包含三个函数的列表:

f_list = [f1,f2,f3]

和一个值数组,其中每个函数都应该被评估

values = numpy.array([1,2,3])

这样我就得到了 f1(1)、f2(2) 和 f3(3)。

一种方法当然是循环函数:

for i in range(3):
    print(f_list[i](values[i])

有没有更有效的方法来做到这一点?类似于 numpy 数组操作的东西,我可以一次传递所有值以获取函数评估数组?据我所知,我不能将函数存储在 numpy 数组中,可以吗?

就我而言,我有一个非常大的 scipy 插值 (interp1d) 函数(或调用对象)的 2D 列表,在两个轴上循环时需要很长时间来评估。


holdtom
浏览 137回答 2
2回答

PIPIONE

对于任意Python 函数,Python 级别的循环是不可避免的。一种方法是通过列表理解:f_list = [f1,f2,f3]values = np.array([1,2,3])res = np.array([func(val) for func, val in zip(f_list, values)])请记住,NumPy 不是将普通函数转换为向量化函数的高阶函数工具。Evennp.vectorize只不过是一个 Python 级别的循环。要矢量化您的计算,您需要依次考虑每个函数并编写一些逻辑(如果确实可以矢量化)。

江户川乱折腾

如果它们按顺序排列,则此代码将起作用:def a ( parameter ):  print ( parameter )def b ( parameter ):  print ( parameter )def c ( parameter ):  print ( parameter )f_list = [a, b, c]v_list = [1, 2, 3]for index, function in enumerate ( f_list ):    function ( v_list [ index ] )
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python