为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

holdtom 2021-07-03 15:07:15
假设我有一个包含三个函数的列表: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 列表,在两个轴上循环时需要很长时间来评估。
查看完整描述

2 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

对于任意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 级别的循环。要矢量化您的计算,您需要依次考虑每个函数并编写一些逻辑(如果确实可以矢量化)。


查看完整回答
反对 回复 2021-07-13
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

如果它们按顺序排列,则此代码将起作用:


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 ] )


查看完整回答
反对 回复 2021-07-13
  • 2 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信