【问题标题】:How to apply list of functions to list of corresponding parameters *fast*如何将函数列表应用于相应参数列表*快速*
【发布时间】:2018-05-29 21:45:45
【问题描述】:

给出的是 Python 中的函数句柄列表,比如:

f = [f1, f2, f3, f4]

以及相应的参数列表:

a = [a1, a2, a3, a4]

问题 我想快速计算:[f1(a1), f2(a2), f3(a3), f4(a4)]。我尝试了列表理解,但对于我的应用程序来说太慢了。有没有更自然的方式/numpy-fast 的方式来做到这一点?我正在考虑某种矢量化。

【问题讨论】:

  • 你试过了吗:[func(param) for func, param in zip(f, a)]?我不明白numpy 在这种情况下如何优化zip
  • 在任何人评估它是否可以矢量化之前,您需要展示该函数的作用。请给出一个示例输入和输出,以及函数
  • @roganjosh 感谢您的评论,是的,我可能需要更深入一层,好点,我想我大概是在考虑将 f 和 a 堆叠在二维数组中并将列应用到某种意义上的“彼此”。
  • 拥有数组中每个项目的函数列表可能意味着您已经过了矢量化点。 numpy 库中存在一些误导性名称,这些名称无非是 python for 循环,所以我们需要看看这些函数做了什么(假设它们基本相同)

标签: python performance numpy


【解决方案1】:

使用zip 将两个列表中相同索引的元素关联起来。

res = [func(x) for func, x in zip(f, a)]

从那里开始,您的瓶颈可能是函数调用。

【讨论】:

    【解决方案2】:

    瓶颈可能是函数调用。不确定可能通过内存管理影响性能的结果大小。因此,请务必了解列表推导和生成器表达式之间的区别。如果内存是一个问题,请使用生成器表达式:

    res = (fun(x) for fun, x in zip(f, a))
    

    【讨论】:

      猜你喜欢
      • 2018-12-19
      • 1970-01-01
      • 2018-06-29
      • 2021-04-25
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      • 2015-08-25
      • 1970-01-01
      相关资源
      最近更新 更多