将函数映射到numpy数组,改变参数

时间:2010-10-20 12:08:15

标签: python arrays map numpy currying

首先,让我告诉你codez:

a = array([...])
for n in range(10000):
    func_curry = functools.partial(func, y=n)
    result = array(map(func_curry, a))
    do_something_else(result)
    ...

我在这里做的是尝试将func应用于数组,每次更改func的第二个参数的值时都会更改。这是SLOOOOW(每次迭代创建一个新函数肯定没有帮助),我也觉得我错过了这样做的pythonic方式。有什么建议吗?

能给我2D阵列的解决方案是个好主意吗?我不知道,但也许是。

可能的问题答案:

  • 是的,这是(使用广泛的定义),一个优化问题(do_something_else()隐藏了这个)
  • 不,scipy.optimize没有用,因为我正在处理布尔值,它似乎永远不会收敛。

3 个答案:

答案 0 :(得分:6)

你试过numpy.vectorize吗?

...
    vfunc_curry = vectorize(functools.partial(func, y=n))
    result = vfunc_curry(a)
...

答案 1 :(得分:0)

如果a的大小很大,那么瓶颈不应该是函数的创建,而是数组的重复。

答案 2 :(得分:0)

你可以改写这个功能吗?如果可能,您应该编写函数来获取两个numpy数组anumpy.arange(n)。您可能需要重新整形以使阵列排队进行广播。