Python 将函数映射到numpy数组,改变参数
首先,让我向您展示codez:Python 将函数映射到numpy数组,改变参数,python,arrays,map,numpy,currying,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的第二个参数的值。这是Slooow(每次迭代都创建一个新函数肯定没有帮助),我也觉得
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
的第二个参数的值。这是Slooow(每次迭代都创建一个新函数肯定没有帮助),我也觉得我错过了python的方法。有什么建议吗
能给我一个二维阵列的解决方案是个好主意吗?我不知道,但也许是
对可能问题的答复:
- 是的,这是(使用广义定义)一个优化问题(
隐藏了这一点)do\u something\u else()
- 不,scipy.optimize不起作用,因为我处理的是布尔值,它似乎永远不会收敛
a
的大小很大,那么瓶颈不应该是函数的创建,而是数组的复制。您是否尝试过numpy.vectorize
...
vfunc_curry = vectorize(functools.partial(func, y=n))
result = vfunc_curry(a)
...
你能重写这个函数吗?如果可能,您应该编写函数以获取两个numpy数组
a
和numpy.arange(n)
。您可能需要重新调整阵列的形状,以使阵列排列起来进行广播。func的功能是什么?如果我们对它的功能有更多的了解,那么我们可能会帮助您找到一种更快的方法。现在,我认为map必须将numpy数组更改为一个列表,映射它,然后列表被更改回一个数组,我觉得这个数组听起来不快。如果我们能找到一种使用numpy函数对列执行func的方法,它应该会更快。我猜你是对a中矩阵的每一列应用func,然后使用结果更接近正确的解。您是否分析过以确保此部分是问题所在,而不是“做某事”部分?a
是长度为100的1D numpy数组,那么dasfunc
做什么呢?如果由于某种原因无法透露func
的功能,则必须自己搜索瓶颈。探查器将对此提供帮助()。