提供的代码工作得很好,但我想使它更有效率(如果可能)。是否有可能使下面的代码更快?
我的问题是能否更有效地生成数组np_b
。特别是,是否有可能通过theano_f(*np_a)
在np_a
的所有元素上计算函数theano_f
,以便应用广播(?)或向量化(?)?
请注意,我简化了我的真实问题,我必须使用某个sympy函数的theano_function
生成theano_f
,而实际的数组np_a
包含许多元素。
from sympy import symbols
from sympy.printing.theanocode import theano_function
import numpy as np
x,y,z = symbols('x y z')
sympy_f = x+y+z # a sympy-function which depends on 3 variables
theano_f = theano_function([x,y,z], [sympy_f]) # Theano-compiled function which depends on 3 scalars
np_a = np.array([[1,1,1],[2,2,2],[-1,-2,0],[0,2,0]])
np_b = np.array([theano_f(*x) for x in np_a]) # The obtained four numbers
#should be recorded into the numpy-array np_b
print(np_b)
'numpy.vectorize'它至少会避免创建一个列表,然后将其转换为回数组:https://docs.scipy.org/ DOC/numpy的-1.10.0 /参考/生成/ numpy.vectorize.html。 – JulienD
谢谢你的回应。不幸的是,我仍然不明白如何使它工作。我创建了一个矢量化函数'vectorized_f = np.vectorize(theano_f)'。然而,'vectorized_f(* [1,1,1])'工作正常,但'vectorized_f(np_a)'引发TypeError:缺少必需的输入。所以我认为整个问题是解开'np_a'中的元素。你能否在这种情况下展示如何实际应用矢量化? –