提供されたコードは完璧に機能しますが、(可能であれば)より効率的にしたいと思います。次のコードを高速化することは可能ですか?
私の質問は、アレイnp_b
をより効率的に生成できるかどうかです。特に、theano_f(*np_a)
を介してnp_a
のすべての要素の関数theano_f
を計算して、ブロードキャスト(?)またはベクトル化(?)を適用することは可能ですか?
実際の問題を単純化し、theano_f
を生成する必要があります。theano_function
をsympy関数から使用し、実際の配列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/reference/generated/numpy.vectorize.htmlを参照してください。 – JulienD
ありがとうございました。残念ながら、私はまだそれを動作させる方法を理解していません。私はベクトル化された関数 'vectorized_f = np.vectorize(theano_f)'を作成しました。しかし、 'vectorized_f(* [1,1,1])'は正常に動作しますが、 'vectorized_f(np_a)'はTypeErrorを発生させます。だから私は、全体の問題は 'np_a'で要素を展開することだと思う。この状況でベクトル化を実際に適用する方法を教えてください。 –