将函数映射到numpy数组,变化一个参数

2 投票
3 回答
6023 浏览
提问于 2025-04-16 05:47

首先,让我给你看看代码:

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 的第二个参数的值。这样做太慢了(每次都创建一个新函数肯定没什么帮助),我觉得我没有用上 Python 更优雅的写法。有什么建议吗?

如果能得到一个二维数组的解决方案会不会不错呢?我不太确定,但也许是个好主意。

对可能的问题的回答:

  • 是的,这个问题可以算作一个优化问题(do_something_else() 隐藏了这一点)
  • 不,scipy.optimize 没有奏效,因为我处理的是布尔值,似乎总是无法收敛。

3 个回答

0

你能重写这个函数吗?如果可以的话,建议你让这个函数接受两个numpy数组,一个是a,另一个是numpy.arange(n)。你可能需要调整一下数组的形状,以便它们能够正确对齐,方便进行广播操作。

0

如果a的大小很大,那么问题的关键不在于创建这个函数,而在于复制这个数组。

6

你试过 numpy.vectorize 吗?

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

撰写回答